@gravity-ui/date-components 3.4.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) 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 +2 -1
  139. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -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/utils.d.ts +2 -2
  158. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +32 -9
  159. package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
  160. package/dist/cjs/components/utils/constants.d.ts +2 -0
  161. package/dist/cjs/components/utils/constants.js +7 -1
  162. package/dist/cjs/components/utils/constants.js.map +1 -1
  163. package/dist/cjs/components/utils/dates.d.ts +6 -1
  164. package/dist/cjs/components/utils/dates.js +6 -1
  165. package/dist/cjs/components/utils/dates.js.map +1 -1
  166. package/dist/cjs/components/utils/filterDOMProps.js +1 -1
  167. package/dist/cjs/components/utils/filterDOMProps.js.map +1 -1
  168. package/dist/cjs/components/utils/mergeProps.js +1 -1
  169. package/dist/cjs/components/utils/mergeProps.js.map +1 -1
  170. package/dist/cjs/components/utils/validation/datePicker.js +1 -1
  171. package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
  172. package/dist/cjs/components/utils/validation/i18n/ru.json +2 -2
  173. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  174. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +6 -1
  175. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  176. package/dist/cjs/hooks/useEventHandler.js +1 -2
  177. package/dist/cjs/hooks/useEventHandler.js.map +1 -1
  178. package/dist/cjs/hooks/useMove.d.ts +2 -2
  179. package/dist/cjs/hooks/useMove.js +6 -9
  180. package/dist/cjs/hooks/useMove.js.map +1 -1
  181. package/dist/cjs/hooks/useResizeObserver.js +1 -1
  182. package/dist/cjs/hooks/useResizeObserver.js.map +1 -1
  183. package/dist/cjs/package.json +1 -1
  184. package/dist/docs/INDEX.md +131 -0
  185. package/dist/docs/components/Calendar.md +125 -0
  186. package/dist/docs/components/DateField.md +206 -0
  187. package/dist/docs/components/DatePicker.md +194 -0
  188. package/dist/docs/components/RangeCalendar.md +125 -0
  189. package/dist/docs/components/RelativeDateField.md +73 -0
  190. package/dist/docs/components/RelativeDatePicker.md +59 -0
  191. package/dist/esm/components/Calendar/Calendar.d.ts +6 -2
  192. package/dist/esm/components/Calendar/Calendar.js +1 -1
  193. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  194. package/dist/esm/components/CalendarView/Calendar.css +3 -0
  195. package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
  196. package/dist/esm/components/CalendarView/CalendarView.d.ts +2 -1
  197. package/dist/esm/components/CalendarView/CalendarView.js +8 -8
  198. package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
  199. package/dist/esm/components/CalendarView/hooks/types.d.ts +5 -3
  200. package/dist/esm/components/CalendarView/hooks/types.js.map +1 -1
  201. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  202. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  203. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  204. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  205. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +7 -1
  206. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  207. package/dist/esm/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  208. package/dist/esm/components/CalendarView/hooks/useCalendarState.js +74 -30
  209. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  210. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js +16 -10
  211. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  212. package/dist/esm/components/DateField/DateField.d.ts +1 -1
  213. package/dist/esm/components/DateField/DateField.js +6 -18
  214. package/dist/esm/components/DateField/DateField.js.map +1 -1
  215. package/dist/esm/components/DateField/IncompleteDate.d.ts +28 -0
  216. package/dist/esm/components/DateField/IncompleteDate.js +112 -0
  217. package/dist/esm/components/DateField/IncompleteDate.js.map +1 -0
  218. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  219. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +17 -248
  220. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  221. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  222. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +250 -54
  223. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  224. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  225. package/dist/esm/components/DateField/hooks/useDateFieldState.js +85 -119
  226. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  227. package/dist/esm/components/DateField/hooks/useFocusManager.d.ts +29 -0
  228. package/dist/esm/components/DateField/hooks/useFocusManager.js +112 -0
  229. package/dist/esm/components/DateField/hooks/useFocusManager.js.map +1 -0
  230. package/dist/esm/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  231. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js +232 -0
  232. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  233. package/dist/esm/components/DateField/i18n/ru.json +1 -1
  234. package/dist/esm/components/DateField/index.d.ts +2 -1
  235. package/dist/esm/components/DateField/index.js +1 -1
  236. package/dist/esm/components/DateField/index.js.map +1 -1
  237. package/dist/esm/components/DateField/types.d.ts +2 -22
  238. package/dist/esm/components/DateField/types.js.map +1 -1
  239. package/dist/esm/components/DateField/utils.d.ts +21 -34
  240. package/dist/esm/components/DateField/utils.js +179 -125
  241. package/dist/esm/components/DateField/utils.js.map +1 -1
  242. package/dist/esm/components/DatePicker/DatePicker.d.ts +3 -3
  243. package/dist/esm/components/DatePicker/DatePicker.js +3 -5
  244. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  245. package/dist/esm/components/DatePicker/MobileCalendar.d.ts +1 -1
  246. package/dist/esm/components/DatePicker/MobileCalendar.js +3 -5
  247. package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
  248. package/dist/esm/components/DatePicker/StubButton.d.ts +1 -1
  249. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  250. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  251. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  252. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  253. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +30 -18
  254. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  255. package/dist/esm/components/HiddenInput/HiddenInput.d.ts +2 -5
  256. package/dist/esm/components/HiddenInput/HiddenInput.js +3 -4
  257. package/dist/esm/components/HiddenInput/HiddenInput.js.map +1 -1
  258. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  259. package/dist/esm/components/RangeCalendar/RangeCalendar.js +2 -3
  260. package/dist/esm/components/RangeCalendar/RangeCalendar.js.map +1 -1
  261. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
  262. package/dist/esm/components/RangeDateField/RangeDateField.js +7 -20
  263. package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
  264. package/dist/esm/components/RangeDateField/index.d.ts +0 -1
  265. package/dist/esm/components/RangeDateField/index.js +0 -1
  266. package/dist/esm/components/RangeDateField/index.js.map +1 -1
  267. package/dist/esm/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  268. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +4 -6
  269. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  270. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  271. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +2 -3
  272. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  273. package/dist/esm/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  274. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +4 -5
  275. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  276. package/dist/esm/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  277. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  278. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  279. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  280. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  281. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  282. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  283. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -22
  284. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  285. package/dist/esm/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  286. package/dist/esm/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  287. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  288. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  289. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  290. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +1 -2
  291. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  292. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  293. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  294. package/dist/esm/components/RangeDateSelection/utils/span.d.ts +2 -1
  295. package/dist/esm/components/RangeDateSelection/utils/span.js.map +1 -1
  296. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  297. package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -40
  298. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  299. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  300. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  301. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  302. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  303. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  304. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  305. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  306. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  307. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  308. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  309. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -22
  310. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  311. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  312. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  313. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  314. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  315. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  316. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  317. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  318. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  319. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  320. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  321. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  322. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  323. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  324. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  325. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -17
  326. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  327. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -1
  328. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +32 -7
  329. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  330. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  331. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  332. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  333. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  334. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +8 -10
  335. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  336. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  337. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  338. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  339. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +26 -15
  340. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  341. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  342. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  343. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  344. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  345. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  346. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  347. package/dist/esm/components/RelativeRangeDatePicker/utils.js +33 -9
  348. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  349. package/dist/esm/components/utils/constants.d.ts +2 -0
  350. package/dist/esm/components/utils/constants.js +6 -0
  351. package/dist/esm/components/utils/constants.js.map +1 -1
  352. package/dist/esm/components/utils/dates.d.ts +6 -1
  353. package/dist/esm/components/utils/dates.js +5 -1
  354. package/dist/esm/components/utils/dates.js.map +1 -1
  355. package/dist/esm/components/utils/filterDOMProps.js +1 -1
  356. package/dist/esm/components/utils/filterDOMProps.js.map +1 -1
  357. package/dist/esm/components/utils/mergeProps.js +1 -1
  358. package/dist/esm/components/utils/mergeProps.js.map +1 -1
  359. package/dist/esm/components/utils/validation/datePicker.js +1 -1
  360. package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
  361. package/dist/esm/components/utils/validation/i18n/ru.json +2 -2
  362. package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  363. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +6 -1
  364. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  365. package/dist/esm/hooks/useEventHandler.js +1 -2
  366. package/dist/esm/hooks/useEventHandler.js.map +1 -1
  367. package/dist/esm/hooks/useMove.d.ts +2 -2
  368. package/dist/esm/hooks/useMove.js +6 -9
  369. package/dist/esm/hooks/useMove.js.map +1 -1
  370. package/dist/esm/hooks/useResizeObserver.js +1 -1
  371. package/dist/esm/hooks/useResizeObserver.js.map +1 -1
  372. package/dist/esm/package.json +1 -1
  373. package/package.json +34 -27
  374. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -224
  375. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  376. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  377. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -9
  378. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  379. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  380. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +0 -42
  381. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  382. package/dist/cjs/components/RangeDateField/utils/index.d.ts +0 -3
  383. package/dist/cjs/components/RangeDateField/utils/index.js +0 -7
  384. package/dist/cjs/components/RangeDateField/utils/index.js.map +0 -1
  385. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  386. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +0 -7
  387. package/dist/cjs/components/RangeDateField/utils/isValidRange.js.map +0 -1
  388. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -220
  389. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  390. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  391. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -6
  392. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  393. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  394. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +0 -39
  395. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  396. package/dist/esm/components/RangeDateField/utils/index.d.ts +0 -3
  397. package/dist/esm/components/RangeDateField/utils/index.js +0 -4
  398. package/dist/esm/components/RangeDateField/utils/index.js.map +0 -1
  399. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  400. package/dist/esm/components/RangeDateField/utils/isValidRange.js +0 -4
  401. package/dist/esm/components/RangeDateField/utils/isValidRange.js.map +0 -1
