@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
@@ -11,14 +11,14 @@ const defaultModes = {
11
11
  years: true,
12
12
  };
13
13
  export function useCalendarState(props) {
14
- var _a, _b, _c;
15
- const { disabled, readOnly, modes = defaultModes } = props;
16
- const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
14
+ const { disabled, readOnly, modes = defaultModes, selectionMode = 'single' } = props;
15
+ const [value, setValue] = useControlledState(props.value, props.defaultValue ?? (selectionMode === 'single' ? null : []), props.onUpdate);
17
16
  const availableModes = calendarLayouts.filter((l) => modes[l]);
18
17
  const minMode = availableModes[0] || 'days';
19
- const [mode, setMode] = useControlledState(props.mode, (_b = props.defaultMode) !== null && _b !== void 0 ? _b : minMode, props.onUpdateMode);
18
+ const [mode, setMode] = useControlledState(props.mode, props.defaultMode ?? minMode, props.onUpdateMode);
20
19
  const currentMode = mode && availableModes.includes(mode) ? mode : minMode;
21
- const inputTimeZone = useDefaultTimeZone(props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue);
20
+ const firstValue = Array.isArray(value) ? (value[0] ?? null) : value;
21
+ const inputTimeZone = useDefaultTimeZone(firstValue || props.focusedValue || props.defaultFocusedValue);
22
22
  const timeZone = props.timeZone || inputTimeZone;
23
23
  const minValue = React.useMemo(() => (props.minValue ? props.minValue.timeZone(timeZone) : undefined), [timeZone, props.minValue]);
24
24
  const maxValue = React.useMemo(() => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined), [timeZone, props.maxValue]);
@@ -29,16 +29,14 @@ export function useCalendarState(props) {
29
29
  return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);
30
30
  }, [props.focusedValue, minValue, maxValue, timeZone]);
31
31
  const defaultFocusedValue = React.useMemo(() => {
32
- var _a;
33
- const defaultValue = ((_a = (props.defaultFocusedValue ? props.defaultFocusedValue : value)) === null || _a === void 0 ? void 0 : _a.timeZone(timeZone)) ||
34
- createPlaceholderValue({ timeZone }).startOf(minMode);
32
+ const defaultValue = (props.defaultFocusedValue ? props.defaultFocusedValue : firstValue)?.timeZone(timeZone) || createPlaceholderValue({ timeZone }).startOf(minMode);
35
33
  return constrainValue(defaultValue, minValue, maxValue);
36
- }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);
34
+ }, [maxValue, minValue, props.defaultFocusedValue, timeZone, firstValue, minMode]);
37
35
  const [focusedDateInner, setFocusedDate] = useControlledState(focusedValue, defaultFocusedValue, (date) => {
38
- var _a;
39
- (_a = props.onFocusUpdate) === null || _a === void 0 ? void 0 : _a.call(props, date.timeZone(inputTimeZone));
36
+ props.onFocusUpdate?.(date.timeZone(inputTimeZone));
40
37
  });
