@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,16 +11,16 @@ const filterDOMProps_1 = require("../../utils/filterDOMProps.js");
11
11
  const getButtonSizeForInput_1 = require("../../utils/getButtonSizeForInput.js");
12
12
  const mergeProps_1 = require("../../utils/mergeProps.js");
13
13
  const i18n_1 = require("../i18n/index.js");
14
- function useRelativeDatePickerProps(state, _a) {
15
- var { onFocus, onBlur } = _a, props = tslib_1.__rest(_a, ["onFocus", "onBlur"]);
14
+ function useRelativeDatePickerProps(state, { onFocus, onBlur, ...props }) {
16
15
  const { mode, setMode, datePickerState, relativeDateState } = state;
17
- const [focusedDate, setFocusedDate] = react_1.default.useState(mode === 'relative'
18
- ? relativeDateState.lastCorrectDate
19
- : datePickerState.dateFieldState.displayValue);
20
- const [prevCorrectDate, setPrevCorrectDate] = react_1.default.useState(relativeDateState.lastCorrectDate);
21
- if (prevCorrectDate !== relativeDateState.lastCorrectDate) {
22
- setPrevCorrectDate(relativeDateState.lastCorrectDate);
23
- setFocusedDate(relativeDateState.lastCorrectDate);
16
+ const lastCorrectDate = relativeDateState.lastCorrectDate
17
+ ? relativeDateState.lastCorrectDate.startOf('day')
18
+ : null;
19
+ const [focusedDate, setFocusedDate] = react_1.default.useState(mode === 'relative' ? lastCorrectDate : datePickerState.dateFieldState.displayValue);
20
+ const [prevCorrectDate, setPrevCorrectDate] = react_1.default.useState(lastCorrectDate);
21
+ if (lastCorrectDate && (!prevCorrectDate || !lastCorrectDate.isSame(prevCorrectDate, 'day'))) {
22
+ setPrevCorrectDate(lastCorrectDate);
23
+ setFocusedDate(lastCorrectDate);
24
24
  }
25
25
  const [prevDateValue, setPrevDateValue] = react_1.default.useState(datePickerState.dateFieldState.displayValue);
26
26
  if (!datePickerState.dateFieldState.displayValue.isSame(prevDateValue, 'day')) {
@@ -31,8 +31,15 @@ function useRelativeDatePickerProps(state, _a) {
31
31
  onFocusWithin: onFocus,
32
32
  onBlurWithin: onBlur,
33
33
  onFocusWithinChange(isFocusWithin) {
34
+ state.datePickerState.dateFieldState.setActive(isFocusWithin);
34
35
  if (!isFocusWithin) {
35
36
  state.setActive(false);
37
+ if (mode === 'relative') {
38
+ state.relativeDateState.confirmValue();
39
+ }
40
+ else {
41
+ state.datePickerState.dateFieldState.confirmPlaceholder();
42
+ }
36
43
  }
37
44
  },
38
45
  });
@@ -63,8 +70,18 @@ function useRelativeDatePickerProps(state, _a) {
63
70
  'aria-expanded': isOpen,
64
71
  },
65
72
  };
66
- const { inputProps } = (0, DateField_1.useDateFieldProps)(datePickerState.dateFieldState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
67
- const { inputProps: relativeDateProps } = (0, RelativeDateField_1.useRelativeDateFieldProps)(relativeDateState, Object.assign(Object.assign({}, props), { value: undefined, defaultValue: undefined, onUpdate: undefined }));
73
+ const { inputProps } = (0, DateField_1.useDateFieldProps)(datePickerState.dateFieldState, {
74
+ ...props,
75
+ value: undefined,
76
+ defaultValue: undefined,
77
+ onUpdate: undefined,
78
+ });
79
+ const { inputProps: relativeDateProps } = (0, RelativeDateField_1.useRelativeDateFieldProps)(relativeDateState, {
80
+ ...props,
81
+ value: undefined,
82
+ defaultValue: undefined,
83
+ onUpdate: undefined,
84
+ });
68
85
  let validationState = props.validationState;
69
86
  if (!validationState) {
70
87
  validationState =
@@ -77,14 +94,12 @@ function useRelativeDatePickerProps(state, _a) {
77
94
  const calendarRef = react_1.default.useRef(null);
78
95
  function focusCalendar() {
79
96
  setTimeout(() => {
80
- var _a;
81
- (_a = calendarRef.current) === null || _a === void 0 ? void 0 : _a.focus();
97
+ calendarRef.current?.focus();
82
98
  });
83
99
  }
84
100
  function focusInput() {
85
101
  setTimeout(() => {
86
- var _a;
87
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
102
+ inputRef.current?.focus({ preventScroll: true });
88
103
  });
89
104
  }
90
105
  const groupRef = react_1.default.useRef(null);
@@ -93,14 +108,31 @@ function useRelativeDatePickerProps(state, _a) {
93
108
  const DOMProps = (0, filterDOMProps_1.filterDOMProps)(props);
94
109
  delete DOMProps.id;
95
110
  return {
96
- groupProps: Object.assign(Object.assign(Object.assign(Object.assign({}, DOMProps), { ref: groupRef, tabIndex: -1, role: 'group' }), focusWithinProps), { onKeyDown: (e) => {
97
- if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
111
+ groupProps: {
112
+ ...DOMProps,
113
+ ref: groupRef,
114
+ tabIndex: -1,
115
+ role: 'group',
116
+ ...focusWithinProps,
117
+ onKeyDown: (e) => {
118
+ const isTargetInsideGroup = e.currentTarget.contains(e.target);
119
+ if (isOpen && e.key === 'Escape' && isTargetInsideGroup) {
120
+ e.preventDefault();
121
+ e.stopPropagation();
122
+ setOpen(false);
123
+ focusInput();
124
+ return;
125
+ }
126
+ if (e.altKey &&
127
+ (e.key === 'ArrowDown' || e.key === 'ArrowUp') &&
128
+ isTargetInsideGroup) {
98
129
  e.preventDefault();
99
130
  e.stopPropagation();
100
131
  setOpen(true);
101
132
  focusCalendar();
102
133
  }
103
- } }),
134
+ },
135
+ },
104
136
  fieldProps: (0, mergeProps_1.mergeProps)(commonInputProps, mode === 'relative' ? relativeDateProps : inputProps, mode === 'absolute' &&
105
137
  datePickerState.dateFieldState.isEmpty &&
106
138
  !state.isActive &&
@@ -150,14 +182,13 @@ function useRelativeDatePickerProps(state, _a) {
150
182
  focusInput();
151
183
  },
152
184
  onOutsideClick: (e) => {
153
- var _a;
154
- if (e.target && !((_a = groupRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
185
+ if (e.target && !groupRef.current?.contains(e.target)) {
155
186
  setOpen(false);
156
187
  }
157
188
  },
158
189
  onTransitionOutComplete: () => {
159
190
  setFocusedDate(mode === 'relative'
160
- ? relativeDateState.lastCorrectDate
191
+ ? lastCorrectDate
161
192
  : datePickerState.dateFieldState.displayValue);
162
193
  },
163
194
  placement: props.popupPlacement,
@@ -1 +1 @@
1
- {"version":3,"file":"useRelativeDatePickerProps.js","sourceRoot":"../../../../../src","sources":["components/RelativeDatePicker/hooks/useRelativeDatePickerProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {useControlledState, useFocusWithin, useForkRef} from '@gravity-ui/uikit';\nimport type {ButtonButtonProps, PopupProps, TextInputProps} from '@gravity-ui/uikit';\n\nimport type {Calendar, CalendarInstance} from '../../Calendar';\nimport {useDateFieldProps} from '../../DateField';\nimport type {DateFieldProps} from '../../DateField';\nimport {getCalendarModes} from '../../DatePicker/utils';\nimport {useRelativeDateFieldProps} from '../../RelativeDateField';\nimport {filterDOMProps} from '../../utils/filterDOMProps';\nimport {getButtonSizeForInput} from '../../utils/getButtonSizeForInput';\nimport {mergeProps} from '../../utils/mergeProps';\nimport type {RelativeDatePickerProps} from '../RelativeDatePicker';\nimport {i18n} from '../i18n';\n\nimport type {RelativeDatePickerState} from './useRelativeDatePickerState';\n\ninterface InnerRelativeDatePickerProps {\n groupProps: React.HTMLAttributes<unknown> & {ref: React.Ref<HTMLElement>};\n fieldProps: TextInputProps;\n modeSwitcherProps: ButtonButtonProps;\n calendarButtonProps: ButtonButtonProps;\n popupProps: PopupProps;\n calendarProps: React.ComponentProps<typeof Calendar>;\n timeInputProps: DateFieldProps;\n}\n\nexport function useRelativeDatePickerProps(\n state: RelativeDatePickerState,\n {onFocus, onBlur, ...props}: RelativeDatePickerProps,\n): InnerRelativeDatePickerProps {\n const {mode, setMode, datePickerState, relativeDateState} = state;\n\n const [focusedDate, setFocusedDate] = React.useState(\n mode === 'relative'\n ? relativeDateState.lastCorrectDate\n : datePickerState.dateFieldState.displayValue,\n );\n\n const [prevCorrectDate, setPrevCorrectDate] = React.useState(relativeDateState.lastCorrectDate);\n if (prevCorrectDate !== relativeDateState.lastCorrectDate) {\n setPrevCorrectDate(relativeDateState.lastCorrectDate);\n setFocusedDate(relativeDateState.lastCorrectDate);\n }\n\n const [prevDateValue, setPrevDateValue] = React.useState(\n datePickerState.dateFieldState.displayValue,\n );\n if (!datePickerState.dateFieldState.displayValue.isSame(prevDateValue, 'day')) {\n setPrevDateValue(datePickerState.dateFieldState.displayValue);\n setFocusedDate(datePickerState.dateFieldState.displayValue);\n }\n const {focusWithinProps} = useFocusWithin({\n onFocusWithin: onFocus,\n onBlurWithin: onBlur,\n onFocusWithinChange(isFocusWithin) {\n if (!isFocusWithin) {\n state.setActive(false);\n }\n },\n });\n\n const [isOpen, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n if (!state.isActive && isOpen) {\n setOpen(false);\n }\n\n const commonInputProps: TextInputProps = {\n onFocus: () => {\n if (!state.isActive) {\n state.setActive(true);\n setOpen(true);\n }\n },\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n controlProps: {\n onClick: () => {\n if (state.disabled) {\n return;\n }\n if (!isOpen) {\n state.setActive(true);\n setOpen(true);\n }\n },\n role: 'combobox',\n 'aria-expanded': isOpen,\n },\n };\n\n const {inputProps} = useDateFieldProps(datePickerState.dateFieldState, {\n ...props,\n value: undefined,\n defaultValue: undefined,\n onUpdate: undefined,\n });\n\n const {inputProps: relativeDateProps} = useRelativeDateFieldProps(relativeDateState, {\n ...props,\n value: undefined,\n defaultValue: undefined,\n onUpdate: undefined,\n });\n\n let validationState = props.validationState;\n if (!validationState) {\n validationState =\n mode === 'relative'\n ? relativeDateState.validationState\n : datePickerState.dateFieldState.validationState;\n }\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleRef = useForkRef(\n inputRef,\n mode === 'relative' ? relativeDateProps.controlRef : inputProps.controlRef,\n );\n\n const calendarRef = React.useRef<CalendarInstance>(null);\n\n function focusCalendar() {\n setTimeout(() => {\n calendarRef.current?.focus();\n });\n }\n\n function focusInput() {\n setTimeout(() => {\n inputRef.current?.focus({preventScroll: true});\n });\n }\n const groupRef = React.useRef<HTMLElement>(null);\n const calendarModes = getCalendarModes(datePickerState.formatInfo);\n\n const {t} = i18n.useTranslation();\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return {\n groupProps: {\n ...DOMProps,\n ref: groupRef,\n tabIndex: -1,\n role: 'group',\n ...focusWithinProps,\n onKeyDown: (e) => {\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n focusCalendar();\n }\n },\n },\n fieldProps: mergeProps(\n commonInputProps,\n mode === 'relative' ? relativeDateProps : inputProps,\n mode === 'absolute' &&\n datePickerState.dateFieldState.isEmpty &&\n !state.isActive &&\n props.placeholder\n ? {value: ''}\n : undefined,\n {controlRef: handleRef, validationState},\n ),\n modeSwitcherProps: {\n size: getButtonSizeForInput(props.size),\n disabled: state.readOnly || state.disabled,\n view: 'flat-secondary',\n style: {zIndex: 2, marginInlineEnd: 2},\n selected: mode === 'relative',\n 'aria-label': t('Formula input mode'),\n onClick: () => {\n setMode(mode === 'relative' ? 'absolute' : 'relative');\n if (mode === 'relative') {\n const valueDate = datePickerState.value;\n if (valueDate) {\n setFocusedDate(valueDate);\n }\n } else if (relativeDateState.parsedDate) {\n setFocusedDate(relativeDateState.parsedDate);\n }\n focusInput();\n },\n },\n calendarButtonProps: {\n size: getButtonSizeForInput(props.size),\n disabled: state.disabled,\n 'aria-label': t('Calendar'),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': isOpen,\n view: 'flat-secondary',\n onClick: () => {\n state.setActive(true);\n setOpen(!isOpen);\n if (!isOpen) {\n focusCalendar();\n }\n },\n },\n popupProps: {\n open: isOpen,\n onEscapeKeyDown: () => {\n setOpen(false);\n focusInput();\n },\n onOutsideClick: (e) => {\n if (e.target && !groupRef.current?.contains(e.target as Node)) {\n setOpen(false);\n }\n },\n onTransitionOutComplete: () => {\n setFocusedDate(\n mode === 'relative'\n ? relativeDateState.lastCorrectDate\n : datePickerState.dateFieldState.displayValue,\n );\n },\n placement: props.popupPlacement,\n offset: props.popupOffset,\n className: props.popupClassName,\n style: props.popupStyle,\n returnFocus: false,\n },\n calendarProps: {\n ref: calendarRef,\n size: props.size === 's' ? 'm' : props.size,\n readOnly: props.readOnly,\n value: state.selectedDate,\n onUpdate: (v) => {\n datePickerState.setDateValue(v);\n if (!state.datePickerState.formatInfo.hasTime) {\n setOpen(false);\n focusInput();\n }\n },\n focusedValue: focusedDate,\n onFocusUpdate: setFocusedDate,\n minValue: props.minValue,\n maxValue: props.maxValue,\n modes: mode === 'absolute' ? calendarModes : undefined,\n },\n timeInputProps: {\n value: datePickerState.timeValue,\n onUpdate: datePickerState.setTimeValue,\n format: datePickerState.timeFormat,\n readOnly: state.readOnly,\n disabled: state.disabled,\n timeZone: props.timeZone,\n hasClear: props.hasClear,\n size: props.size,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"useRelativeDatePickerProps.js","sourceRoot":"../../../../../src","sources":["components/RelativeDatePicker/hooks/useRelativeDatePickerProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {useControlledState, useFocusWithin, useForkRef} from '@gravity-ui/uikit';\nimport type {ButtonButtonProps, PopupProps, TextInputProps} from '@gravity-ui/uikit';\n\nimport type {Calendar, CalendarInstance} from '../../Calendar';\nimport {useDateFieldProps} from '../../DateField';\nimport type {DateFieldProps} from '../../DateField';\nimport {getCalendarModes} from '../../DatePicker/utils';\nimport {useRelativeDateFieldProps} from '../../RelativeDateField';\nimport {filterDOMProps} from '../../utils/filterDOMProps';\nimport {getButtonSizeForInput} from '../../utils/getButtonSizeForInput';\nimport {mergeProps} from '../../utils/mergeProps';\nimport type {RelativeDatePickerProps} from '../RelativeDatePicker';\nimport {i18n} from '../i18n';\n\nimport type {RelativeDatePickerState} from './useRelativeDatePickerState';\n\ninterface InnerRelativeDatePickerProps {\n groupProps: React.HTMLAttributes<unknown> & {ref: React.Ref<HTMLElement>};\n fieldProps: TextInputProps;\n modeSwitcherProps: ButtonButtonProps;\n calendarButtonProps: ButtonButtonProps;\n popupProps: PopupProps;\n calendarProps: React.ComponentProps<typeof Calendar<'single'>>;\n timeInputProps: DateFieldProps;\n}\n\nexport function useRelativeDatePickerProps(\n state: RelativeDatePickerState,\n {onFocus, onBlur, ...props}: RelativeDatePickerProps,\n): InnerRelativeDatePickerProps {\n const {mode, setMode, datePickerState, relativeDateState} = state;\n\n const lastCorrectDate = relativeDateState.lastCorrectDate\n ? relativeDateState.lastCorrectDate.startOf('day')\n : null;\n const [focusedDate, setFocusedDate] = React.useState(\n mode === 'relative' ? lastCorrectDate : datePickerState.dateFieldState.displayValue,\n );\n\n const [prevCorrectDate, setPrevCorrectDate] = React.useState(lastCorrectDate);\n if (lastCorrectDate && (!prevCorrectDate || !lastCorrectDate.isSame(prevCorrectDate, 'day'))) {\n setPrevCorrectDate(lastCorrectDate);\n setFocusedDate(lastCorrectDate);\n }\n\n const [prevDateValue, setPrevDateValue] = React.useState(\n datePickerState.dateFieldState.displayValue,\n );\n if (!datePickerState.dateFieldState.displayValue.isSame(prevDateValue, 'day')) {\n setPrevDateValue(datePickerState.dateFieldState.displayValue);\n setFocusedDate(datePickerState.dateFieldState.displayValue);\n }\n const {focusWithinProps} = useFocusWithin({\n onFocusWithin: onFocus,\n onBlurWithin: onBlur,\n onFocusWithinChange(isFocusWithin) {\n state.datePickerState.dateFieldState.setActive(isFocusWithin);\n if (!isFocusWithin) {\n state.setActive(false);\n if (mode === 'relative') {\n state.relativeDateState.confirmValue();\n } else {\n state.datePickerState.dateFieldState.confirmPlaceholder();\n }\n }\n },\n });\n\n const [isOpen, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n if (!state.isActive && isOpen) {\n setOpen(false);\n }\n\n const commonInputProps: TextInputProps = {\n onFocus: () => {\n if (!state.isActive) {\n state.setActive(true);\n setOpen(true);\n }\n },\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n controlProps: {\n onClick: () => {\n if (state.disabled) {\n return;\n }\n if (!isOpen) {\n state.setActive(true);\n setOpen(true);\n }\n },\n role: 'combobox',\n 'aria-expanded': isOpen,\n },\n };\n\n const {inputProps} = useDateFieldProps(datePickerState.dateFieldState, {\n ...props,\n value: undefined,\n defaultValue: undefined,\n onUpdate: undefined,\n });\n\n const {inputProps: relativeDateProps} = useRelativeDateFieldProps(relativeDateState, {\n ...props,\n value: undefined,\n defaultValue: undefined,\n onUpdate: undefined,\n });\n\n let validationState = props.validationState;\n if (!validationState) {\n validationState =\n mode === 'relative'\n ? relativeDateState.validationState\n : datePickerState.dateFieldState.validationState;\n }\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleRef = useForkRef(\n inputRef,\n mode === 'relative' ? relativeDateProps.controlRef : inputProps.controlRef,\n );\n\n const calendarRef = React.useRef<CalendarInstance>(null);\n\n function focusCalendar() {\n setTimeout(() => {\n calendarRef.current?.focus();\n });\n }\n\n function focusInput() {\n setTimeout(() => {\n inputRef.current?.focus({preventScroll: true});\n });\n }\n const groupRef = React.useRef<HTMLElement>(null);\n const calendarModes = getCalendarModes(datePickerState.formatInfo);\n\n const {t} = i18n.useTranslation();\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return {\n groupProps: {\n ...DOMProps,\n ref: groupRef,\n tabIndex: -1,\n role: 'group',\n ...focusWithinProps,\n onKeyDown: (e) => {\n const isTargetInsideGroup = (e.currentTarget as HTMLElement).contains(\n e.target as Node,\n );\n\n if (isOpen && e.key === 'Escape' && isTargetInsideGroup) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n focusInput();\n return;\n }\n\n if (\n e.altKey &&\n (e.key === 'ArrowDown' || e.key === 'ArrowUp') &&\n isTargetInsideGroup\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n focusCalendar();\n }\n },\n },\n fieldProps: mergeProps(\n commonInputProps,\n mode === 'relative' ? relativeDateProps : inputProps,\n mode === 'absolute' &&\n datePickerState.dateFieldState.isEmpty &&\n !state.isActive &&\n props.placeholder\n ? {value: ''}\n : undefined,\n {controlRef: handleRef, validationState},\n ),\n modeSwitcherProps: {\n size: getButtonSizeForInput(props.size),\n disabled: state.readOnly || state.disabled,\n view: 'flat-secondary',\n style: {zIndex: 2, marginInlineEnd: 2},\n selected: mode === 'relative',\n 'aria-label': t('Formula input mode'),\n onClick: () => {\n setMode(mode === 'relative' ? 'absolute' : 'relative');\n if (mode === 'relative') {\n const valueDate = datePickerState.value;\n if (valueDate) {\n setFocusedDate(valueDate);\n }\n } else if (relativeDateState.parsedDate) {\n setFocusedDate(relativeDateState.parsedDate);\n }\n focusInput();\n },\n },\n calendarButtonProps: {\n size: getButtonSizeForInput(props.size),\n disabled: state.disabled,\n 'aria-label': t('Calendar'),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': isOpen,\n view: 'flat-secondary',\n onClick: () => {\n state.setActive(true);\n setOpen(!isOpen);\n if (!isOpen) {\n focusCalendar();\n }\n },\n },\n popupProps: {\n open: isOpen,\n onEscapeKeyDown: () => {\n setOpen(false);\n focusInput();\n },\n onOutsideClick: (e) => {\n if (e.target && !groupRef.current?.contains(e.target as Node)) {\n setOpen(false);\n }\n },\n onTransitionOutComplete: () => {\n setFocusedDate(\n mode === 'relative'\n ? lastCorrectDate\n : datePickerState.dateFieldState.displayValue,\n );\n },\n placement: props.popupPlacement,\n offset: props.popupOffset,\n className: props.popupClassName,\n style: props.popupStyle,\n returnFocus: false,\n },\n calendarProps: {\n ref: calendarRef,\n size: props.size === 's' ? 'm' : props.size,\n readOnly: props.readOnly,\n value: state.selectedDate,\n onUpdate: (v) => {\n datePickerState.setDateValue(v);\n if (!state.datePickerState.formatInfo.hasTime) {\n setOpen(false);\n focusInput();\n }\n },\n focusedValue: focusedDate,\n onFocusUpdate: setFocusedDate,\n minValue: props.minValue,\n maxValue: props.maxValue,\n modes: mode === 'absolute' ? calendarModes : undefined,\n },\n timeInputProps: {\n value: datePickerState.timeValue,\n onUpdate: datePickerState.setTimeValue,\n format: datePickerState.timeFormat,\n readOnly: state.readOnly,\n disabled: state.disabled,\n timeZone: props.timeZone,\n hasClear: props.hasClear,\n size: props.size,\n },\n };\n}\n"]}
@@ -8,9 +8,8 @@ const utils_1 = require("../../DateField/utils.js");
8
8
  const DatePicker_1 = require("../../DatePicker/index.js");
9
9
  const RelativeDateField_1 = require("../../RelativeDateField/index.js");
10
10
  function useRelativeDatePickerState(props) {
11
- var _a;
12
- const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
13
- const [mode, setMode] = react_1.default.useState((value === null || value === void 0 ? void 0 : value.type) === 'relative' ? 'relative' : 'absolute');
11
+ const [value, setValue] = (0, uikit_1.useControlledState)(props.value, props.defaultValue ?? null, props.onUpdate);
12
+ const [mode, setMode] = react_1.default.useState(value?.type === 'relative' ? 'relative' : 'absolute');
14
13
  const [prevValue, setPrevValue] = react_1.default.useState(value);
15
14
  if (value !== prevValue) {
16
15
  setPrevValue(value);
@@ -18,8 +17,8 @@ function useRelativeDatePickerState(props) {
18
17
  setMode(value.type);
19
18
  }
20
19
  }
21
- const [valueDate, setValueDate] = react_1.default.useState((value === null || value === void 0 ? void 0 : value.type) === 'absolute' ? value.value : null);
22
- if ((value === null || value === void 0 ? void 0 : value.type) === 'absolute' && value.value !== valueDate) {
20
+ const [valueDate, setValueDate] = react_1.default.useState(value?.type === 'absolute' ? value.value : null);
21
+ if (value?.type === 'absolute' && value.value !== valueDate) {
23
22
  setValueDate(value.value);
24
23
  }
25
24
  const datePickerState = (0, DatePicker_1.useDatePickerState)({
@@ -33,7 +32,7 @@ function useRelativeDatePickerState(props) {
33
32
  }
34
33
  }
35
34
  setValueDate(newDate);
36
- if ((value === null || value === void 0 ? void 0 : value.type) === 'absolute' && (newDate === null || newDate === void 0 ? void 0 : newDate.isSame(value.value))) {
35
+ if (value?.type === 'absolute' && newDate?.isSame(value.value)) {
37
36
  return;
38
37
  }
39
38
  setValue(newDate ? { type: 'absolute', value: newDate } : null);
@@ -46,15 +45,15 @@ function useRelativeDatePickerState(props) {
46
45
  minValue: props.minValue,
47
46
  maxValue: props.maxValue,
48
47
  });
49
- const [valueRelative, setValueRelative] = react_1.default.useState((value === null || value === void 0 ? void 0 : value.type) === 'relative' ? value.value : null);
50
- if ((value === null || value === void 0 ? void 0 : value.type) === 'relative' && value.value !== valueRelative) {
48
+ const [valueRelative, setValueRelative] = react_1.default.useState(value?.type === 'relative' ? value.value : null);
49
+ if (value?.type === 'relative' && value.value !== valueRelative) {
51
50
  setValueRelative(value.value);
52
51
  }
53
52
  const relativeDateState = (0, RelativeDateField_1.useRelativeDateFieldState)({
54
53
  value: valueRelative,
55
54
  onUpdate: (v) => {
56
55
  setValueRelative(v);
57
- if ((value === null || value === void 0 ? void 0 : value.type) === 'relative' && v === value.value) {
56
+ if (value?.type === 'relative' && v === value.value) {
58
57
  return;
59
58
  }
60
59
  setValue(v ? { type: 'relative', value: v } : null);
@@ -73,7 +72,7 @@ function useRelativeDatePickerState(props) {
73
72
  }
74
73
  }
75
74
  const selectedDate = mode === 'relative'
76
- ? relativeDateState.parsedDate
75
+ ? relativeDateState.lastCorrectDate
77
76
  : datePickerState.dateFieldState.displayValue;
78
77
  const [isActive, setActive] = react_1.default.useState(false);
79
78
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"useRelativeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeDatePicker/hooks/useRelativeDatePickerState.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 {adjustDateToFormat} from '../../DateField/utils';\nimport {useDatePickerState} from '../../DatePicker';\nimport type {DatePickerState} from '../../DatePicker';\nimport {useRelativeDateFieldState} from '../../RelativeDateField';\nimport type {RelativeDateFieldState} from '../../RelativeDateField';\nimport type {DateFieldBase} from '../../types';\n\nexport type Value =\n | {\n type: 'absolute';\n value: DateTime;\n }\n | {\n type: 'relative';\n value: string;\n };\n\nexport type RelativeDatePickerMode = Value['type'];\n\nexport interface RelativeDatePickerStateOptions extends DateFieldBase<Value> {\n /** Round up parsed date to the nearest granularity. */\n roundUp?: boolean;\n}\n\nexport interface RelativeDatePickerState {\n value: Value | null;\n setValue: (value: Value | null) => void;\n mode: RelativeDatePickerMode;\n setMode: (mode: RelativeDatePickerMode) => void;\n datePickerState: DatePickerState;\n relativeDateState: RelativeDateFieldState;\n selectedDate: DateTime | null;\n /**\n * Whether the field is disabled.\n */\n disabled?: boolean;\n /**\n * Whether the value is immutable.\n */\n readOnly?: boolean;\n isActive: boolean;\n setActive: (isActive: boolean) => void;\n}\n\nexport function useRelativeDatePickerState(\n props: RelativeDatePickerStateOptions,\n): RelativeDatePickerState {\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n\n const [mode, setMode] = React.useState<Value['type']>(\n value?.type === 'relative' ? 'relative' : 'absolute',\n );\n\n const [prevValue, setPrevValue] = React.useState(value);\n if (value !== prevValue) {\n setPrevValue(value);\n if (value && value.type !== mode) {\n setMode(value.type);\n }\n }\n\n const [valueDate, setValueDate] = React.useState(\n value?.type === 'absolute' ? value.value : null,\n );\n\n if (value?.type === 'absolute' && value.value !== valueDate) {\n setValueDate(value.value);\n }\n\n const datePickerState = useDatePickerState({\n value: valueDate,\n onUpdate: (date) => {\n let newDate = date;\n if (newDate && props.roundUp) {\n newDate = adjustDateToFormat(newDate, datePickerState.formatInfo, 'endOf');\n if (!datePickerState.formatInfo.hasTime) {\n newDate = newDate.endOf('day');\n }\n }\n setValueDate(newDate);\n\n if (value?.type === 'absolute' && newDate?.isSame(value.value)) {\n return;\n }\n\n setValue(newDate ? {type: 'absolute', value: newDate} : null);\n },\n format: props.format,\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n disabled: props.disabled,\n readOnly: props.readOnly,\n minValue: props.minValue,\n maxValue: props.maxValue,\n });\n\n const [valueRelative, setValueRelative] = React.useState(\n value?.type === 'relative' ? value.value : null,\n );\n\n if (value?.type === 'relative' && value.value !== valueRelative) {\n setValueRelative(value.value);\n }\n\n const relativeDateState = useRelativeDateFieldState({\n value: valueRelative,\n onUpdate: (v) => {\n setValueRelative(v);\n\n if (value?.type === 'relative' && v === value.value) {\n return;\n }\n\n setValue(v ? {type: 'relative', value: v} : null);\n },\n disabled: props.disabled,\n readOnly: props.readOnly,\n timeZone: datePickerState.timeZone,\n roundUp: props.roundUp,\n });\n\n if (!value) {\n if (mode === 'absolute' && valueDate) {\n setValueDate(null);\n } else if (mode === 'relative' && valueRelative) {\n setValueRelative(null);\n }\n }\n\n const selectedDate =\n mode === 'relative'\n ? relativeDateState.parsedDate\n : datePickerState.dateFieldState.displayValue;\n\n const [isActive, setActive] = React.useState(false);\n\n return {\n value,\n setValue(v) {\n if (props.readOnly || props.disabled) {\n return;\n }\n\n setValue(v);\n },\n disabled: props.disabled,\n readOnly: props.readOnly,\n mode,\n setMode(newMode: RelativeDatePickerMode) {\n if (props.readOnly || props.disabled || newMode === mode) {\n return;\n }\n\n setMode(newMode);\n if (newMode === 'relative') {\n if ((!value && valueRelative) || value) {\n setValue(valueRelative ? {type: 'relative', value: valueRelative} : null);\n }\n } else if ((!value && valueDate) || value) {\n setValue(valueDate ? {type: 'absolute', value: valueDate} : null);\n }\n },\n datePickerState,\n relativeDateState,\n selectedDate,\n isActive,\n setActive,\n };\n}\n"]}
1
+ {"version":3,"file":"useRelativeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeDatePicker/hooks/useRelativeDatePickerState.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 {adjustDateToFormat} from '../../DateField/utils';\nimport {useDatePickerState} from '../../DatePicker';\nimport type {DatePickerState} from '../../DatePicker';\nimport {useRelativeDateFieldState} from '../../RelativeDateField';\nimport type {RelativeDateFieldState} from '../../RelativeDateField';\nimport type {DateFieldBase} from '../../types';\n\nexport type Value =\n | {\n type: 'absolute';\n value: DateTime;\n }\n | {\n type: 'relative';\n value: string;\n };\n\nexport type RelativeDatePickerMode = Value['type'];\n\nexport interface RelativeDatePickerStateOptions extends DateFieldBase<Value> {\n /** Round up parsed date to the nearest granularity. */\n roundUp?: boolean;\n}\n\nexport interface RelativeDatePickerState {\n value: Value | null;\n setValue: (value: Value | null) => void;\n mode: RelativeDatePickerMode;\n setMode: (mode: RelativeDatePickerMode) => void;\n datePickerState: DatePickerState;\n relativeDateState: RelativeDateFieldState;\n selectedDate: DateTime | null;\n /**\n * Whether the field is disabled.\n */\n disabled?: boolean;\n /**\n * Whether the value is immutable.\n */\n readOnly?: boolean;\n isActive: boolean;\n setActive: (isActive: boolean) => void;\n}\n\nexport function useRelativeDatePickerState(\n props: RelativeDatePickerStateOptions,\n): RelativeDatePickerState {\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? null,\n props.onUpdate,\n );\n\n const [mode, setMode] = React.useState<Value['type']>(\n value?.type === 'relative' ? 'relative' : 'absolute',\n );\n\n const [prevValue, setPrevValue] = React.useState(value);\n if (value !== prevValue) {\n setPrevValue(value);\n if (value && value.type !== mode) {\n setMode(value.type);\n }\n }\n\n const [valueDate, setValueDate] = React.useState(\n value?.type === 'absolute' ? value.value : null,\n );\n\n if (value?.type === 'absolute' && value.value !== valueDate) {\n setValueDate(value.value);\n }\n\n const datePickerState = useDatePickerState({\n value: valueDate,\n onUpdate: (date) => {\n let newDate = date;\n if (newDate && props.roundUp) {\n newDate = adjustDateToFormat(newDate, datePickerState.formatInfo, 'endOf');\n if (!datePickerState.formatInfo.hasTime) {\n newDate = newDate.endOf('day');\n }\n }\n setValueDate(newDate);\n\n if (value?.type === 'absolute' && newDate?.isSame(value.value)) {\n return;\n }\n\n setValue(newDate ? {type: 'absolute', value: newDate} : null);\n },\n format: props.format,\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n disabled: props.disabled,\n readOnly: props.readOnly,\n minValue: props.minValue,\n maxValue: props.maxValue,\n });\n\n const [valueRelative, setValueRelative] = React.useState(\n value?.type === 'relative' ? value.value : null,\n );\n\n if (value?.type === 'relative' && value.value !== valueRelative) {\n setValueRelative(value.value);\n }\n\n const relativeDateState = useRelativeDateFieldState({\n value: valueRelative,\n onUpdate: (v) => {\n setValueRelative(v);\n\n if (value?.type === 'relative' && v === value.value) {\n return;\n }\n\n setValue(v ? {type: 'relative', value: v} : null);\n },\n disabled: props.disabled,\n readOnly: props.readOnly,\n timeZone: datePickerState.timeZone,\n roundUp: props.roundUp,\n });\n\n if (!value) {\n if (mode === 'absolute' && valueDate) {\n setValueDate(null);\n } else if (mode === 'relative' && valueRelative) {\n setValueRelative(null);\n }\n }\n\n const selectedDate =\n mode === 'relative'\n ? relativeDateState.lastCorrectDate\n : datePickerState.dateFieldState.displayValue;\n\n const [isActive, setActive] = React.useState(false);\n\n return {\n value,\n setValue(v) {\n if (props.readOnly || props.disabled) {\n return;\n }\n\n setValue(v);\n },\n disabled: props.disabled,\n readOnly: props.readOnly,\n mode,\n setMode(newMode: RelativeDatePickerMode) {\n if (props.readOnly || props.disabled || newMode === mode) {\n return;\n }\n\n setMode(newMode);\n if (newMode === 'relative') {\n if ((!value && valueRelative) || value) {\n setValue(valueRelative ? {type: 'relative', value: valueRelative} : null);\n }\n } else if ((!value && valueDate) || value) {\n setValue(valueDate ? {type: 'absolute', value: valueDate} : null);\n }\n },\n datePickerState,\n relativeDateState,\n selectedDate,\n isActive,\n setActive,\n };\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import type { RelativeRangeDatePickerProps } from "./types.js";
2
3
  import "./RelativeRangeDatePicker.css";
3
- export declare function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps): React.JSX.Element;
@@ -25,18 +25,26 @@ function RelativeRangeDatePicker(props) {
25
25
  onFocusWithin: props.onFocus,
26
26
  onBlurWithin: props.onBlur,
27
27
  onFocusWithinChange: (isFocusWithin) => {
28
- var _a;
29
28
  if (isFocusWithin &&
30
29
  !dialogClosing.current &&
31
30
  !props.renderControl &&
32
- ((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'BUTTON') {
31
+ document.activeElement?.tagName !== 'BUTTON') {
33
32
  setOpen(true);
34
33
  }
35
34
  },
36
35
  });
37
36
  const DOMProps = (0, filterDOMProps_1.filterDOMProps)(props);
38
37
  delete DOMProps.id;
39
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({}, DOMProps, { ref: setAnchor }, focusWithinProps, { className: b(null, props.className), style: props.style, children: [(0, jsx_runtime_1.jsx)(Control_1.Control, { props: props, state: state, open: open, setOpen: setOpen, isMobile: isMobile, onClick: () => {
38
+ return ((0, jsx_runtime_1.jsxs)("div", { ...DOMProps, ref: setAnchor, ...focusWithinProps, onKeyDown: (e) => {
39
+ if (open &&
40
+ e.key === 'Escape' &&
41
+ e.currentTarget.contains(e.target)) {
42
+ e.preventDefault();
43
+ e.stopPropagation();
44
+ setOpen(false);
45
+ dialogClosing.current = true;
46
+ }
47
+ }, className: b(null, props.className), style: props.style, children: [(0, jsx_runtime_1.jsx)(Control_1.Control, { props: props, state: state, open: open, setOpen: setOpen, isMobile: isMobile, onClick: () => {
40
48
  if (props.disabled) {
41
49
  return;
42
50
  }
@@ -55,7 +63,7 @@ function RelativeRangeDatePicker(props) {
55
63
  if (!props.readOnly && !v) {
56
64
  state.setValue(null, 'default');
57
65
  }
58
- } }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a, _b; return (_b = (_a = v === null || v === void 0 ? void 0 : v.start) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : ''; }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a; return getNativeValue((_a = v === null || v === void 0 ? void 0 : v.start) !== null && _a !== void 0 ? _a : null); }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a, _b; return (_b = (_a = v === null || v === void 0 ? void 0 : v.end) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : ''; }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => { var _a; return getNativeValue((_a = v === null || v === void 0 ? void 0 : v.end) !== null && _a !== void 0 ? _a : null); }, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, onReset: (v) => {
66
+ } }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => v?.start?.type ?? '', disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => getNativeValue(v?.start ?? null), disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => v?.end?.type ?? '', disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => getNativeValue(v?.end ?? null), disabled: props.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, onReset: (v) => {
59
67
  state.setValue(v.value, v.timeZone);
60
68
  }, value: { value: state.value, timeZone: state.timeZone }, toStringValue: (v) => v.timeZone, disabled: props.disabled }), (0, jsx_runtime_1.jsx)(PickerDialog_1.PickerDialog, { value: state.value, onUpdate: state.setValue, timeZone: state.timeZone, open: open, onClose: () => {
61
69
  setOpen(false);
@@ -64,7 +72,7 @@ function RelativeRangeDatePicker(props) {
64
72
  setTimeout(() => {
65
73
  dialogClosing.current = false;
66
74
  });
67
- }, anchor: anchor, modal: true, returnFocus: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, applyPresetsImmediately: props.applyPresetsImmediately, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList, withHeader: props.withHeader })] })));
75
+ }, anchor: anchor, modal: true, returnFocus: true, popupClassName: props.popupClassName, popupStyle: props.popupStyle, popupPlacement: props.popupPlacement, calendarPopupPlacement: props.calendarPopupPlacement, popupOffset: props.popupOffset, isMobile: isMobile, size: props.size, format: props.format, readOnly: props.readOnly, minValue: props.minValue, maxValue: props.maxValue, allowNullableValues: props.allowNullableValues, isDateUnavailable: props.isDateUnavailable, placeholderValue: props.placeholderValue, withPresets: props.withPresets, applyPresetsImmediately: props.applyPresetsImmediately, presetTabs: props.presetTabs, docs: props.docs, withApplyButton: props.withApplyButton, withZonesList: props.withZonesList, withHeader: props.withHeader })] }));
68
76
  }
69
77
  function getNativeValue(value) {
70
78
  if (!value) {
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAoBb,0DAkJC;;;AApKD,0DAA0B;AAE1B,6CAAgF;AAEhF,0CAAqC;AACrC,+DAAuD;AAEvD,+DAAuD;AAEvD,6DAAqD;AACrD,4EAAoE;AACpE,gGAAwF;AAGxF,yCAAwC;AAExC,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,4BAA4B,CAAC,CAAC;AAE9C,SAAgB,uBAAuB,CAAC,KAAmC;IACvE,MAAM,KAAK,GAAG,IAAA,iEAA+B,EAAC,KAAK,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,IAAA,iBAAS,GAAE,CAAC;IAE7B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,0BAAkB,EAAU,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE1F,MAAM,EAAC,gBAAgB,EAAC,GAAG,IAAA,sBAAc,EAAC;QACtC,UAAU,EAAE,KAAK,CAAC,QAAQ;QAC1B,aAAa,EAAE,KAAK,CAAC,OAAO;QAC5B,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,mBAAmB,EAAE,CAAC,aAAa,EAAE,EAAE;;YACnC,IACI,aAAa;gBACb,CAAC,aAAa,CAAC,OAAO;gBACtB,CAAC,KAAK,CAAC,aAAa;gBACpB,CAAA,MAAA,QAAQ,CAAC,aAAa,0CAAE,OAAO,MAAK,QAAQ,EAC9C,CAAC;gBACC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,CAAC;IAEnB,OAAO,CACH,iDACQ,QAAQ,IACZ,GAAG,EAAE,SAAS,IACV,gBAAgB,IACpB,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EACnC,KAAK,EAAE,KAAK,CAAC,KAAK,aAElB,uBAAC,iBAAO,IACJ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE;oBACV,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACjB,OAAO;oBACX,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACjB,OAAO;oBACX,CAAC;oBACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;wBAC7D,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;gBACL,CAAC,EACD,eAAe,EAAE,GAAG,EAAE;oBAClB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC,EACD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE;oBACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;wBACxB,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACpC,CAAC;gBACL,CAAC,GACH,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,0CAAE,IAAI,mCAAI,EAAE,CAAA,EAAA,EAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,cAAc,CAAC,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,mCAAI,IAAI,CAAC,CAAA,EAAA,EACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,0CAAE,IAAI,mCAAI,EAAE,CAAA,EAAA,EACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,cAAc,CAAC,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,GAAG,mCAAI,IAAI,CAAC,CAAA,EAAA,EACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC,EACD,KAAK,EAAE,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,EACrD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EAEF,uBAAC,2BAAY,IACT,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;gBACjC,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;oBACX,UAAU,CAAC,GAAG,EAAE;wBACZ,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;oBAClC,CAAC,CAAC,CAAC;gBACP,CAAC,EACD,MAAM,EAAE,MAAM,EACd,KAAK,QACL,WAAW,QACX,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EACtD,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,UAAU,EAAE,KAAK,CAAC,UAAU,GAC9B,KACA,CACT,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACrC,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const dialogClosing = React.useRef(false);\n\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: (isFocusWithin) => {\n if (\n isFocusWithin &&\n !dialogClosing.current &&\n !props.renderControl &&\n document.activeElement?.tagName !== 'BUTTON'\n ) {\n setOpen(true);\n }\n },\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n <div\n {...DOMProps}\n ref={setAnchor}\n {...focusWithinProps}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n setOpen={setOpen}\n isMobile={isMobile}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n setOpen(true);\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setOpen(!open);\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={() => {\n setOpen(false);\n dialogClosing.current = true;\n }}\n onRemove={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n anchor={anchor}\n modal\n returnFocus\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n applyPresetsImmediately={props.applyPresetsImmediately}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n withHeader={props.withHeader}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
1
+ {"version":3,"file":"RelativeRangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/RelativeRangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {useControlledState, useFocusWithin, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {Value} from '../RelativeDatePicker';\nimport {filterDOMProps} from '../utils/filterDOMProps';\n\nimport {Control} from './components/Control/Control';\nimport {PickerDialog} from './components/PickerDialog/PickerDialog';\nimport {useRelativeRangeDatePickerState} from './hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps} from './types';\n\nimport './RelativeRangeDatePicker.scss';\n\nconst b = block('relative-range-date-picker');\n\nexport function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps) {\n const state = useRelativeRangeDatePickerState(props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n const dialogClosing = React.useRef(false);\n\n const [open, setOpen] = useControlledState<boolean>(undefined, false, props.onOpenChange);\n\n const {focusWithinProps} = useFocusWithin({\n isDisabled: props.disabled,\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: (isFocusWithin) => {\n if (\n isFocusWithin &&\n !dialogClosing.current &&\n !props.renderControl &&\n document.activeElement?.tagName !== 'BUTTON'\n ) {\n setOpen(true);\n }\n },\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return (\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n {...DOMProps}\n ref={setAnchor}\n {...focusWithinProps}\n onKeyDown={(e) => {\n if (\n open &&\n e.key === 'Escape' &&\n (e.currentTarget as HTMLElement).contains(e.target as Node)\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n dialogClosing.current = true;\n }\n }}\n className={b(null, props.className)}\n style={props.style}\n >\n <Control\n props={props}\n state={state}\n open={open}\n setOpen={setOpen}\n isMobile={isMobile}\n onClick={() => {\n if (props.disabled) {\n return;\n }\n setOpen(true);\n }}\n onKeyDown={(e) => {\n if (props.disabled) {\n return;\n }\n if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n setOpen(true);\n }\n }}\n onClickCalendar={() => {\n setOpen(!open);\n }}\n onUpdate={(v: string) => {\n if (!props.readOnly && !v) {\n state.setValue(null, 'default');\n }\n }}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.start?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.start ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => v?.end?.type ?? ''}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => getNativeValue(v?.end ?? null)}\n disabled={props.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.setValue(v.value, v.timeZone);\n }}\n value={{value: state.value, timeZone: state.timeZone}}\n toStringValue={(v) => v.timeZone}\n disabled={props.disabled}\n />\n\n <PickerDialog\n value={state.value}\n onUpdate={state.setValue}\n timeZone={state.timeZone}\n open={open}\n onClose={() => {\n setOpen(false);\n dialogClosing.current = true;\n }}\n onRemove={() => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n }}\n anchor={anchor}\n modal\n returnFocus\n popupClassName={props.popupClassName}\n popupStyle={props.popupStyle}\n popupPlacement={props.popupPlacement}\n calendarPopupPlacement={props.calendarPopupPlacement}\n popupOffset={props.popupOffset}\n isMobile={isMobile}\n size={props.size}\n format={props.format}\n readOnly={props.readOnly}\n minValue={props.minValue}\n maxValue={props.maxValue}\n allowNullableValues={props.allowNullableValues}\n isDateUnavailable={props.isDateUnavailable}\n placeholderValue={props.placeholderValue}\n withPresets={props.withPresets}\n applyPresetsImmediately={props.applyPresetsImmediately}\n presetTabs={props.presetTabs}\n docs={props.docs}\n withApplyButton={props.withApplyButton}\n withZonesList={props.withZonesList}\n withHeader={props.withHeader}\n />\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
@@ -10,7 +10,7 @@
10
10
  --_--g-date-mobile-trigger-button-width: 24px;
11
11
  position: absolute;
12
12
  inset: 0;
13
- inset-inline-end: calc(var(--g-spacing-2) + var(--_--g-date-mobile-trigger-button-width) + var(--_--g-date-mobile-trigger-clear-width) + var(--_--g-date-mobile-trigger-errors-width));
13
+ inset-inline-end: calc(var(--_--g-date-mobile-trigger-button-width) + var(--_--g-date-mobile-trigger-clear-width) + var(--_--g-date-mobile-trigger-errors-width));
14
14
  opacity: 0;
15
15
  }
16
16
  .g-date-relative-range-date-picker-control__mobile-trigger_size_s {
@@ -1 +1 @@
1
- {"version":3,"sources":["components/RelativeRangeDatePicker/components/Control/Control.scss"],"names":[],"mappings":"AAKI;EACI;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EAEA;EACA;EACA;EAMA;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAGJ;EACI;AAAA;AAAA;;AAIJ;EACI;AAAA;AAAA","sourcesContent":["@use '../../../variables.scss';\n\n$block: '.#{variables.$ns}relative-range-date-picker-control';\n\n#{$block} {\n &__input {\n caret-color: transparent;\n\n &_mobile {\n pointer-events: none;\n }\n }\n\n &__mobile-trigger {\n --_--g-date-mobile-trigger-clear-width: 0px;\n --_--g-date-mobile-trigger-errors-width: 0px;\n --_--g-date-mobile-trigger-button-width: 24px;\n\n position: absolute;\n inset: 0;\n inset-inline-end: calc(\n var(--g-spacing-2) + var(--_--g-date-mobile-trigger-button-width) +\n var(--_--g-date-mobile-trigger-clear-width) +\n var(--_--g-date-mobile-trigger-errors-width)\n );\n\n opacity: 0;\n\n &_size_s {\n --_--g-date-mobile-trigger-button-width: 20px;\n }\n &_size_l {\n --_--g-date-mobile-trigger-button-width: 28px;\n }\n &_size_xl {\n --_--g-date-mobile-trigger-button-width: 36px;\n }\n\n &_has-clear {\n --_--g-date-mobile-trigger-clear-width: calc(\n var(--_--g-date-mobile-trigger-button-width) + 2px\n );\n }\n &_has-errors {\n --_--g-date-mobile-trigger-errors-width: calc(\n var(--_--g-date-mobile-trigger-button-width) + 2px\n );\n }\n }\n}\n"],"file":"Control.css"}
1
+ {"version":3,"sources":["components/RelativeRangeDatePicker/components/Control/Control.scss"],"names":[],"mappings":"AAKI;EACI;;AAEA;EACI;;AAIR;EACI;EACA;EACA;EAEA;EACA;EACA;EAMA;;AAEA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAGJ;EACI;AAAA;AAAA;;AAIJ;EACI;AAAA;AAAA","sourcesContent":["@use '../../../variables.scss';\n\n$block: '.#{variables.$ns}relative-range-date-picker-control';\n\n#{$block} {\n &__input {\n caret-color: transparent;\n\n &_mobile {\n pointer-events: none;\n }\n }\n\n &__mobile-trigger {\n --_--g-date-mobile-trigger-clear-width: 0px;\n --_--g-date-mobile-trigger-errors-width: 0px;\n --_--g-date-mobile-trigger-button-width: 24px;\n\n position: absolute;\n inset: 0;\n inset-inline-end: calc(\n var(--_--g-date-mobile-trigger-button-width) +\n var(--_--g-date-mobile-trigger-clear-width) +\n var(--_--g-date-mobile-trigger-errors-width)\n );\n\n opacity: 0;\n\n &_size_s {\n --_--g-date-mobile-trigger-button-width: 20px;\n }\n &_size_l {\n --_--g-date-mobile-trigger-button-width: 28px;\n }\n &_size_xl {\n --_--g-date-mobile-trigger-button-width: 36px;\n }\n\n &_has-clear {\n --_--g-date-mobile-trigger-clear-width: calc(\n var(--_--g-date-mobile-trigger-button-width) + 2px\n );\n }\n &_has-errors {\n --_--g-date-mobile-trigger-errors-width: calc(\n var(--_--g-date-mobile-trigger-button-width) + 2px\n );\n }\n }\n}\n"],"file":"Control.css"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import type { RelativeRangeDatePickerState } from "../../hooks/useRelativeRangeDatePickerState.js";
3
3
  import type { RelativeRangeDatePickerProps } from "../../types.js";
4
4
  import "./Control.css";
5
- export type ControlProps = {
5
+ type ControlProps = {
6
6
  props: RelativeRangeDatePickerProps;
7
7
  state: RelativeRangeDatePickerState;
8
8
  open: boolean;
@@ -15,3 +15,4 @@ export type ControlProps = {
15
15
  onUpdate: (value: string) => void;
16
16
  };
17
17
  export declare const Control: React.ForwardRefExoticComponent<ControlProps & React.RefAttributes<HTMLInputElement>>;
18
+ export {};
@@ -14,8 +14,7 @@ const i18n_2 = require("./i18n/index.js");
14
14
  require("./Control.css");
15
15
  const b = (0, cn_1.block)('relative-range-date-picker-control');
16
16
  exports.Control = react_1.default.forwardRef(({ props, state, open, setOpen, isMobile, onClick, onKeyDown, onFocus, onClickCalendar, onUpdate, }, ref) => {
17
- var _a;
18
- const { alwaysShowAsAbsolute, presetTabs, getRangeTitle } = props;
17
+ const { alwaysShowAsAbsolute, presetTabs, getRangeTitle, allowNullableValues } = props;
19
18
  const format = props.format || 'L';
20
19
  const { t } = i18n_2.i18n.useTranslation();
21
20
  const { t: presetsTranslations } = i18n_1.i18n.useTranslation();
@@ -26,11 +25,13 @@ exports.Control = react_1.default.forwardRef(({ props, state, open, setOpen, isM
26
25
  value: state.value,
27
26
  timeZone: state.timeZone,
28
27
  alwaysShowAsAbsolute,
28
+ allowNullableValues,
29
29
  format,
30
- presets: presetTabs === null || presetTabs === void 0 ? void 0 : presetTabs.flatMap(({ presets }) => presets),
30
+ presets: presetTabs?.flatMap(({ presets }) => presets),
31
31
  presetsTranslations,
32
32
  lang,
33
33
  }), [
34
+ allowNullableValues,
34
35
  alwaysShowAsAbsolute,
35
36
  format,
36
37
  getRangeTitle,
@@ -41,7 +42,7 @@ exports.Control = react_1.default.forwardRef(({ props, state, open, setOpen, isM
41
42
  state.value,
42
43
  ]);
43
44
  const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);
44
- const errorMessage = (_a = props.errorMessage) !== null && _a !== void 0 ? _a : state.errors.join('\n');
45
+ const errorMessage = props.errorMessage ?? state.errors.join('\n');
45
46
  const triggerProps = {
46
47
  id: props.id,
47
48
  role: 'combobox',
@@ -65,11 +66,16 @@ exports.Control = react_1.default.forwardRef(({ props, state, open, setOpen, isM
65
66
  open,
66
67
  setOpen,
67
68
  triggerProps,
68
- })) : ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, { id: props.id, autoFocus: props.autoFocus, controlRef: ref, value: text, placeholder: props.placeholder, onUpdate: onUpdate, controlProps: Object.assign(Object.assign({ className: b('input', { mobile: isMobile }) }, triggerProps), { disabled: isMobile, onClick }), onKeyDown: onKeyDown, onFocus: onFocus, validationState: validationState, errorMessage: errorMessage, errorPlacement: props.errorPlacement, pin: props.pin, size: props.size, label: props.label, hasClear: props.hasClear, disabled: props.disabled, endContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, "aria-haspopup": "dialog", "aria-expanded": open, "aria-label": t('Range date picker'), onClick: onClickCalendar, tabIndex: -1, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }), isMobile ? ((0, jsx_runtime_1.jsx)("button", { className: b('mobile-trigger', {
69
+ })) : ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsx)(uikit_1.TextInput, { id: props.id, autoFocus: props.autoFocus, controlRef: ref, value: text, placeholder: props.placeholder, onUpdate: onUpdate, controlProps: {
70
+ className: b('input', { mobile: isMobile }),
71
+ ...triggerProps,
72
+ disabled: isMobile,
73
+ onClick,
74
+ }, onKeyDown: onKeyDown, onFocus: onFocus, validationState: validationState, errorMessage: errorMessage, errorPlacement: props.errorPlacement, pin: props.pin, size: props.size, label: props.label, hasClear: props.hasClear, disabled: props.disabled, endContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, "aria-haspopup": "dialog", "aria-expanded": open, "aria-label": t('Range date picker'), onClick: onClickCalendar, tabIndex: -1, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }), isMobile ? ((0, jsx_runtime_1.jsx)("button", { className: b('mobile-trigger', {
69
75
  'has-clear': Boolean(props.hasClear && state.value),
70
76
  'has-errors': state.isInvalid && props.errorPlacement === 'inside',
71
77
  size: props.size,
72
- }), onClick: onClick })) : null] }));
78
+ }), onClick: onClick, "aria-label": props.label })) : null] }));
73
79
  });
74
80
  exports.Control.displayName = 'Control';
75
81
  //# sourceMappingURL=Control.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Control.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Control/Control.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Calendar as CalendarIcon} from '@gravity-ui/icons';\nimport {Button, Icon, TextInput, useLang} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getButtonSizeForInput} from '../../../utils/getButtonSizeForInput';\nimport type {RelativeRangeDatePickerState} from '../../hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps, RelativeRangeDatePickerTriggerProps} from '../../types';\nimport {getDefaultTitle} from '../../utils';\nimport {i18n as i18nPresets} from '../Presets/i18n';\n\nimport {i18n} from './i18n';\n\nimport './Control.scss';\n\nexport type ControlProps = {\n props: RelativeRangeDatePickerProps;\n state: RelativeRangeDatePickerState;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile?: boolean;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLElement>) => void;\n onClickCalendar: (e: React.MouseEvent<HTMLElement>) => void;\n onUpdate: (value: string) => void;\n};\n\nconst b = block('relative-range-date-picker-control');\n\nexport const Control = React.forwardRef<HTMLInputElement, ControlProps>(\n (\n {\n props,\n state,\n open,\n setOpen,\n isMobile,\n onClick,\n onKeyDown,\n onFocus,\n onClickCalendar,\n onUpdate,\n },\n ref,\n ) => {\n const {alwaysShowAsAbsolute, presetTabs, getRangeTitle} = props;\n const format = props.format || 'L';\n\n const {t} = i18n.useTranslation();\n const {t: presetsTranslations} = i18nPresets.useTranslation();\n const {lang} = useLang();\n\n const text = React.useMemo(\n () =>\n typeof getRangeTitle === 'function'\n ? getRangeTitle(state.value, state.timeZone)\n : getDefaultTitle({\n value: state.value,\n timeZone: state.timeZone,\n alwaysShowAsAbsolute,\n format,\n presets: presetTabs?.flatMap(({presets}) => presets),\n presetsTranslations,\n lang,\n }),\n [\n alwaysShowAsAbsolute,\n format,\n getRangeTitle,\n lang,\n presetTabs,\n presetsTranslations,\n state.timeZone,\n state.value,\n ],\n );\n\n const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);\n const errorMessage = props.errorMessage ?? state.errors.join('\\n');\n\n const triggerProps: RelativeRangeDatePickerTriggerProps = {\n id: props.id,\n role: 'combobox',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n 'aria-describedby': props['aria-describedby'],\n 'aria-details': props['aria-details'],\n disabled: props.disabled,\n readOnly: props.readOnly,\n onClick: onClickCalendar,\n onKeyDown,\n };\n\n return props.renderControl ? (\n props.renderControl({\n ref,\n value: state.value,\n title: text,\n validationState,\n errorMessage,\n open,\n setOpen,\n triggerProps,\n })\n ) : (\n <React.Fragment>\n <TextInput\n id={props.id}\n autoFocus={props.autoFocus}\n controlRef={ref}\n value={text}\n placeholder={props.placeholder}\n onUpdate={onUpdate}\n controlProps={{\n className: b('input', {mobile: isMobile}),\n ...triggerProps,\n disabled: isMobile,\n onClick,\n }}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n validationState={validationState}\n errorMessage={errorMessage}\n errorPlacement={props.errorPlacement}\n pin={props.pin}\n size={props.size}\n label={props.label}\n hasClear={props.hasClear}\n disabled={props.disabled}\n endContent={\n <Button\n view=\"flat-secondary\"\n size={getButtonSizeForInput(props.size)}\n disabled={props.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={t('Range date picker')}\n onClick={onClickCalendar}\n tabIndex={-1}\n >\n <Icon data={CalendarIcon} />\n </Button>\n }\n />\n {isMobile ? (\n <button\n className={b('mobile-trigger', {\n 'has-clear': Boolean(props.hasClear && state.value),\n 'has-errors': state.isInvalid && props.errorPlacement === 'inside',\n size: props.size,\n })}\n onClick={onClick}\n />\n ) : null}\n </React.Fragment>\n );\n },\n);\n\nControl.displayName = 'Control';\n"]}
1
+ {"version":3,"file":"Control.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Control/Control.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Calendar as CalendarIcon} from '@gravity-ui/icons';\nimport {Button, Icon, TextInput, useLang} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getButtonSizeForInput} from '../../../utils/getButtonSizeForInput';\nimport type {RelativeRangeDatePickerState} from '../../hooks/useRelativeRangeDatePickerState';\nimport type {RelativeRangeDatePickerProps, RelativeRangeDatePickerTriggerProps} from '../../types';\nimport {getDefaultTitle} from '../../utils';\nimport {i18n as i18nPresets} from '../Presets/i18n';\n\nimport {i18n} from './i18n';\n\nimport './Control.scss';\n\ntype ControlProps = {\n props: RelativeRangeDatePickerProps;\n state: RelativeRangeDatePickerState;\n open: boolean;\n setOpen: (open: boolean) => void;\n isMobile?: boolean;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLElement>) => void;\n onClickCalendar: (e: React.MouseEvent<HTMLElement>) => void;\n onUpdate: (value: string) => void;\n};\n\nconst b = block('relative-range-date-picker-control');\n\nexport const Control = React.forwardRef<HTMLInputElement, ControlProps>(\n (\n {\n props,\n state,\n open,\n setOpen,\n isMobile,\n onClick,\n onKeyDown,\n onFocus,\n onClickCalendar,\n onUpdate,\n },\n ref,\n ) => {\n const {alwaysShowAsAbsolute, presetTabs, getRangeTitle, allowNullableValues} = props;\n const format = props.format || 'L';\n\n const {t} = i18n.useTranslation();\n const {t: presetsTranslations} = i18nPresets.useTranslation();\n const {lang} = useLang();\n\n const text = React.useMemo(\n () =>\n typeof getRangeTitle === 'function'\n ? getRangeTitle(state.value, state.timeZone)\n : getDefaultTitle({\n value: state.value,\n timeZone: state.timeZone,\n alwaysShowAsAbsolute,\n allowNullableValues,\n format,\n presets: presetTabs?.flatMap(({presets}) => presets),\n presetsTranslations,\n lang,\n }),\n [\n allowNullableValues,\n alwaysShowAsAbsolute,\n format,\n getRangeTitle,\n lang,\n presetTabs,\n presetsTranslations,\n state.timeZone,\n state.value,\n ],\n );\n\n const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);\n const errorMessage = props.errorMessage ?? state.errors.join('\\n');\n\n const triggerProps: RelativeRangeDatePickerTriggerProps = {\n id: props.id,\n role: 'combobox',\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n 'aria-describedby': props['aria-describedby'],\n 'aria-details': props['aria-details'],\n disabled: props.disabled,\n readOnly: props.readOnly,\n onClick: onClickCalendar,\n onKeyDown,\n };\n\n return props.renderControl ? (\n props.renderControl({\n ref,\n value: state.value,\n title: text,\n validationState,\n errorMessage,\n open,\n setOpen,\n triggerProps,\n })\n ) : (\n <React.Fragment>\n <TextInput\n id={props.id}\n autoFocus={props.autoFocus}\n controlRef={ref}\n value={text}\n placeholder={props.placeholder}\n onUpdate={onUpdate}\n controlProps={{\n className: b('input', {mobile: isMobile}),\n ...triggerProps,\n disabled: isMobile,\n onClick,\n }}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n validationState={validationState}\n errorMessage={errorMessage}\n errorPlacement={props.errorPlacement}\n pin={props.pin}\n size={props.size}\n label={props.label}\n hasClear={props.hasClear}\n disabled={props.disabled}\n endContent={\n <Button\n view=\"flat-secondary\"\n size={getButtonSizeForInput(props.size)}\n disabled={props.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label={t('Range date picker')}\n onClick={onClickCalendar}\n tabIndex={-1}\n >\n <Icon data={CalendarIcon} />\n </Button>\n }\n />\n {isMobile ? (\n <button\n className={b('mobile-trigger', {\n 'has-clear': Boolean(props.hasClear && state.value),\n 'has-errors': state.isInvalid && props.errorPlacement === 'inside',\n size: props.size,\n })}\n onClick={onClick}\n aria-label={props.label}\n />\n ) : null}\n </React.Fragment>\n );\n },\n);\n\nControl.displayName = 'Control';\n"]}
@@ -18,4 +18,4 @@ export interface PickerDialogProps extends PickerFormProps, PopupStyleProps {
18
18
  /** If true `Sheet` is used instead of `Popup` */
19
19
  isMobile?: boolean;
20
20
  }
21
- export declare function PickerDialog({ open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal, returnFocus, onRemove, ...props }: PickerDialogProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function PickerDialog({ open, onClose, isMobile, anchor, popupClassName, popupStyle, popupPlacement, popupOffset, modal, returnFocus, onRemove, ...props }: PickerDialogProps): import("react").JSX.Element;