@@ -15,14 +15,14 @@ const defaultModes = {
15
15
  years: true,
16
16
  };
17
17
  function useCalendarState(props) {
18
- var _a, _b, _c;
19
- const { disabled, readOnly, modes = defaultModes } = props;
20
- const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
18
+ const { disabled, readOnly, modes = defaultModes, selectionMode = 'single' } = props;
19
+ const [value, setValue] = (0, uikit_1.useControlledState)(props.value, props.defaultValue ?? (selectionMode === 'single' ? null : []), props.onUpdate);
21
20
  const availableModes = utils_1.calendarLayouts.filter((l) => modes[l]);
22
21
  const minMode = availableModes[0] || 'days';
23
- const [mode, setMode] = (0, uikit_1.useControlledState)(props.mode, (_b = props.defaultMode) !== null && _b !== void 0 ? _b : minMode, props.onUpdateMode);
22
+ const [mode, setMode] = (0, uikit_1.useControlledState)(props.mode, props.defaultMode ?? minMode, props.onUpdateMode);
24
23
  const currentMode = mode && availableModes.includes(mode) ? mode : minMode;
25
- const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(props.value || props.defaultValue || props.focusedValue || props.defaultFocusedValue);
24
+ const firstValue = Array.isArray(value) ? (value[0] ?? null) : value;
25
+ const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(firstValue || props.focusedValue || props.defaultFocusedValue);
26
26
  const timeZone = props.timeZone || inputTimeZone;
27
27
  const minValue = react_1.default.useMemo(() => (props.minValue ? props.minValue.timeZone(timeZone) : undefined), [timeZone, props.minValue]);
28
28
  const maxValue = react_1.default.useMemo(() => (props.maxValue ? props.maxValue.timeZone(timeZone) : undefined), [timeZone, props.maxValue]);
@@ -33,16 +33,14 @@ function useCalendarState(props) {
33
33
  return (0, dates_1.constrainValue)(props.focusedValue.timeZone(timeZone), minValue, maxValue);
34
34
  }, [props.focusedValue, minValue, maxValue, timeZone]);