41
- const focusedDate = (_c = focusedDateInner === null || focusedDateInner === void 0 ? void 0 : focusedDateInner.timeZone(timeZone)) !== null && _c !== void 0 ? _c : constrainValue(createPlaceholderValue({ timeZone }), minValue, maxValue);
38
+ const focusedDate = focusedDateInner?.timeZone(timeZone) ??
39
+ constrainValue(createPlaceholderValue({ timeZone }), minValue, maxValue);
42
40
  if (isInvalid(focusedDate, minValue, maxValue)) {
43
41
  // If the focused date was moved to an invalid value, it can't be focused, so constrain it.
44
42
  setFocusedDate(constrainValue(focusedDate, minValue, maxValue));
@@ -49,31 +47,77 @@ export function useCalendarState(props) {
49
47
  const [isFocused, setFocused] = React.useState(props.autoFocus || false);
50
48
  const startDate = getStartDate(focusedDate, currentMode);
51
49
  const endDate = getEndDate(focusedDate, currentMode);
50
+ const finalValue = selectionMode === 'single'
51
+ ? firstValue
52
+ : Array.isArray(value)
53
+ ? value
54
+ : value
55
+ ? [value]
56
+ : [];
52
57
  return {
53
58
  disabled,
54
59
  readOnly,
55
- value,
60
+ value: finalValue,
56
61
  setValue(date) {
57
62
  if (!disabled && !readOnly) {
58
- let newValue = constrainValue(date, minValue, maxValue);
59
- if (this.isCellUnavailable(newValue)) {
60
- return;
63
+ if (selectionMode === 'single') {
64
+ let newValue = Array.isArray(date) ? (date[0] ?? null) : date;
65
+ if (!newValue) {
66
+ setValue(null);
67
+ return;
68
+ }
69
+ newValue = constrainValue(newValue, minValue, maxValue);
70
+ if (firstValue) {
71
+ // If there is a date already selected, then we want to keep its time
72
+ newValue = mergeDateTime(newValue, firstValue.timeZone(timeZone));
73
+ }
74
+ if (this.isCellUnavailable(newValue)) {
75
+ return;
76
+ }
77
+ setValue(newValue.timeZone(inputTimeZone));
61
78
  }
62
- if (value) {
63
- // If there is a date already selected, then we want to keep its time
64
- newValue = mergeDateTime(newValue, value.timeZone(timeZone));
79
+ else {
80
+ let dates = [];
81
+ if (Array.isArray(date)) {
82
+ dates = date;
83
+ }
84
+ else if (date !== null) {
85
+ dates = [date];
86
+ }
87
+ setValue(dates);
65
88
  }
66
- setValue(newValue.timeZone(inputTimeZone));
67
89
  }
68
90
  },
69
91
  timeZone,
70
92
  selectDate(date, force = false) {
71
93
  if (!disabled) {
72
94
  if (!readOnly && (force || this.mode === minMode)) {
73
- this.setValue(date.startOf(minMode));
74
95
  if (force && currentMode !== minMode) {
75
96
  setMode(minMode);
76
97
  }
98
+ const selectedDate = constrainValue(date.startOf(minMode), minValue, maxValue);
99
+ if (this.isCellUnavailable(selectedDate)) {
100
+ return;
101
+ }
102
+ if (selectionMode === 'single') {
103
+ this.setValue(selectedDate);
104
+ }
105
+ else {
106
+ const newValue = Array.isArray(value) ? [...value] : [];
107
+ if (value && !Array.isArray(value)) {
108
+ newValue.push(value);
109
+ }
110
+ let found = false;
111
+ let index = -1;
112
+ while ((index = newValue.findIndex((d) => selectedDate.isSame(d.timeZone(timeZone), currentMode))) !== -1) {
113
+ found = true;
114
+ newValue.splice(index, 1);
115
+ }
116
+ if (!found) {
117
+ newValue.push(selectedDate.timeZone(inputTimeZone));
118
+ }
119
+ this.setValue(newValue);
120
+ }
77
121
  }
78
122
  else {
79
123
  this.zoomIn();
@@ -174,17 +218,17 @@ export function useCalendarState(props) {
174
218
  return this.isInvalid(next);
175
219
  },
176
220
  isSelected(date) {
177
- return Boolean(value &&
178
- date.isSame(value.timeZone(timeZone), currentMode) &&
179
- !this.isCellDisabled(date));
180
- },
181
- isCellUnavailable(date) {
182
- if (this.mode === minMode) {
183
- return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));
184
- }
185
- else {
221
+ if (!value || !firstValue || this.isCellDisabled(date)) {
186
222
  return false;
187
223
  }
224
+ if (selectionMode === 'single') {
225
+ return date.isSame(firstValue.timeZone(timeZone), currentMode);
226
+ }
227
+ const dates = Array.isArray(value) ? value : [value];
228
+ return dates.some((d) => date.isSame(d.timeZone(timeZone), currentMode));
229
+ },
230
+ isCellUnavailable(date) {
231
+ return props.isDateUnavailable ? props.isDateUnavailable(date) : false;
188
232
  },
189
233
  isCellFocused(date) {
190
234
  return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {CalendarLayout, CalendarState, CalendarStateOptionsBase} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, T>, CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState(props: CalendarStateOptions): CalendarState {\n const {disabled, readOnly, modes = defaultModes} = props;\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n\n const inputTimeZone = useDefaultTimeZone(\n props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : value)?.timeZone(timeZone) ||\n createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n return {\n disabled,\n readOnly,\n value,\n setValue(date: DateTime) {\n if (!disabled && !readOnly) {\n let newValue = constrainValue(date, minValue, maxValue);\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n if (value) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, value.timeZone(timeZone));\n }\n setValue(newValue.timeZone(inputTimeZone));\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n this.setValue(date.startOf(minMode));\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n return Boolean(\n value &&\n date.isSame(value.timeZone(timeZone), currentMode) &&\n !this.isCellDisabled(date),\n );\n },\n isCellUnavailable(date: DateTime) {\n if (this.mode === minMode) {\n return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));\n } else {\n return false;\n }\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}
1
+ {"version":3,"file":"useCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {ValueBase} from '../../types';\nimport {constrainValue, createPlaceholderValue, isWeekend, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {calendarLayouts} from '../utils';\n\nimport type {\n CalendarLayout,\n CalendarState,\n CalendarStateOptionsBase,\n CalendarValueType,\n SelectionMode,\n} from './types';\n\nexport interface CalendarStateOptions<T = DateTime>\n extends ValueBase<T | null, Exclude<T, null>>, CalendarStateOptionsBase {}\n\nexport type {CalendarState} from './types';\n\nconst defaultModes: Record<CalendarLayout, boolean> = {\n days: true,\n months: true,\n quarters: false,\n years: true,\n};\nexport function useCalendarState<M extends SelectionMode = 'single'>(\n props: CalendarStateOptions<CalendarValueType<M>> & {selectionMode?: M},\n): CalendarState<M> {\n const {disabled, readOnly, modes = defaultModes, selectionMode = 'single' as M} = props;\n const [value, setValue] = useControlledState<DateTime | DateTime[] | null>(\n props.value,\n props.defaultValue ?? (selectionMode === 'single' ? null : []),\n props.onUpdate as any,\n );\n const availableModes = calendarLayouts.filter((l) => modes[l]);\n const minMode = availableModes[0] || 'days';\n\n const [mode, setMode] = useControlledState(\n props.mode,\n props.defaultMode ?? minMode,\n props.onUpdateMode,\n );\n\n const currentMode = mode && availableModes.includes(mode) ? mode : minMode;\n const firstValue = Array.isArray(value) ? (value[0] ?? null) : value;\n\n const inputTimeZone = useDefaultTimeZone(\n firstValue || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const minValue = React.useMemo(\n () => (props.minValue ? props.minValue.timeZone(timeZone) : undefined),\n [timeZone, props.minValue],\n );\n\n const maxValue = React.useMemo(\n () => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined),\n [timeZone, props.maxValue],\n );\n\n const focusedValue = React.useMemo(() => {\n if (!props.focusedValue) {\n return props.focusedValue;\n }\n return constrainValue(props.focusedValue.timeZone(timeZone), minValue, maxValue);\n }, [props.focusedValue, minValue, maxValue, timeZone]);\n\n const defaultFocusedValue = React.useMemo(() => {\n const defaultValue =\n (props.defaultFocusedValue ? props.defaultFocusedValue : firstValue)?.timeZone(\n timeZone,\n ) || createPlaceholderValue({timeZone}).startOf(minMode);\n return constrainValue(defaultValue, minValue, maxValue);\n }, [maxValue, minValue, props.defaultFocusedValue, timeZone, firstValue, minMode]);\n const [focusedDateInner, setFocusedDate] = useControlledState(\n focusedValue,\n defaultFocusedValue,\n (date: DateTime) => {\n props.onFocusUpdate?.(date.timeZone(inputTimeZone));\n },\n );\n\n const focusedDate =\n focusedDateInner?.timeZone(timeZone) ??\n constrainValue(createPlaceholderValue({timeZone}), minValue, maxValue);\n\n if (isInvalid(focusedDate, minValue, maxValue)) {\n // If the focused date was moved to an invalid value, it can't be focused, so constrain it.\n setFocusedDate(constrainValue(focusedDate, minValue, maxValue));\n }\n\n function focusCell(date: DateTime) {\n setFocusedDate(constrainValue(date.startOf(currentMode), minValue, maxValue));\n }\n\n const [isFocused, setFocused] = React.useState(props.autoFocus || false);\n\n const startDate = getStartDate(focusedDate, currentMode);\n const endDate = getEndDate(focusedDate, currentMode);\n\n const finalValue =\n selectionMode === 'single'\n ? firstValue\n : Array.isArray(value)\n ? value\n : value\n ? [value]\n : [];\n\n return {\n disabled,\n readOnly,\n value: finalValue as CalendarValueType<M>,\n setValue(date) {\n if (!disabled && !readOnly) {\n if (selectionMode === 'single') {\n let newValue = Array.isArray(date) ? (date[0] ?? null) : date;\n if (!newValue) {\n setValue(null);\n return;\n }\n newValue = constrainValue(newValue, minValue, maxValue);\n if (firstValue) {\n // If there is a date already selected, then we want to keep its time\n newValue = mergeDateTime(newValue, firstValue.timeZone(timeZone));\n }\n if (this.isCellUnavailable(newValue)) {\n return;\n }\n setValue(newValue.timeZone(inputTimeZone));\n } else {\n let dates: DateTime[] = [];\n if (Array.isArray(date)) {\n dates = date;\n } else if (date !== null) {\n dates = [date];\n }\n\n setValue(dates);\n }\n }\n },\n timeZone,\n selectDate(date: DateTime, force = false) {\n if (!disabled) {\n if (!readOnly && (force || this.mode === minMode)) {\n if (force && currentMode !== minMode) {\n setMode(minMode);\n }\n const selectedDate = constrainValue(date.startOf(minMode), minValue, maxValue);\n if (this.isCellUnavailable(selectedDate)) {\n return;\n }\n if (selectionMode === 'single') {\n this.setValue(selectedDate);\n } else {\n const newValue = Array.isArray(value) ? [...value] : [];\n if (value && !Array.isArray(value)) {\n newValue.push(value);\n }\n let found = false;\n let index = -1;\n while (\n (index = newValue.findIndex((d) =>\n selectedDate.isSame(d.timeZone(timeZone), currentMode),\n )) !== -1\n ) {\n found = true;\n newValue.splice(index, 1);\n }\n if (!found) {\n newValue.push(selectedDate.timeZone(inputTimeZone));\n }\n this.setValue(newValue);\n }\n } else {\n this.zoomIn();\n }\n }\n },\n minValue,\n maxValue,\n focusedDate,\n startDate,\n endDate,\n setFocusedDate(date: DateTime) {\n focusCell(date);\n setFocused(true);\n },\n focusNextCell() {\n focusCell(focusedDate.add(1, this.mode));\n },\n focusPreviousCell() {\n focusCell(focusedDate.subtract(1, this.mode));\n },\n focusNextRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.add(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(1, 'years'));\n } else {\n focusCell(focusedDate.add(3, this.mode));\n }\n },\n focusPreviousRow() {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract(1, 'week'));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(1, 'years'));\n } else {\n focusCell(focusedDate.subtract(3, this.mode));\n }\n },\n focusNextPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.add({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.add(4, 'years'));\n } else {\n focusCell(focusedDate.add(12, this.mode));\n }\n },\n focusPreviousPage(larger?: boolean) {\n if (this.mode === 'days') {\n focusCell(focusedDate.subtract({months: larger ? 12 : 1}));\n } else if (this.mode === 'quarters') {\n focusCell(focusedDate.subtract(4, 'years'));\n } else {\n focusCell(focusedDate.subtract(12, this.mode));\n }\n },\n focusSectionStart() {\n focusCell(getStartDate(focusedDate, this.mode));\n },\n focusSectionEnd() {\n focusCell(getEndDate(focusedDate, this.mode));\n },\n zoomIn() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) - 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n zoomOut() {\n const nextMode = availableModes[availableModes.indexOf(this.mode) + 1];\n if (nextMode) {\n this.setMode(nextMode);\n }\n },\n selectFocusedDate() {\n this.selectDate(focusedDate, true);\n },\n isFocused,\n setFocused,\n isInvalid(date: DateTime) {\n return isInvalid(date, this.minValue, this.maxValue, this.mode);\n },\n isPreviousPageInvalid() {\n const prev = this.startDate.subtract(1, 'day');\n return this.isInvalid(prev);\n },\n isNextPageInvalid() {\n const next = this.endDate.endOf(this.mode).add(1, 'day');\n return this.isInvalid(next);\n },\n isSelected(date: DateTime) {\n if (!value || !firstValue || this.isCellDisabled(date)) {\n return false;\n }\n if (selectionMode === 'single') {\n return date.isSame(firstValue.timeZone(timeZone), currentMode);\n }\n\n const dates = Array.isArray(value) ? value : [value];\n return dates.some((d) => date.isSame(d.timeZone(timeZone), currentMode));\n },\n isCellUnavailable(date: DateTime) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n isCellFocused(date: DateTime) {\n return this.isFocused && focusedDate && date.isSame(focusedDate, currentMode);\n },\n isCellDisabled(date: DateTime) {\n return this.disabled || this.isInvalid(date);\n },\n isWeekend(date: DateTime) {\n if (this.mode !== 'days') {\n return false;\n }\n if (typeof props.isWeekend === 'function') {\n return props.isWeekend(date);\n }\n return isWeekend(date);\n },\n isCurrent(date: DateTime) {\n return dateTime({timeZone}).isSame(date, this.mode);\n },\n mode: currentMode,\n setMode,\n availableModes,\n };\n}\n\nfunction getStartDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.startOf('month');\n }\n\n if (mode === 'months') {\n return date.startOf('year');\n }\n\n if (mode === 'quarters') {\n const year = Math.floor(date.year() / 4) * 4;\n return date.startOf('year').set('year', year);\n }\n\n const year = Math.floor(date.year() / 12) * 12;\n return date.startOf('year').set('year', year);\n}\n\nfunction getEndDate(date: DateTime, mode: CalendarLayout) {\n if (mode === 'days') {\n return date.endOf('month').startOf('day');\n }\n\n if (mode === 'months') {\n return date.endOf('year').startOf('month');\n }\n\n const startDate = getStartDate(date, mode);\n if (mode === 'quarters') {\n return startDate.add(15, 'quarters');\n }\n\n return startDate.add({[mode]: 11});\n}\n\nfunction isInvalid(\n date: DateTime,\n minValue?: DateTime,\n maxValue?: DateTime,\n mode: CalendarLayout = 'days',\n) {\n const constrainedDate = constrainValue(date, minValue, maxValue);\n return !constrainedDate.isSame(date, mode);\n}\n"]}
@@ -1,21 +1,20 @@
1
- import { __rest } from "tslib";
2
1
  import React from 'react';
3
2
  import { useControlledState } from '@gravity-ui/uikit';
4
3
  import { constrainValue, mergeDateTime } from "../../utils/dates.js";
5
4
  import { useDefaultTimeZone } from "../../utils/useDefaultTimeZone.js";
6
5
  import { useCalendarState } from "./useCalendarState.js";
7
6
  export function useRangeCalendarState(props) {
8
- var _a;
9
- const { value: valueProp, defaultValue = null, onUpdate } = props, calendarProps = __rest(props, ["value", "defaultValue", "onUpdate"]);
7
+ const { value: valueProp, defaultValue = null, onUpdate, ...calendarProps } = props;
10
8
  const [value, setValue] = useControlledState(valueProp, defaultValue, onUpdate);
11
9
  const [anchorDate, setAnchorDateState] = React.useState();
12
- const inputTimeZone = useDefaultTimeZone((valueProp === null || valueProp === void 0 ? void 0 : valueProp.start) || (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.start) || props.focusedValue || props.defaultFocusedValue);
10
+ const inputTimeZone = useDefaultTimeZone(valueProp?.start || defaultValue?.start || props.focusedValue || props.defaultFocusedValue);
13
11
  const timeZone = props.timeZone || inputTimeZone;
14
- const calendar = useCalendarState(Object.assign(Object.assign({}, calendarProps), { value: null, timeZone }));
12
+ const calendar = useCalendarState({ ...calendarProps, value: null, timeZone });
15
13
  const highlightedRange = anchorDate
16
14
  ? makeRange(anchorDate, calendar.focusedDate, calendar.mode)
17
- : ((_a = (value &&
18
- makeRange(value.start.timeZone(timeZone), value.end.timeZone(timeZone), calendar.mode))) !== null && _a !== void 0 ? _a : undefined);
15
+ : ((value &&
16
+ makeRange(value.start.timeZone(timeZone), value.end.timeZone(timeZone), calendar.mode)) ??
17
+ undefined);
19
18
  const minMode = calendar.availableModes[0];
20
19
  const handleSetValue = (v) => {
21
20
  let { start, end } = v;
@@ -49,8 +48,14 @@ export function useRangeCalendarState(props) {
49
48
  setAnchorDateState(newDate);
50
49
  }
51
50
  };
52
- return Object.assign(Object.assign({}, calendar), { value, setValue: handleSetValue, selectDate,
53
- anchorDate, setAnchorDate: setAnchorDateState, highlightedRange,
51
+ return {
52
+ ...calendar,
53
+ value,
54
+ setValue: handleSetValue,
55
+ selectDate,
56
+ anchorDate,
57
+ setAnchorDate: setAnchorDateState,
58
+ highlightedRange,
54
59
  isSelected(date) {
55
60
  if (!highlightedRange) {
56
61
  return false;
@@ -64,7 +69,8 @@ export function useRangeCalendarState(props) {
64
69
  if (anchorDate) {
65
70
  this.setFocusedDate(date);
66
71
  }
67
- } });
72
+ },
73
+ };
68
74
  }
69
75
  function makeRange(start, end, mode) {
70
76
  if (start.isBefore(end)) {
@@ -1 +1 @@
1
- {"version":3,"file":"useRangeCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useRangeCalendarState.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAC,cAAc,EAAE,aAAa,EAAC,6BAA0B;AAChE,OAAO,EAAC,kBAAkB,EAAC,0CAAuC;AAGlE,OAAO,EAAC,gBAAgB,EAAC,8BAA2B;AAOpD,MAAM,UAAU,qBAAqB,CAAC,KAAgC;;IAClE,MAAM,EAAC,KAAK,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,EAAE,QAAQ,KAAsB,KAAK,EAAtB,aAAa,UAAI,KAAK,EAA3E,qCAAmE,CAAQ,CAAC;IAClF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEhF,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAY,CAAC;IAEpE,MAAM,aAAa,GAAG,kBAAkB,CACpC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,MAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAA,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,mBAAmB,CAC7F,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,iCAAK,aAAa,KAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,IAAE,CAAC;IAC7E,MAAM,gBAAgB,GAAG,UAAU;QAC/B,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;QAC5D,CAAC,CAAC,CAAC,MAAA,CAAC,KAAK;YACH,SAAS,CACL,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC9B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5B,QAAQ,CAAC,IAAI,CAChB,CAAC,mCACN,SAAS,CAAC,CAAC;IAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAE3C,MAAM,cAAc,GAAG,CAAC,CAAuB,EAAE,EAAE;QAC/C,IAAI,EAAC,KAAK,EAAE,GAAG,EAAC,GAAG,CAAC,CAAC;QACrB,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7D,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,QAAQ,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC;IACvF,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;QACjD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5D,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACL,CAAC,CAAC;IAEF,uCACO,QAAQ,KACX,KAAK,EACL,QAAQ,EAAE,cAAc,EACxB,UAAU;QACV,UAAU,EACV,aAAa,EAAE,kBAAkB,EACjC,gBAAgB;QAChB,UAAU,CAAC,IAAI;YACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,OAAO,CACH,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;gBAC3C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACzC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;oBACzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAC;QACN,CAAC;QACD,aAAa,CAAC,IAAI;YACd,IAAI,UAAU,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC,IACH;AACN,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,GAAa,EAAE,IAAoB;IACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACH,KAAK;YACL,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;SACvB,CAAC;IACN,CAAC;IAED,OAAO;QACH,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;KACzB,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 {RangeValue} from '../../types';\nimport {constrainValue, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\n\nimport type {CalendarLayout, RangeCalendarState} from './types';\nimport {useCalendarState} from './useCalendarState';\nimport type {CalendarStateOptions} from './useCalendarState';\n\nexport interface RangeCalendarStateOptions extends CalendarStateOptions<RangeValue<DateTime>> {}\n\nexport type {RangeCalendarState} from './types';\n\nexport function useRangeCalendarState(props: RangeCalendarStateOptions): RangeCalendarState {\n const {value: valueProp, defaultValue = null, onUpdate, ...calendarProps} = props;\n const [value, setValue] = useControlledState(valueProp, defaultValue, onUpdate);\n\n const [anchorDate, setAnchorDateState] = React.useState<DateTime>();\n\n const inputTimeZone = useDefaultTimeZone(\n valueProp?.start || defaultValue?.start || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const calendar = useCalendarState({...calendarProps, value: null, timeZone});\n const highlightedRange = anchorDate\n ? makeRange(anchorDate, calendar.focusedDate, calendar.mode)\n : ((value &&\n makeRange(\n value.start.timeZone(timeZone),\n value.end.timeZone(timeZone),\n calendar.mode,\n )) ??\n undefined);\n\n const minMode = calendar.availableModes[0];\n\n const handleSetValue = (v: RangeValue<DateTime>) => {\n let {start, end} = v;\n if (value) {\n start = mergeDateTime(start, value.start.timeZone(timeZone));\n end = mergeDateTime(end, value.end.timeZone(timeZone));\n }\n setValue({start: start.timeZone(inputTimeZone), end: end.timeZone(inputTimeZone)});\n };\n\n const selectDate = (date: DateTime, force = false) => {\n if (props.disabled) {\n return;\n }\n\n if (!force && calendar.mode !== minMode) {\n calendar.zoomIn();\n return;\n }\n\n if (props.readOnly) {\n return;\n }\n\n const newDate = constrainValue(date, calendar.minValue, calendar.maxValue);\n if (calendar.isCellUnavailable(newDate)) {\n return;\n }\n\n if (anchorDate) {\n const range = makeRange(anchorDate, newDate, calendar.mode);\n handleSetValue(range);\n setAnchorDateState(undefined);\n } else {\n setAnchorDateState(newDate);\n }\n };\n\n return {\n ...calendar,\n value,\n setValue: handleSetValue,\n selectDate,\n anchorDate,\n setAnchorDate: setAnchorDateState,\n highlightedRange,\n isSelected(date) {\n if (!highlightedRange) {\n return false;\n }\n\n return (\n (date.isSame(highlightedRange.start, this.mode) ||\n date.isAfter(highlightedRange.start)) &&\n (date.isSame(highlightedRange.end, this.mode) ||\n date.isBefore(highlightedRange.end))\n );\n },\n highlightDate(date) {\n if (anchorDate) {\n this.setFocusedDate(date);\n }\n },\n };\n}\n\nfunction makeRange(start: DateTime, end: DateTime, mode: CalendarLayout): RangeValue<DateTime> {\n if (start.isBefore(end)) {\n return {\n start,\n end: end.endOf(mode),\n };\n }\n\n return {\n start: end,\n end: start.endOf(mode),\n };\n}\n"]}
1
+ {"version":3,"file":"useRangeCalendarState.js","sourceRoot":"../../../../../src","sources":["components/CalendarView/hooks/useRangeCalendarState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {RangeValue} from '../../types';\nimport {constrainValue, mergeDateTime} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\n\nimport type {CalendarLayout, RangeCalendarState} from './types';\nimport {useCalendarState} from './useCalendarState';\nimport type {CalendarStateOptions} from './useCalendarState';\n\nexport interface RangeCalendarStateOptions extends CalendarStateOptions<RangeValue<DateTime>> {}\n\nexport type {RangeCalendarState} from './types';\n\nexport function useRangeCalendarState(props: RangeCalendarStateOptions): RangeCalendarState {\n const {value: valueProp, defaultValue = null, onUpdate, ...calendarProps} = props;\n const [value, setValue] = useControlledState(valueProp, defaultValue, onUpdate);\n\n const [anchorDate, setAnchorDateState] = React.useState<DateTime>();\n\n const inputTimeZone = useDefaultTimeZone(\n valueProp?.start || defaultValue?.start || props.focusedValue || props.defaultFocusedValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const calendar = useCalendarState({...calendarProps, value: null, timeZone});\n const highlightedRange = anchorDate\n ? makeRange(anchorDate, calendar.focusedDate, calendar.mode)\n : ((value &&\n makeRange(\n value.start.timeZone(timeZone),\n value.end.timeZone(timeZone),\n calendar.mode,\n )) ??\n undefined);\n\n const minMode = calendar.availableModes[0];\n\n const handleSetValue = (v: RangeValue<DateTime>) => {\n let {start, end} = v;\n if (value) {\n start = mergeDateTime(start, value.start.timeZone(timeZone));\n end = mergeDateTime(end, value.end.timeZone(timeZone));\n }\n setValue({start: start.timeZone(inputTimeZone), end: end.timeZone(inputTimeZone)});\n };\n\n const selectDate = (date: DateTime, force = false) => {\n if (props.disabled) {\n return;\n }\n\n if (!force && calendar.mode !== minMode) {\n calendar.zoomIn();\n return;\n }\n\n if (props.readOnly) {\n return;\n }\n\n const newDate = constrainValue(date, calendar.minValue, calendar.maxValue);\n if (calendar.isCellUnavailable(newDate)) {\n return;\n }\n\n if (anchorDate) {\n const range = makeRange(anchorDate, newDate, calendar.mode);\n handleSetValue(range);\n setAnchorDateState(undefined);\n } else {\n setAnchorDateState(newDate);\n }\n };\n\n return {\n ...calendar,\n value,\n setValue: handleSetValue,\n selectDate,\n anchorDate,\n setAnchorDate: setAnchorDateState,\n highlightedRange,\n isSelected(date) {\n if (!highlightedRange) {\n return false;\n }\n\n return (\n (date.isSame(highlightedRange.start, this.mode) ||\n date.isAfter(highlightedRange.start)) &&\n (date.isSame(highlightedRange.end, this.mode) ||\n date.isBefore(highlightedRange.end))\n );\n },\n highlightDate(date) {\n if (anchorDate) {\n this.setFocusedDate(date);\n }\n },\n };\n}\n\nfunction makeRange(start: DateTime, end: DateTime, mode: CalendarLayout): RangeValue<DateTime> {\n if (start.isBefore(end)) {\n return {\n start,\n end: end.endOf(mode),\n };\n }\n\n return {\n start: end,\n end: start.endOf(mode),\n };\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  import type { DateFieldProps } from "./hooks/useDateFieldProps.js";
2
2
  import "./DateField.css";
3
- export declare function DateField({ className, ...props }: DateFieldProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare function DateField({ className, ...props }: DateFieldProps): import("react").JSX.Element;
@@ -1,29 +1,17 @@
1
1
  'use client';
2
- import { __rest } from "tslib";
3
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- import React from 'react';
5
- import { TextInput, useFocusWithin } from '@gravity-ui/uikit';
3
+ import { TextInput } from '@gravity-ui/uikit';
6
4
  import { block } from "../../utils/cn.js";
7
5
  import { HiddenInput } from "../HiddenInput/HiddenInput.js";
8
- import { filterDOMProps } from "../utils/filterDOMProps.js";
9
6
  import { useDateFieldProps } from "./hooks/useDateFieldProps.js";
10
7
  import { useDateFieldState } from "./hooks/useDateFieldState.js";
11
8
  import "./DateField.css";
12
9
  const b = block('date-field');
13
- export function DateField(_a) {
14
- var { className } = _a, props = __rest(_a, ["className"]);
10
+ export function DateField({ className, ...props }) {
15
11
  const state = useDateFieldState(props);
16
- const { inputProps } = useDateFieldProps(state, props);
17
- const [isActive, setActive] = React.useState(false);
18
- const { focusWithinProps } = useFocusWithin({
19
- onFocusWithinChange(isFocusWithin) {
20
- setActive(isFocusWithin);
21
- },
22
- });
23
- const DOMProps = filterDOMProps(props);
24
- delete DOMProps.id;
25
- return (_jsxs("div", Object.assign({}, DOMProps, { className: b(null, className), style: props.style }, focusWithinProps, { children: [_jsx(TextInput, Object.assign({}, inputProps, { value: state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value })), _jsx(HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => { var _a; return (_a = value === null || value === void 0 ? void 0 : value.toISOString()) !== null && _a !== void 0 ? _a : ''; }, onReset: (value) => {
26
- state.setDate(value);
27
- }, disabled: state.disabled, form: props.form })] })));
12
+ const { groupProps, inputProps } = useDateFieldProps(state, props);
13
+ return (_jsxs("div", { ...groupProps, className: b(null, className), style: props.style, children: [_jsx(TextInput, { ...inputProps }), _jsx(HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => value?.toISOString() ?? '', onReset: (value) => {
14
+ state.setValue(value);
15
+ }, disabled: state.disabled, form: props.form })] }));
28
16
  }
29
17
  //# sourceMappingURL=DateField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateField.js","sourceRoot":"../../../../src","sources":["components/DateField/DateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAC,KAAK,EAAC,0BAAuB;AACrC,OAAO,EAAC,WAAW,EAAC,sCAAmC;AACvD,OAAO,EAAC,cAAc,EAAC,mCAAgC;AAEvD,OAAO,EAAC,iBAAiB,EAAC,qCAAkC;AAE5D,OAAO,EAAC,iBAAiB,EAAC,qCAAkC;AAE5D,yBAA0B;AAE1B,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAE9B,MAAM,UAAU,SAAS,CAAC,EAAqC;QAArC,EAAC,SAAS,OAA2B,EAAtB,KAAK,cAApB,aAAqB,CAAD;IAC1C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,EAAC,UAAU,EAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAErD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,EAAC,gBAAgB,EAAC,GAAG,cAAc,CAAC;QACtC,mBAAmB,CAAC,aAAa;YAC7B,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,CAAC;IAEnB,OAAO,CACH,+BAAS,QAAQ,IAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAM,gBAAgB,eACtF,KAAC,SAAS,oBACF,UAAU,IACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAChF,EACF,KAAC,WAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,EAAE,mCAAI,EAAE,CAAA,EAAA,EACpD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,GAClB,KACA,CACT,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {TextInput, useFocusWithin} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {useDateFieldProps} from './hooks/useDateFieldProps';\nimport type {DateFieldProps} from './hooks/useDateFieldProps';\nimport {useDateFieldState} from './hooks/useDateFieldState';\n\nimport './DateField.scss';\n\nconst b = block('date-field');\n\nexport function DateField({className, ...props}: DateFieldProps) {\n const state = useDateFieldState(props);\n\n const {inputProps} = useDateFieldProps(state, props);\n\n const [isActive, setActive] = React.useState(false);\n const {focusWithinProps} = useFocusWithin({\n onFocusWithinChange(isFocusWithin) {\n setActive(isFocusWithin);\n },\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <div {...DOMProps} className={b(null, className)} style={props.style} {...focusWithinProps}>\n <TextInput\n {...inputProps}\n value={state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => value?.toISOString() ?? ''}\n onReset={(value) => {\n state.setDate(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"DateField.js","sourceRoot":"../../../../src","sources":["components/DateField/DateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAC,KAAK,EAAC,0BAAuB;AACrC,OAAO,EAAC,WAAW,EAAC,sCAAmC;AAEvD,OAAO,EAAC,iBAAiB,EAAC,qCAAkC;AAE5D,OAAO,EAAC,iBAAiB,EAAC,qCAAkC;AAE5D,yBAA0B;AAE1B,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAE9B,MAAM,UAAU,SAAS,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAiB;IAC3D,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,EAAC,UAAU,EAAE,UAAU,EAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjE,OAAO,CACH,kBAAS,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,aAClE,KAAC,SAAS,OAAK,UAAU,GAAI,EAC7B,KAAC,WAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EACpD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,GAClB,IACA,CACT,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\n\nimport {useDateFieldProps} from './hooks/useDateFieldProps';\nimport type {DateFieldProps} from './hooks/useDateFieldProps';\nimport {useDateFieldState} from './hooks/useDateFieldState';\n\nimport './DateField.scss';\n\nconst b = block('date-field');\n\nexport function DateField({className, ...props}: DateFieldProps) {\n const state = useDateFieldState(props);\n\n const {groupProps, inputProps} = useDateFieldProps(state, props);\n\n return (\n <div {...groupProps} className={b(null, className)} style={props.style}>\n <TextInput {...inputProps} />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => value?.toISOString() ?? ''}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n </div>\n );\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { AvailableSections } from "./types.js";
3
+ declare const dateFields: readonly ["year", "quarter", "month", "day", "weekday", "hour", "minute", "second", "dayPeriod"];
4
+ type Field = (typeof dateFields)[number];
5
+ export declare class IncompleteDate {
6
+ year: number | null;
7
+ month: number | null;
8
+ day: number | null;
9
+ weekday: number | null;
10
+ dayPeriod: number | null;
11
+ hour: number | null;
12
+ minute: number | null;
13
+ second: number | null;
14
+ constructor(date?: DateTime | null);
15
+ get quarter(): number | null;
16
+ set quarter(v: number | null);
17
+ copy(): IncompleteDate;
18
+ isComplete(availableUnits: AvailableSections): boolean;
19
+ validate(date: DateTime, availableUnits: AvailableSections): boolean;
20
+ isCleared(availableUnits: AvailableSections): boolean;
21
+ set(field: Field, value: number): IncompleteDate;
22
+ clear(field: Field): IncompleteDate;
23
+ toDateTime(baseValue: DateTime, { setDate, setTime }: {
24
+ setDate: boolean;
25
+ setTime: boolean;
26
+ }): DateTime;
27
+ }
28
+ export {};
@@ -0,0 +1,112 @@
1
+ import { getDurationUnitFromSectionType } from "./utils.js";
2
+ const dateFields = [
3
+ 'year',
4
+ 'quarter',
5
+ 'month',
6
+ 'day',
7
+ 'weekday',
8
+ 'hour',
9
+ 'minute',
10
+ 'second',
11
+ 'dayPeriod',
12
+ ];
13
+ export class IncompleteDate {
14
+ year;
15
+ month;
16
+ day;
17
+ weekday;
18
+ dayPeriod;
19
+ hour;
20
+ minute;
21
+ second;
22
+ constructor(date) {
23
+ this.year = date?.year() ?? null;
24
+ this.month = date ? date.month() + 1 : null;
25
+ this.day = date?.date() ?? null;
26
+ this.weekday = date?.day() ?? null;
27
+ this.hour = date?.hour() ?? null;
28
+ this.minute = date?.minute() ?? null;
29
+ this.second = date?.second() ?? null;
30
+ if (date) {
31
+ this.dayPeriod = date.hour() >= 12 ? 1 : 0;
32
+ }
33
+ else {
34
+ this.dayPeriod = null;
35
+ }
36
+ }
37
+ get quarter() {
38
+ return this.month === null ? null : Math.ceil(this.month / 3);
39
+ }
40
+ set quarter(v) {
41
+ this.month =
42
+ v === null
43
+ ? null
44
+ : (v - 1) * 3 + (this.month === null ? 1 : ((this.month - 1) % 3) + 13);
45
+ }
46
+ copy() {
47
+ const copy = new IncompleteDate();
48
+ for (const field of dateFields) {
49
+ copy[field] = this[field];
50
+ }
51
+ return copy;
52
+ }
53
+ isComplete(availableUnits) {
54
+ return dateFields.every((field) => !availableUnits[field] || this[field] !== null);
55
+ }
56
+ validate(date, availableUnits) {
57
+ return dateFields.every((field) => {
58
+ if (!availableUnits[field]) {
59
+ return true;
60
+ }
61
+ if (field === 'dayPeriod') {
62
+ return this.dayPeriod === (date.hour() >= 12 ? 1 : 0);
63
+ }
64
+ if (field === 'month') {
65
+ return date.month() + 1 === this.month;
66
+ }
67
+ return date[getDurationUnitFromSectionType(field)]() === this[field];
68
+ });
69
+ }
70
+ isCleared(availableUnits) {
71
+ return dateFields.every((field) => !availableUnits[field] || this[field] === null);
72
+ }
73
+ set(field, value) {
74
+ const copy = this.copy();
75
+ copy[field] = value;
76
+ if (field === 'hour') {
77
+ copy.dayPeriod = (copy.hour ?? 0) >= 12 ? 1 : 0;
78
+ }
79
+ return copy;
80
+ }
81
+ clear(field) {
82
+ const copy = this.copy();
83
+ copy[field] = null;
84
+ return copy;
85
+ }
86
+ toDateTime(baseValue, { setDate, setTime }) {
87
+ let nextValue = baseValue;
88
+ if (setDate) {
89
+ nextValue = nextValue
90
+ .set({
91
+ year: this.year ?? baseValue.year(),
92
+ month: 0, // set January to not overflow day value
93
+ date: this.day ?? baseValue.date(),
94
+ })
95
+ .set({ month: this.month === null ? baseValue.month() : this.month - 1 });
96
+ if (this.day === null && this.weekday !== null) {
97
+ nextValue = nextValue.set({ day: this.weekday });
98
+ }
99
+ }
100
+ if (setTime) {
101
+ nextValue = nextValue
102
+ .set({
103
+ hour: this.hour ?? baseValue.hour(),
104
+ minute: this.minute ?? baseValue.minute(),
105
+ second: this.second ?? baseValue.second(),
106
+ })
107
+ .timeZone(nextValue.timeZone());
108
+ }
109
+ return nextValue;
110
+ }
111
+ }
112
+ //# sourceMappingURL=IncompleteDate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IncompleteDate.js","sourceRoot":"../../../../src","sources":["components/DateField/IncompleteDate.ts"],"names":[],"mappings":"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","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {AvailableSections} from './types';\nimport {getDurationUnitFromSectionType} from './utils';\n\nconst dateFields = [\n 'year',\n 'quarter',\n 'month',\n 'day',\n 'weekday',\n 'hour',\n 'minute',\n 'second',\n 'dayPeriod',\n] as const;\n\ntype Field = (typeof dateFields)[number];\n\nexport class IncompleteDate {\n year: number | null;\n month: number | null;\n day: number | null;\n weekday: number | null;\n dayPeriod: number | null;\n hour: number | null;\n minute: number | null;\n second: number | null;\n\n constructor(date?: DateTime | null) {\n this.year = date?.year() ?? null;\n this.month = date ? date.month() + 1 : null;\n this.day = date?.date() ?? null;\n this.weekday = date?.day() ?? null;\n this.hour = date?.hour() ?? null;\n this.minute = date?.minute() ?? null;\n this.second = date?.second() ?? null;\n if (date) {\n this.dayPeriod = date.hour() >= 12 ? 1 : 0;\n } else {\n this.dayPeriod = null;\n }\n }\n\n get quarter() {\n return this.month === null ? null : Math.ceil(this.month / 3);\n }\n\n set quarter(v: number | null) {\n this.month =\n v === null\n ? null\n : (v - 1) * 3 + (this.month === null ? 1 : ((this.month - 1) % 3) + 13);\n }\n\n copy() {\n const copy = new IncompleteDate();\n for (const field of dateFields) {\n copy[field] = this[field];\n }\n return copy;\n }\n\n isComplete(availableUnits: AvailableSections): boolean {\n return dateFields.every((field) => !availableUnits[field] || this[field] !== null);\n }\n\n validate(date: DateTime, availableUnits: AvailableSections): boolean {\n return dateFields.every((field) => {\n if (!availableUnits[field]) {\n return true;\n }\n\n if (field === 'dayPeriod') {\n return this.dayPeriod === (date.hour() >= 12 ? 1 : 0);\n }\n\n if (field === 'month') {\n return date.month() + 1 === this.month;\n }\n\n return date[getDurationUnitFromSectionType(field)]() === this[field];\n });\n }\n\n isCleared(availableUnits: AvailableSections): boolean {\n return dateFields.every((field) => !availableUnits[field] || this[field] === null);\n }\n\n set(field: Field, value: number): IncompleteDate {\n const copy = this.copy();\n copy[field] = value;\n if (field === 'hour') {\n copy.dayPeriod = (copy.hour ?? 0) >= 12 ? 1 : 0;\n }\n\n return copy;\n }\n\n clear(field: Field): IncompleteDate {\n const copy = this.copy();\n copy[field] = null;\n return copy;\n }\n\n toDateTime(\n baseValue: DateTime,\n {setDate, setTime}: {setDate: boolean; setTime: boolean},\n ): DateTime {\n let nextValue = baseValue;\n if (setDate) {\n nextValue = nextValue\n .set({\n year: this.year ?? baseValue.year(),\n month: 0, // set January to not overflow day value\n date: this.day ?? baseValue.date(),\n })\n .set({month: this.month === null ? baseValue.month() : this.month - 1});\n if (this.day === null && this.weekday !== null) {\n nextValue = nextValue.set({day: this.weekday});\n }\n }\n if (setTime) {\n nextValue = nextValue\n .set({\n hour: this.hour ?? baseValue.hour(),\n minute: this.minute ?? baseValue.minute(),\n second: this.second ?? baseValue.second(),\n })\n .timeZone(nextValue.timeZone());\n }\n\n return nextValue;\n }\n}\n"]}