35
35
  const defaultFocusedValue = react_1.default.useMemo(() => {
36
- var _a;
37
- const defaultValue = ((_a = (props.defaultFocusedValue ? props.defaultFocusedValue : value)) === null || _a === void 0 ? void 0 : _a.timeZone(timeZone)) ||
38
- (0, dates_1.createPlaceholderValue)({ timeZone }).startOf(minMode);
36
+ const defaultValue = (props.defaultFocusedValue ? props.defaultFocusedValue : firstValue)?.timeZone(timeZone) || (0, dates_1.createPlaceholderValue)({ timeZone }).startOf(minMode);
39
37
  return (0, dates_1.constrainValue)(defaultValue, minValue, maxValue);
40
- }, [maxValue, minValue, props.defaultFocusedValue, timeZone, value, minMode]);
38
+ }, [maxValue, minValue, props.defaultFocusedValue, timeZone, firstValue, minMode]);
41
39
  const [focusedDateInner, setFocusedDate] = (0, uikit_1.useControlledState)(focusedValue, defaultFocusedValue, (date) => {
42
- var _a;
43
- (_a = props.onFocusUpdate) === null || _a === void 0 ? void 0 : _a.call(props, date.timeZone(inputTimeZone));
40
+ props.onFocusUpdate?.(date.timeZone(inputTimeZone));
44
41
  });
45
- const focusedDate = (_c = focusedDateInner === null || focusedDateInner === void 0 ? void 0 : focusedDateInner.timeZone(timeZone)) !== null && _c !== void 0 ? _c : (0, dates_1.constrainValue)((0, dates_1.createPlaceholderValue)({ timeZone }), minValue, maxValue);
42
+ const focusedDate = focusedDateInner?.timeZone(timeZone) ??
43
+ (0, dates_1.constrainValue)((0, dates_1.createPlaceholderValue)({ timeZone }), minValue, maxValue);
46
44
  if (isInvalid(focusedDate, minValue, maxValue)) {
47
45
  // If the focused date was moved to an invalid value, it can't be focused, so constrain it.
48
46
  setFocusedDate((0, dates_1.constrainValue)(focusedDate, minValue, maxValue));
@@ -53,31 +51,77 @@ function useCalendarState(props) {
53
51
  const [isFocused, setFocused] = react_1.default.useState(props.autoFocus || false);
54
52
  const startDate = getStartDate(focusedDate, currentMode);
55
53
  const endDate = getEndDate(focusedDate, currentMode);
54
+ const finalValue = selectionMode === 'single'
55
+ ? firstValue
56
+ : Array.isArray(value)
57
+ ? value
58
+ : value
59
+ ? [value]
60
+ : [];
56
61
  return {
57
62
  disabled,
58
63
  readOnly,
59
- value,
64
+ value: finalValue,
60
65
  setValue(date) {
61
66
  if (!disabled && !readOnly) {
62
- let newValue = (0, dates_1.constrainValue)(date, minValue, maxValue);
63
- if (this.isCellUnavailable(newValue)) {
64
- return;
67
+ if (selectionMode === 'single') {
68
+ let newValue = Array.isArray(date) ? (date[0] ?? null) : date;
69
+ if (!newValue) {
70
+ setValue(null);
71
+ return;
72
+ }
73
+ newValue = (0, dates_1.constrainValue)(newValue, minValue, maxValue);
74
+ if (firstValue) {
75
+ // If there is a date already selected, then we want to keep its time
76
+ newValue = (0, dates_1.mergeDateTime)(newValue, firstValue.timeZone(timeZone));
77
+ }
78
+ if (this.isCellUnavailable(newValue)) {
79
+ return;
80
+ }
81
+ setValue(newValue.timeZone(inputTimeZone));
65
82
  }
66
- if (value) {
67
- // If there is a date already selected, then we want to keep its time
68
- newValue = (0, dates_1.mergeDateTime)(newValue, value.timeZone(timeZone));
83
+ else {
84
+ let dates = [];
85
+ if (Array.isArray(date)) {
86
+ dates = date;
87
+ }
88
+ else if (date !== null) {
89
+ dates = [date];
90
+ }
91
+ setValue(dates);
69
92
  }
70
- setValue(newValue.timeZone(inputTimeZone));
71
93
  }
72
94
  },
73
95
  timeZone,
74
96
  selectDate(date, force = false) {
75
97
  if (!disabled) {
76
98
  if (!readOnly && (force || this.mode === minMode)) {
77
- this.setValue(date.startOf(minMode));
78
99
  if (force && currentMode !== minMode) {
79
100
  setMode(minMode);
80
101
  }
102
+ const selectedDate = (0, dates_1.constrainValue)(date.startOf(minMode), minValue, maxValue);
103
+ if (this.isCellUnavailable(selectedDate)) {
104
+ return;
105
+ }
106
+ if (selectionMode === 'single') {
107
+ this.setValue(selectedDate);
108
+ }
109
+ else {
110
+ const newValue = Array.isArray(value) ? [...value] : [];
111
+ if (value && !Array.isArray(value)) {
112
+ newValue.push(value);
113
+ }
114
+ let found = false;
115
+ let index = -1;
116
+ while ((index = newValue.findIndex((d) => selectedDate.isSame(d.timeZone(timeZone), currentMode))) !== -1) {
117
+ found = true;
118
+ newValue.splice(index, 1);
119
+ }
120
+ if (!found) {
121
+ newValue.push(selectedDate.timeZone(inputTimeZone));
122
+ }
123
+ this.setValue(newValue);
124
+ }
81
125
  }
82
126
  else {
83
127
  this.zoomIn();
@@ -178,17 +222,17 @@ function useCalendarState(props) {
178
222
  return this.isInvalid(next);
179
223
  },
180
224
  isSelected(date) {
181
- return Boolean(value &&
182
- date.isSame(value.timeZone(timeZone), currentMode) &&
183
- !this.isCellDisabled(date));
184
- },
185
- isCellUnavailable(date) {
186
- if (this.mode === minMode) {
187
- return Boolean(props.isDateUnavailable && props.isDateUnavailable(date));
188
- }
189
- else {
225
+ if (!value || !firstValue || this.isCellDisabled(date)) {
190
226
  return false;
191
227
  }
228
+ if (selectionMode === 'single') {
229
+ return date.isSame(firstValue.timeZone(timeZone), currentMode);
230
+ }
231
+ const dates = Array.isArray(value) ? value : [value];
232
+ return dates.some((d) => date.isSame(d.timeZone(timeZone), currentMode));
233
+ },
234
+ isCellUnavailable(date) {
235
+ return props.isDateUnavailable ? props.isDateUnavailable(date) : false;
192
236
  },
193
237
  isCellFocused(date) {
194
238
  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"]}
@@ -8,17 +8,17 @@ const dates_1 = require("../../utils/dates.js");
8
8
  const useDefaultTimeZone_1 = require("../../utils/useDefaultTimeZone.js");
9
9
  const useCalendarState_1 = require("./useCalendarState.js");
10
10
  function useRangeCalendarState(props) {
11
- var _a;
12
- const { value: valueProp, defaultValue = null, onUpdate } = props, calendarProps = tslib_1.__rest(props, ["value", "defaultValue", "onUpdate"]);
11
+ const { value: valueProp, defaultValue = null, onUpdate, ...calendarProps } = props;
13
12
  const [value, setValue] = (0, uikit_1.useControlledState)(valueProp, defaultValue, onUpdate);
14
13
  const [anchorDate, setAnchorDateState] = react_1.default.useState();
15
- const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)((valueProp === null || valueProp === void 0 ? void 0 : valueProp.start) || (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.start) || props.focusedValue || props.defaultFocusedValue);
14
+ const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(valueProp?.start || defaultValue?.start || props.focusedValue || props.defaultFocusedValue);
16
15
  const timeZone = props.timeZone || inputTimeZone;
17
- const calendar = (0, useCalendarState_1.useCalendarState)(Object.assign(Object.assign({}, calendarProps), { value: null, timeZone }));
16
+ const calendar = (0, useCalendarState_1.useCalendarState)({ ...calendarProps, value: null, timeZone });
18
17
  const highlightedRange = anchorDate
19
18
  ? makeRange(anchorDate, calendar.focusedDate, calendar.mode)
20
- : ((_a = (value &&
21
- makeRange(value.start.timeZone(timeZone), value.end.timeZone(timeZone), calendar.mode))) !== null && _a !== void 0 ? _a : undefined);
19
+ : ((value &&
20
+ makeRange(value.start.timeZone(timeZone), value.end.timeZone(timeZone), calendar.mode)) ??
21
+ undefined);
22
22
  const minMode = calendar.availableModes[0];
23
23
  const handleSetValue = (v) => {
24
24
  let { start, end } = v;
@@ -52,8 +52,14 @@ function useRangeCalendarState(props) {
52
52
  setAnchorDateState(newDate);
53
53
  }
54
54
  };
55
- return Object.assign(Object.assign({}, calendar), { value, setValue: handleSetValue, selectDate,
56
- anchorDate, setAnchorDate: setAnchorDateState, highlightedRange,
55
+ return {
56
+ ...calendar,
57
+ value,
58
+ setValue: handleSetValue,
59
+ selectDate,
60
+ anchorDate,
61
+ setAnchorDate: setAnchorDateState,
62
+ highlightedRange,
57
63
  isSelected(date) {
58
64
  if (!highlightedRange) {
59
65
  return false;
@@ -67,7 +73,8 @@ function useRangeCalendarState(props) {
67
73
  if (anchorDate) {
68
74
  this.setFocusedDate(date);
69
75
  }
70
- } });
76
+ },
77
+ };
71
78
  }
72
79
  function makeRange(start, end, mode) {
73
80
  if (start.isBefore(end)) {
@@ -1 +1 @@
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
+ {"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;
@@ -2,31 +2,19 @@
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.DateField = DateField;
5
- const tslib_1 = require("tslib");
6
5
  const jsx_runtime_1 = require("react/jsx-runtime");
7
- const react_1 = tslib_1.__importDefault(require("react"));
8
6
  const uikit_1 = require("@gravity-ui/uikit");
9
7
  const cn_1 = require("../../utils/cn.js");
10
8
  const HiddenInput_1 = require("../HiddenInput/HiddenInput.js");
11
- const filterDOMProps_1 = require("../utils/filterDOMProps.js");
12
9
  const useDateFieldProps_1 = require("./hooks/useDateFieldProps.js");
13
10
  const useDateFieldState_1 = require("./hooks/useDateFieldState.js");
14
11
  require("./DateField.css");
15
12
  const b = (0, cn_1.block)('date-field');
16
- function DateField(_a) {
17
- var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
13
+ function DateField({ className, ...props }) {
18
14
  const state = (0, useDateFieldState_1.useDateFieldState)(props);
19
- const { inputProps } = (0, useDateFieldProps_1.useDateFieldProps)(state, props);
20
- const [isActive, setActive] = react_1.default.useState(false);
21
- const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
22
- onFocusWithinChange(isFocusWithin) {
23
- setActive(isFocusWithin);
24
- },
25
- });
26
- const DOMProps = (0, filterDOMProps_1.filterDOMProps)(props);
27
- delete DOMProps.id;
28
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({}, DOMProps, { className: b(null, className), style: props.style }, focusWithinProps, { children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, inputProps, { value: state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value })), (0, jsx_runtime_1.jsx)(HiddenInput_1.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) => {
29
- state.setDate(value);
30
- }, disabled: state.disabled, form: props.form })] })));
15
+ const { groupProps, inputProps } = (0, useDateFieldProps_1.useDateFieldProps)(state, props);
16
+ return ((0, jsx_runtime_1.jsxs)("div", { ...groupProps, className: b(null, className), style: props.style, children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, { ...inputProps }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => value?.toISOString() ?? '', onReset: (value) => {
17
+ state.setValue(value);
18
+ }, disabled: state.disabled, form: props.form })] }));
31
19
  }
32
20
  //# sourceMappingURL=DateField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateField.js","sourceRoot":"../../../../src","sources":["components/DateField/DateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAkBb,8BAiCC;;;AAjDD,0DAA0B;AAE1B,6CAA4D;AAE5D,0CAAqC;AACrC,+DAAuD;AACvD,+DAAuD;AAEvD,oEAA4D;AAE5D,oEAA4D;AAE5D,2BAA0B;AAE1B,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,YAAY,CAAC,CAAC;AAE9B,SAAgB,SAAS,CAAC,EAAqC;QAArC,EAAC,SAAS,OAA2B,EAAtB,KAAK,sBAApB,aAAqB,CAAD;IAC1C,MAAM,KAAK,GAAG,IAAA,qCAAiB,EAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,EAAC,UAAU,EAAC,GAAG,IAAA,qCAAiB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAErD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,EAAC,gBAAgB,EAAC,GAAG,IAAA,sBAAc,EAAC;QACtC,mBAAmB,CAAC,aAAa;YAC7B,SAAS,CAAC,aAAa,CAAC,CAAC;QAC7B,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,CAAC;IAEnB,OAAO,CACH,iDAAS,QAAQ,IAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAM,gBAAgB,eACtF,uBAAC,iBAAS,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,uBAAC,yBAAW,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,8BAoBC;;AAjCD,6CAA4C;AAE5C,0CAAqC;AACrC,+DAAuD;AAEvD,oEAA4D;AAE5D,oEAA4D;AAE5D,2BAA0B;AAE1B,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,YAAY,CAAC,CAAC;AAE9B,SAAgB,SAAS,CAAC,EAAC,SAAS,EAAE,GAAG,KAAK,EAAiB;IAC3D,MAAM,KAAK,GAAG,IAAA,qCAAiB,EAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,EAAC,UAAU,EAAE,UAAU,EAAC,GAAG,IAAA,qCAAiB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjE,OAAO,CACH,oCAAS,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,aAClE,uBAAC,iBAAS,OAAK,UAAU,GAAI,EAC7B,uBAAC,yBAAW,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,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IncompleteDate = void 0;
4
+ const utils_1 = require("./utils.js");
5
+ const dateFields = [
6
+ 'year',
7
+ 'quarter',
8
+ 'month',
9
+ 'day',
10
+ 'weekday',
11
+ 'hour',
12
+ 'minute',
13
+ 'second',
14
+ 'dayPeriod',
15
+ ];
16
+ class IncompleteDate {
17
+ year;
18
+ month;
19
+ day;
20
+ weekday;
21
+ dayPeriod;
22
+ hour;
23
+ minute;
24
+ second;
25
+ constructor(date) {
26
+ this.year = date?.year() ?? null;
27
+ this.month = date ? date.month() + 1 : null;
28
+ this.day = date?.date() ?? null;
29
+ this.weekday = date?.day() ?? null;
30
+ this.hour = date?.hour() ?? null;
31
+ this.minute = date?.minute() ?? null;
32
+ this.second = date?.second() ?? null;
33
+ if (date) {
34
+ this.dayPeriod = date.hour() >= 12 ? 1 : 0;
35
+ }
36
+ else {
37
+ this.dayPeriod = null;
38
+ }
39
+ }
40
+ get quarter() {
41
+ return this.month === null ? null : Math.ceil(this.month / 3);
42
+ }
43
+ set quarter(v) {
44
+ this.month =
45
+ v === null
46
+ ? null
47
+ : (v - 1) * 3 + (this.month === null ? 1 : ((this.month - 1) % 3) + 13);
48
+ }
49
+ copy() {
50
+ const copy = new IncompleteDate();
51
+ for (const field of dateFields) {
52
+ copy[field] = this[field];
53
+ }
54
+ return copy;
55
+ }
56
+ isComplete(availableUnits) {
57
+ return dateFields.every((field) => !availableUnits[field] || this[field] !== null);
58
+ }
59
+ validate(date, availableUnits) {
60
+ return dateFields.every((field) => {
61
+ if (!availableUnits[field]) {
62
+ return true;
63
+ }
64
+ if (field === 'dayPeriod') {
65
+ return this.dayPeriod === (date.hour() >= 12 ? 1 : 0);
66
+ }
67
+ if (field === 'month') {
68
+ return date.month() + 1 === this.month;
69
+ }
70
+ return date[(0, utils_1.getDurationUnitFromSectionType)(field)]() === this[field];
71
+ });
72
+ }
73
+ isCleared(availableUnits) {
74
+ return dateFields.every((field) => !availableUnits[field] || this[field] === null);
75
+ }
76
+ set(field, value) {
77
+ const copy = this.copy();
78
+ copy[field] = value;
79
+ if (field === 'hour') {
80
+ copy.dayPeriod = (copy.hour ?? 0) >= 12 ? 1 : 0;
81
+ }
82
+ return copy;
83
+ }
84
+ clear(field) {
85
+ const copy = this.copy();
86
+ copy[field] = null;
87
+ return copy;
88
+ }
89
+ toDateTime(baseValue, { setDate, setTime }) {
90
+ let nextValue = baseValue;
91
+ if (setDate) {
92
+ nextValue = nextValue
93
+ .set({
94
+ year: this.year ?? baseValue.year(),
95
+ month: 0, // set January to not overflow day value
96
+ date: this.day ?? baseValue.date(),
97
+ })
98
+ .set({ month: this.month === null ? baseValue.month() : this.month - 1 });
99
+ if (this.day === null && this.weekday !== null) {
100
+ nextValue = nextValue.set({ day: this.weekday });
101
+ }
102
+ }
103
+ if (setTime) {
104
+ nextValue = nextValue
105
+ .set({
106
+ hour: this.hour ?? baseValue.hour(),
107
+ minute: this.minute ?? baseValue.minute(),
108
+ second: this.second ?? baseValue.second(),
109
+ })
110
+ .timeZone(nextValue.timeZone());
111
+ }
112
+ return nextValue;
113
+ }
114
+ }
115
+ exports.IncompleteDate = IncompleteDate;
116
+ //# 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"]}