@gravity-ui/date-components 1.6.0 → 2.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 (279) hide show
  1. package/dist/cjs/components/Calendar/Calendar.d.ts +6 -5
  2. package/dist/cjs/components/Calendar/Calendar.js +4 -4
  3. package/dist/cjs/components/Calendar/index.d.ts +6 -6
  4. package/dist/cjs/components/Calendar/index.js +5 -5
  5. package/dist/cjs/components/{CalendarBase → CalendarView}/Calendar.css +9 -6
  6. package/dist/cjs/components/{CalendarBase/CalendarBase.d.ts → CalendarView/CalendarView.d.ts} +2 -2
  7. package/dist/cjs/components/{CalendarBase/CalendarBase.js → CalendarView/CalendarView.js} +4 -3
  8. package/dist/{esm/components/CalendarBase → cjs/components/CalendarView}/hooks/types.d.ts +37 -31
  9. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.js +1 -2
  10. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.d.ts +2 -2
  11. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +17 -0
  12. package/dist/{esm/components/CalendarBase → cjs/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
  13. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +45 -23
  14. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
  15. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +25 -14
  16. package/dist/cjs/components/CalendarView/i18n/en.json +7 -0
  17. package/dist/cjs/components/CalendarView/i18n/index.d.ts +1 -0
  18. package/dist/cjs/components/CalendarView/i18n/ru.json +7 -0
  19. package/dist/cjs/components/DateField/DateField.d.ts +1 -4
  20. package/dist/cjs/components/DateField/DateField.js +3 -1
  21. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
  22. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +316 -0
  23. package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
  24. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +14 -12
  25. package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +2 -65
  26. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +98 -410
  27. package/dist/cjs/components/DateField/index.d.ts +1 -0
  28. package/dist/cjs/components/DateField/index.js +1 -0
  29. package/dist/cjs/components/DateField/utils.d.ts +10 -1
  30. package/dist/cjs/components/DateField/utils.js +114 -2
  31. package/dist/cjs/components/DatePicker/DatePicker.d.ts +4 -4
  32. package/dist/cjs/components/DatePicker/DatePicker.js +8 -6
  33. package/dist/cjs/components/DatePicker/MobileCalendar.css +7 -32
  34. package/dist/cjs/components/DatePicker/MobileCalendar.d.ts +0 -5
  35. package/dist/cjs/components/DatePicker/MobileCalendar.js +18 -20
  36. package/dist/cjs/components/DatePicker/StubButton.css +26 -0
  37. package/dist/cjs/components/DatePicker/StubButton.d.ts +8 -0
  38. package/dist/cjs/components/DatePicker/StubButton.js +12 -0
  39. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +7 -17
  40. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
  41. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +71 -56
  42. package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +3 -3
  43. package/dist/cjs/components/RangeCalendar/RangeCalendar.js +4 -4
  44. package/dist/cjs/components/RangeDateField/RangeDateField.css +4 -0
  45. package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +12 -0
  46. package/dist/cjs/components/RangeDateField/RangeDateField.js +25 -0
  47. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
  48. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +227 -0
  49. package/dist/cjs/components/RangeDateField/index.d.ts +2 -0
  50. package/dist/cjs/components/RangeDateField/index.js +5 -0
  51. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
  52. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +9 -0
  53. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
  54. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +42 -0
  55. package/dist/cjs/components/RangeDateField/utils/index.d.ts +3 -0
  56. package/dist/cjs/components/RangeDateField/utils/index.js +6 -0
  57. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +3 -0
  58. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +8 -0
  59. package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  60. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +5 -2
  61. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
  62. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
  63. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
  64. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
  65. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  66. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +15 -2
  67. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
  68. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
  69. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
  70. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
  71. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
  72. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +90 -0
  73. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
  74. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
  75. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +43 -0
  76. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
  77. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
  78. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +9 -0
  79. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
  80. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
  81. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +104 -0
  82. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
  83. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
  84. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +67 -0
  85. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
  86. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
  87. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +90 -0
  88. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
  89. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +186 -0
  90. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
  91. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
  92. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +9 -0
  93. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
  94. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
  95. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +85 -0
  96. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
  97. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
  98. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +62 -0
  99. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
  100. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
  101. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +9 -0
  102. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
  103. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
  104. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +58 -0
  105. package/dist/cjs/components/RelativeRangeDatePicker/i18n/en.json +8 -0
  106. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
  107. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.js +9 -0
  108. package/dist/cjs/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
  109. package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +4 -0
  110. package/dist/cjs/components/RelativeRangeDatePicker/index.js +8 -0
  111. package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +15 -0
  112. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +53 -0
  113. package/dist/cjs/components/index.d.ts +3 -0
  114. package/dist/cjs/components/index.js +2 -0
  115. package/dist/cjs/components/types/datePicker.d.ts +5 -2
  116. package/dist/cjs/components/types/events.d.ts +4 -4
  117. package/dist/cjs/components/types/inputs.d.ts +10 -9
  118. package/dist/cjs/components/utils/dates.d.ts +1 -2
  119. package/dist/cjs/components/utils/useDefaultTimeZone.d.ts +2 -0
  120. package/dist/cjs/components/utils/useDefaultTimeZone.js +15 -0
  121. package/dist/cjs/components/utils/validation/datePicker.d.ts +6 -0
  122. package/dist/cjs/components/utils/validation/datePicker.js +30 -0
  123. package/dist/cjs/components/utils/validation/i18n/en.json +6 -0
  124. package/dist/cjs/components/utils/validation/i18n/index.d.ts +1 -0
  125. package/dist/cjs/components/utils/validation/i18n/index.js +9 -0
  126. package/dist/cjs/components/utils/validation/i18n/ru.json +6 -0
  127. package/dist/esm/components/Calendar/Calendar.d.ts +6 -5
  128. package/dist/esm/components/Calendar/Calendar.js +4 -4
  129. package/dist/esm/components/Calendar/index.d.ts +6 -6
  130. package/dist/esm/components/Calendar/index.js +5 -5
  131. package/dist/esm/components/{CalendarBase → CalendarView}/Calendar.css +9 -6
  132. package/dist/esm/components/{CalendarBase/CalendarBase.d.ts → CalendarView/CalendarView.d.ts} +2 -2
  133. package/dist/esm/components/{CalendarBase/CalendarBase.js → CalendarView/CalendarView.js} +3 -2
  134. package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/types.d.ts +37 -31
  135. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.js +1 -2
  136. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.d.ts +2 -2
  137. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -1
  138. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +17 -0
  139. package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
  140. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +46 -24
  141. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
  142. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +24 -13
  143. package/dist/esm/components/CalendarView/i18n/en.json +7 -0
  144. package/dist/esm/components/CalendarView/i18n/index.d.ts +1 -0
  145. package/dist/esm/components/CalendarView/i18n/ru.json +7 -0
  146. package/dist/esm/components/DateField/DateField.d.ts +1 -4
  147. package/dist/esm/components/DateField/DateField.js +4 -2
  148. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
  149. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +311 -0
  150. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
  151. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +14 -12
  152. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +2 -65
  153. package/dist/esm/components/DateField/hooks/useDateFieldState.js +97 -409
  154. package/dist/esm/components/DateField/index.d.ts +1 -0
  155. package/dist/esm/components/DateField/index.js +1 -0
  156. package/dist/esm/components/DateField/utils.d.ts +10 -1
  157. package/dist/esm/components/DateField/utils.js +105 -2
  158. package/dist/esm/components/DatePicker/DatePicker.d.ts +4 -4
  159. package/dist/esm/components/DatePicker/DatePicker.js +10 -8
  160. package/dist/esm/components/DatePicker/MobileCalendar.css +7 -32
  161. package/dist/esm/components/DatePicker/MobileCalendar.d.ts +0 -5
  162. package/dist/esm/components/DatePicker/MobileCalendar.js +17 -18
  163. package/dist/esm/components/DatePicker/StubButton.css +26 -0
  164. package/dist/esm/components/DatePicker/StubButton.d.ts +8 -0
  165. package/dist/esm/components/DatePicker/StubButton.js +8 -0
  166. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +7 -17
  167. package/dist/esm/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
  168. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +71 -56
  169. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +3 -3
  170. package/dist/esm/components/RangeCalendar/RangeCalendar.js +4 -4
  171. package/dist/esm/components/RangeDateField/RangeDateField.css +4 -0
  172. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +12 -0
  173. package/dist/esm/components/RangeDateField/RangeDateField.js +21 -0
  174. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
  175. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +222 -0
  176. package/dist/esm/components/RangeDateField/index.d.ts +2 -0
  177. package/dist/esm/components/RangeDateField/index.js +2 -0
  178. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
  179. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +5 -0
  180. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
  181. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +38 -0
  182. package/dist/esm/components/RangeDateField/utils/index.d.ts +3 -0
  183. package/dist/esm/components/RangeDateField/utils/index.js +3 -0
  184. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +3 -0
  185. package/dist/esm/components/RangeDateField/utils/isValidRange.js +4 -0
  186. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  187. package/dist/esm/components/RelativeDateField/RelativeDateField.js +5 -2
  188. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
  189. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
  190. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
  191. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
  192. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  193. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +17 -4
  194. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
  195. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
  196. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
  197. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
  198. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
  199. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +85 -0
  200. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
  201. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
  202. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +39 -0
  203. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
  204. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
  205. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +5 -0
  206. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
  207. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
  208. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +99 -0
  209. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
  210. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
  211. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +62 -0
  212. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
  213. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
  214. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +85 -0
  215. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
  216. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +183 -0
  217. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
  218. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
  219. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +5 -0
  220. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
  221. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
  222. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +78 -0
  223. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
  224. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
  225. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +58 -0
  226. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
  227. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
  228. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +5 -0
  229. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
  230. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
  231. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +53 -0
  232. package/dist/esm/components/RelativeRangeDatePicker/i18n/en.json +8 -0
  233. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
  234. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.js +5 -0
  235. package/dist/esm/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
  236. package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +4 -0
  237. package/dist/esm/components/RelativeRangeDatePicker/index.js +3 -0
  238. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +15 -0
  239. package/dist/esm/components/RelativeRangeDatePicker/utils.js +46 -0
  240. package/dist/esm/components/index.d.ts +3 -0
  241. package/dist/esm/components/index.js +2 -0
  242. package/dist/esm/components/types/datePicker.d.ts +5 -2
  243. package/dist/esm/components/types/events.d.ts +4 -4
  244. package/dist/esm/components/types/inputs.d.ts +10 -9
  245. package/dist/esm/components/utils/dates.d.ts +1 -2
  246. package/dist/esm/components/utils/useDefaultTimeZone.d.ts +2 -0
  247. package/dist/esm/components/utils/useDefaultTimeZone.js +10 -0
  248. package/dist/esm/components/utils/validation/datePicker.d.ts +6 -0
  249. package/dist/esm/components/utils/validation/datePicker.js +26 -0
  250. package/dist/esm/components/utils/validation/i18n/en.json +6 -0
  251. package/dist/esm/components/utils/validation/i18n/index.d.ts +1 -0
  252. package/dist/esm/components/utils/validation/i18n/index.js +5 -0
  253. package/dist/esm/components/utils/validation/i18n/ru.json +6 -0
  254. package/package.json +28 -28
  255. package/dist/cjs/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
  256. package/dist/cjs/components/CalendarBase/i18n/en.json +0 -4
  257. package/dist/cjs/components/CalendarBase/i18n/index.d.ts +0 -1
  258. package/dist/cjs/components/CalendarBase/i18n/ru.json +0 -4
  259. package/dist/cjs/components/hooks/useControlledState.d.ts +0 -1
  260. package/dist/cjs/components/hooks/useControlledState.js +0 -28
  261. package/dist/esm/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
  262. package/dist/esm/components/CalendarBase/i18n/en.json +0 -4
  263. package/dist/esm/components/CalendarBase/i18n/index.d.ts +0 -1
  264. package/dist/esm/components/CalendarBase/i18n/ru.json +0 -4
  265. package/dist/esm/components/hooks/useControlledState.d.ts +0 -1
  266. package/dist/esm/components/hooks/useControlledState.js +0 -23
  267. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
  268. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
  269. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -0
  270. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
  271. /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
  272. /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
  273. /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.js +0 -0
  274. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
  275. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
  276. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
  277. /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
  278. /package/dist/esm/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
  279. /package/dist/esm/components/{CalendarBase → CalendarView}/utils.js +0 -0
@@ -3,67 +3,76 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useDatePickerState = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
+ const uikit_1 = require("@gravity-ui/uikit");
6
7
  const DateField_1 = require("../../DateField");
7
- const utils_1 = require("../../DateField/utils");
8
- const useControlledState_1 = require("../../hooks/useControlledState");
9
8
  const dates_1 = require("../../utils/dates");
9
+ const useDefaultTimeZone_1 = require("../../utils/useDefaultTimeZone");
10
10
  function useDatePickerState(props) {
11
+ var _a;
11
12
  const { disabled, readOnly } = props;
12
13
  const [isOpen, setOpen] = react_1.default.useState(false);
13
- const [value, setValue] = (0, useControlledState_1.useControlledState)(props.value, props.defaultValue, props.onUpdate);
14
+ const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
14
15
  const [selectedDateInner, setSelectedDate] = react_1.default.useState(null);
15
16
  const [selectedTimeInner, setSelectedTime] = react_1.default.useState(null);
17
+ const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(props.value || props.defaultValue || props.placeholderValue);
18
+ const timeZone = props.timeZone || inputTimeZone;
16
19
  let selectedDate = selectedDateInner;
17
20
  let selectedTime = selectedTimeInner;
18
21
  const format = props.format || 'L';
19
- const { hasDate, hasTime, timeFormat } = react_1.default.useMemo(() => {
20
- const sections = (0, utils_1.splitFormatIntoSections)(format);
21
- let hasDate = false;
22
- let hasHours = false;
23
- let hasMinutes = false;
24
- let hasSeconds = false;
25
- for (const s of sections) {
26
- hasHours || (hasHours = s.type === 'hour');
27
- hasMinutes || (hasMinutes = s.type === 'minute');
28
- hasSeconds || (hasSeconds = s.type === 'second');
29
- hasDate || (hasDate = ['day', 'month', 'year'].includes(s.type));
30
- }
31
- return {
32
- hasTime: hasHours || hasMinutes || hasSeconds,
33
- timeFormat: hasSeconds ? 'LTS' : 'LT',
34
- hasDate,
35
- };
36
- }, [format]);
37
- if (value) {
38
- selectedDate = value;
39
- if (hasTime) {
40
- selectedTime = value;
41
- }
42
- }
43
22
  const commitValue = (date, time) => {
44
23
  if (disabled || readOnly) {
45
24
  return;
46
25
  }
47
- setValue((0, dates_1.mergeDateTime)(date, time));
26
+ setValue((0, dates_1.mergeDateTime)(date, time).timeZone(inputTimeZone));
48
27
  setSelectedDate(null);
49
28
  setSelectedTime(null);
50
29
  };
30
+ const dateFieldState = (0, DateField_1.useDateFieldState)({
31
+ value,
32
+ onUpdate(date) {
33
+ if (date) {
34
+ commitValue(date, date);
35
+ }
36
+ else {
37
+ setValue(null);
38
+ }
39
+ },
40
+ disabled,
41
+ readOnly,
42
+ validationState: props.validationState,
43
+ minValue: props.minValue,
44
+ maxValue: props.maxValue,
45
+ isDateUnavailable: props.isDateUnavailable,
46
+ format,
47
+ placeholderValue: props.placeholderValue,
48
+ timeZone,
49
+ });
50
+ const timeFormat = react_1.default.useMemo(() => {
51
+ const hasSeconds = dateFieldState.sections.some((s) => s.type === 'second');
52
+ return hasSeconds ? 'LTS' : 'LT';
53
+ }, [dateFieldState.sections]);
54
+ if (value) {
55
+ selectedDate = value.timeZone(timeZone);
56
+ if (dateFieldState.hasTime) {
57
+ selectedTime = value.timeZone(timeZone);
58
+ }
59
+ }
51
60
  // Intercept setValue to make sure the Time section is not changed by date selection in Calendar
52
61
  const selectDate = (newValue) => {
53
62
  if (disabled || readOnly) {
54
63
  return;
55
64
  }
56
- const shouldClose = !hasTime;
57
- if (hasTime) {
65
+ const shouldClose = !dateFieldState.hasTime;
66
+ if (dateFieldState.hasTime) {
58
67
  if (selectedTime || shouldClose) {
59
- commitValue(newValue, selectedTime || getPlaceholderTime(props.placeholderValue, props.timeZone));
68
+ commitValue(newValue, selectedTime || newValue);
60
69
  }
61
70
  else {
62
71
  setSelectedDate(newValue);
63
72
  }
64
73
  }
65
74
  else {
66
- setValue(newValue);
75
+ commitValue(newValue, newValue);
67
76
  }
68
77
  if (shouldClose) {
69
78
  setOpen(false);
@@ -73,29 +82,33 @@ function useDatePickerState(props) {
73
82
  if (disabled || readOnly) {
74
83
  return;
75
84
  }
85
+ const newTime = newValue !== null && newValue !== void 0 ? newValue : (0, dates_1.createPlaceholderValue)({
86
+ placeholderValue: props.placeholderValue,
87
+ timeZone,
88
+ });
76
89
  if (selectedDate) {
77
- commitValue(selectedDate, newValue);
90
+ commitValue(selectedDate, newTime);
78
91
  }
79
92
  else {
80
- setSelectedTime(newValue);
93
+ setSelectedTime(newTime);
81
94
  }
82
95
  };
83
- const dateFieldState = (0, DateField_1.useDateFieldState)({
84
- value: value !== null && value !== void 0 ? value : null,
85
- onUpdate: setValue,
86
- disabled,
87
- readOnly,
88
- validationState: props.validationState,
89
- minValue: props.minValue,
90
- maxValue: props.maxValue,
91
- isDateUnavailable: props.isDateUnavailable,
92
- format,
93
- placeholderValue: props.placeholderValue,
94
- timeZone: props.timeZone,
95
- });
96
+ if (dateFieldState.hasTime && !selectedTime) {
97
+ selectedTime = dateFieldState.displayValue;
98
+ }
96
99
  return {
97
- value: value !== null && value !== void 0 ? value : null,
98
- setValue,
100
+ value,
101
+ setValue(newDate) {
102
+ if (props.readOnly || props.disabled) {
103
+ return;
104
+ }
105
+ if (newDate) {
106
+ setValue(newDate.timeZone(inputTimeZone));
107
+ }
108
+ else {
109
+ setValue(null);
110
+ }
111
+ },
99
112
  dateValue: selectedDate,
100
113
  timeValue: selectedTime,
101
114
  setDateValue: selectDate,
@@ -103,13 +116,18 @@ function useDatePickerState(props) {
103
116
  disabled,
104
117
  readOnly,
105
118
  format,
106
- hasDate,
107
- hasTime,
119
+ hasDate: dateFieldState.hasDate,
120
+ hasTime: dateFieldState.hasTime,
108
121
  timeFormat,
122
+ timeZone,
109
123
  isOpen,
110
124
  setOpen(newIsOpen) {
111
- if (!newIsOpen && !value && selectedDate && hasTime) {
112
- commitValue(selectedDate, selectedTime || getPlaceholderTime(props.placeholderValue, props.timeZone));
125
+ if (!newIsOpen && !value && selectedDate && dateFieldState.hasTime) {
126
+ commitValue(selectedDate, selectedTime ||
127
+ (0, dates_1.createPlaceholderValue)({
128
+ placeholderValue: props.placeholderValue,
129
+ timeZone: inputTimeZone,
130
+ }));
113
131
  }
114
132
  setOpen(newIsOpen);
115
133
  },
@@ -117,6 +135,3 @@ function useDatePickerState(props) {
117
135
  };
118
136
  }
119
137
  exports.useDatePickerState = useDatePickerState;
120
- function getPlaceholderTime(placeholderValue, timeZone) {
121
- return (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
122
- }
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import type { CalendarInstance, CalendarSize } from '../CalendarBase/CalendarBase';
3
- import type { RangeCalendarStateOptions } from '../CalendarBase/hooks/useRangeCalendarState';
2
+ import type { CalendarInstance, CalendarSize } from '../CalendarView/CalendarView';
3
+ import type { RangeCalendarStateOptions } from '../CalendarView/hooks/useRangeCalendarState';
4
4
  import type { AccessibilityProps, DomProps, FocusEvents, StyleProps } from '../types';
5
- import '../CalendarBase/Calendar.css';
5
+ import '../CalendarView/Calendar.css';
6
6
  export interface RangeCalendarProps extends RangeCalendarStateOptions, DomProps, StyleProps, FocusEvents, AccessibilityProps {
7
7
  /**
8
8
  * The size of the element.
@@ -4,9 +4,9 @@ exports.RangeCalendar = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const react_1 = tslib_1.__importDefault(require("react"));
7
- const CalendarBase_1 = require("../CalendarBase/CalendarBase");
8
- const useRangeCalendarState_1 = require("../CalendarBase/hooks/useRangeCalendarState");
9
- require("../CalendarBase/Calendar.css");
7
+ const CalendarView_1 = require("../CalendarView/CalendarView");
8
+ const useRangeCalendarState_1 = require("../CalendarView/hooks/useRangeCalendarState");
9
+ require("../CalendarView/Calendar.css");
10
10
  exports.RangeCalendar = react_1.default.forwardRef(function Calendar(props, ref) {
11
11
  const state = (0, useRangeCalendarState_1.useRangeCalendarState)(props);
12
12
  const handleBlur = (e) => {
@@ -16,5 +16,5 @@ exports.RangeCalendar = react_1.default.forwardRef(function Calendar(props, ref)
16
16
  }
17
17
  (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
18
18
  };
19
- return (0, jsx_runtime_1.jsx)(CalendarBase_1.CalendarBase, Object.assign({ ref: ref }, props, { state: state, onBlur: handleBlur }));
19
+ return (0, jsx_runtime_1.jsx)(CalendarView_1.CalendarView, Object.assign({ ref: ref }, props, { state: state, onBlur: handleBlur }));
20
20
  });
@@ -0,0 +1,4 @@
1
+ .g-date-range-date-field {
2
+ display: inline-block;
3
+ width: auto;
4
+ }
@@ -0,0 +1,12 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { DateFieldProps } from '../DateField/hooks/useDateFieldProps';
3
+ import type { RangeValue } from '../types';
4
+ import './RangeDateField.css';
5
+ export type RangeDateFieldProps = DateFieldProps<RangeValue<DateTime>> & {
6
+ /**
7
+ * Delimiter separating the start and end parts of the range.
8
+ * @default ' — '
9
+ * */
10
+ delimiter?: string;
11
+ };
12
+ export declare function RangeDateField({ className, ...props }: RangeDateFieldProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RangeDateField = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const uikit_1 = require("@gravity-ui/uikit");
8
+ const cn_1 = require("../../utils/cn");
9
+ const useDateFieldProps_1 = require("../DateField/hooks/useDateFieldProps");
10
+ const useRangeDateFieldState_1 = require("./hooks/useRangeDateFieldState");
11
+ require("./RangeDateField.css");
12
+ const b = (0, cn_1.block)('range-date-field');
13
+ function RangeDateField(_a) {
14
+ var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
15
+ const state = (0, useRangeDateFieldState_1.useRangeDateFieldState)(props);
16
+ const { inputProps } = (0, useDateFieldProps_1.useDateFieldProps)(state, props);
17
+ const [isActive, setActive] = react_1.default.useState(false);
18
+ const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
19
+ onFocusWithinChange(isFocusWithin) {
20
+ setActive(isFocusWithin);
21
+ },
22
+ });
23
+ return ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: b(null, className), style: props.style }, focusWithinProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, inputProps, { value: state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value })) })));
24
+ }
25
+ exports.RangeDateField = RangeDateField;
@@ -0,0 +1,9 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { BaseDateFieldState } from '../../DateField';
3
+ import type { DateFieldBase } from '../../types/datePicker';
4
+ import type { RangeValue } from '../../types/inputs';
5
+ export interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {
6
+ delimiter?: string;
7
+ }
8
+ export type RangeDateFieldState = BaseDateFieldState<RangeValue<DateTime>>;
9
+ export declare function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState;
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRangeDateFieldState = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable complexity */
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const date_utils_1 = require("@gravity-ui/date-utils");
8
+ const uikit_1 = require("@gravity-ui/uikit");
9
+ const DateField_1 = require("../../DateField");
10
+ const utils_1 = require("../../DateField/utils");
11
+ const dates_1 = require("../../utils/dates");
12
+ const useDefaultTimeZone_1 = require("../../utils/useDefaultTimeZone");
13
+ const utils_2 = require("../utils");
14
+ const RANGE_FORMAT_DELIMITER = ' — ';
15
+ function useRangeDateFieldState(props) {
16
+ var _a, _b, _c, _d, _e;
17
+ const [value, setRange] = (0, uikit_1.useControlledState)(props.value, props.defaultValue || null, props.onUpdate);
18
+ const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(((_a = props.value) === null || _a === void 0 ? void 0 : _a.start) || ((_b = props.defaultValue) === null || _b === void 0 ? void 0 : _b.start) || props.placeholderValue);
19
+ const timeZone = props.timeZone || inputTimeZone;
20
+ const handleUpdateRange = (v) => {
21
+ setRange(v ? { start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone) } : v);
22
+ };
23
+ const [placeholderDate, setPlaceholderDate] = react_1.default.useState(() => {
24
+ return (0, utils_2.createPlaceholderRangeValue)({
25
+ placeholderValue: props.placeholderValue,
26
+ timeZone,
27
+ });
28
+ });
29
+ const format = props.format || 'L';
30
+ const delimiter = (_c = props.delimiter) !== null && _c !== void 0 ? _c : RANGE_FORMAT_DELIMITER;
31
+ const sections = (0, utils_1.useFormatSections)(format);
32
+ const allSegments = react_1.default.useMemo(() => {
33
+ return sections
34
+ .filter((seg) => utils_1.EDITABLE_SEGMENTS[seg.type])
35
+ .reduce((p, seg) => (Object.assign(Object.assign({}, p), { [seg.type]: true })), {});
36
+ }, [sections]);
37
+ // eslint-disable-next-line prefer-const
38
+ let [validSegments, setValidSegments] = react_1.default.useState(() => (value ? { start: Object.assign({}, allSegments), end: Object.assign({}, allSegments) } : { start: {}, end: {} }));
39
+ if (value &&
40
+ (!(0, utils_1.isAllSegmentsValid)(allSegments, validSegments.start) ||
41
+ !(0, utils_1.isAllSegmentsValid)(allSegments, validSegments.end))) {
42
+ setValidSegments({ start: Object.assign({}, allSegments), end: Object.assign({}, allSegments) });
43
+ }
44
+ if (!value &&
45
+ (0, utils_1.isAllSegmentsValid)(allSegments, validSegments.start) &&
46
+ Object.keys(validSegments.start).length === Object.keys(allSegments).length &&
47
+ (0, utils_1.isAllSegmentsValid)(allSegments, validSegments.end) &&
48
+ Object.keys(validSegments.end).length === Object.keys(allSegments).length) {
49
+ validSegments = { start: {}, end: {} };
50
+ setValidSegments(validSegments);
51
+ setPlaceholderDate((0, utils_2.createPlaceholderRangeValue)({
52
+ placeholderValue: props.placeholderValue,
53
+ timeZone,
54
+ }));
55
+ }
56
+ const displayValue = value &&
57
+ (0, date_utils_1.isValid)(value.start) &&
58
+ (0, date_utils_1.isValid)(value.end) &&
59
+ Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&
60
+ Object.keys(validSegments.end).length >= Object.keys(allSegments).length
61
+ ? { start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone) }
62
+ : {
63
+ start: placeholderDate.start.timeZone(timeZone),
64
+ end: placeholderDate.end.timeZone(timeZone),
65
+ };
66
+ const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);
67
+ const [selectedSections, setSelectedSections] = react_1.default.useState(-1);
68
+ const selectedSectionIndexes = react_1.default.useMemo(() => {
69
+ if (selectedSections === -1) {
70
+ return null;
71
+ }
72
+ if (selectedSections === 'all') {
73
+ return {
74
+ startIndex: 0,
75
+ endIndex: sectionsState.editableSections.length - 1,
76
+ };
77
+ }
78
+ if (typeof selectedSections === 'number') {
79
+ return { startIndex: selectedSections, endIndex: selectedSections };
80
+ }
81
+ if (typeof selectedSections === 'string') {
82
+ const selectedSectionIndex = sectionsState.editableSections.findIndex((section) => section.type === selectedSections);
83
+ return { startIndex: selectedSectionIndex, endIndex: selectedSectionIndex };
84
+ }
85
+ return selectedSections;
86
+ }, [selectedSections, sectionsState.editableSections]);
87
+ function setValue(newValue) {
88
+ if (props.disabled || props.readOnly) {
89
+ return;
90
+ }
91
+ if ((0, utils_1.isAllSegmentsValid)(allSegments, validSegments.start) &&
92
+ (0, utils_1.isAllSegmentsValid)(allSegments, validSegments.end)) {
93
+ if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {
94
+ handleUpdateRange(newValue);
95
+ }
96
+ }
97
+ else {
98
+ if (value) {
99
+ handleUpdateRange(null);
100
+ }
101
+ setPlaceholderDate(newValue);
102
+ }
103
+ }
104
+ function markValid(portion, part) {
105
+ validSegments[portion][part] = true;
106
+ if (validSegments[portion].day &&
107
+ validSegments[portion].month &&
108
+ validSegments[portion].year &&
109
+ allSegments.weekday) {
110
+ validSegments[portion].weekday = true;
111
+ }
112
+ if (validSegments[portion].hour && allSegments.dayPeriod) {
113
+ validSegments[portion].dayPeriod = true;
114
+ }
115
+ setValidSegments(Object.assign(Object.assign({}, validSegments), { [portion]: Object.assign({}, validSegments[portion]) }));
116
+ }
117
+ function setSection(sectionIndex, amount) {
118
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
119
+ const section = sectionsState.editableSections[sectionIndex];
120
+ markValid(portion, section.type);
121
+ setValue(Object.assign(Object.assign({}, displayValue), { [portion]: (0, utils_1.setSegment)(section, displayValue[portion], amount) }));
122
+ }
123
+ function adjustSection(sectionIndex, amount) {
124
+ const section = sectionsState.editableSections[sectionIndex];
125
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
126
+ if (validSegments[portion][section.type]) {
127
+ setValue(Object.assign(Object.assign({}, displayValue), { [portion]: (0, utils_1.addSegment)(section, displayValue[portion], amount) }));
128
+ }
129
+ else {
130
+ markValid(portion, section.type);
131
+ if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {
132
+ setValue(displayValue);
133
+ }
134
+ }
135
+ }
136
+ function flushValidSection(sectionIndex) {
137
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
138
+ delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];
139
+ setValidSegments(Object.assign(Object.assign({}, validSegments), { [portion]: Object.assign({}, validSegments[portion]) }));
140
+ }
141
+ function flushAllValidSections() {
142
+ validSegments = { start: {}, end: {} };
143
+ setValidSegments({ start: {}, end: {} });
144
+ }
145
+ function getSectionValue(sectionIndex) {
146
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
147
+ return displayValue[portion];
148
+ }
149
+ function setSectionValue(sectionIndex, currentValue) {
150
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
151
+ setValue(Object.assign(Object.assign({}, displayValue), { [portion]: currentValue }));
152
+ }
153
+ function createPlaceholder() {
154
+ return (0, utils_2.createPlaceholderRangeValue)({
155
+ placeholderValue: props.placeholderValue,
156
+ timeZone,
157
+ });
158
+ }
159
+ function setValueFromString(str) {
160
+ var _a, _b;
161
+ const list = str.split(delimiter);
162
+ const start = (0, utils_1.parseDateFromString)((_a = list === null || list === void 0 ? void 0 : list[0]) === null || _a === void 0 ? void 0 : _a.trim(), format, timeZone);
163
+ const end = (0, utils_1.parseDateFromString)((_b = list === null || list === void 0 ? void 0 : list[1]) === null || _b === void 0 ? void 0 : _b.trim(), format, timeZone);
164
+ const range = { start, end };
165
+ if ((0, date_utils_1.isValid)(range.start) && (0, date_utils_1.isValid)(range.end)) {
166
+ handleUpdateRange(range);
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ const validationState = props.validationState ||
172
+ ((0, dates_1.isInvalid)(value === null || value === void 0 ? void 0 : value.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
173
+ ((0, dates_1.isInvalid)(value === null || value === void 0 ? void 0 : value.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
174
+ (value && !(0, utils_2.isValidRange)(value) ? 'invalid' : undefined) ||
175
+ (value && ((_d = props.isDateUnavailable) === null || _d === void 0 ? void 0 : _d.call(props, value.start)) ? 'invalid' : undefined) ||
176
+ (value && ((_e = props.isDateUnavailable) === null || _e === void 0 ? void 0 : _e.call(props, value.end)) ? 'invalid' : undefined);
177
+ return (0, DateField_1.useBaseDateFieldState)({
178
+ value,
179
+ displayValue,
180
+ placeholderValue: props.placeholderValue,
181
+ timeZone,
182
+ validationState,
183
+ editableSections: sectionsState.editableSections,
184
+ readOnly: props.readOnly,
185
+ disabled: props.disabled,
186
+ selectedSectionIndexes,
187
+ selectedSections,
188
+ isEmpty: Object.keys(validSegments.start).length === 0 &&
189
+ Object.keys(validSegments.end).length === 0,
190
+ flushAllValidSections,
191
+ flushValidSection,
192
+ setSelectedSections,
193
+ setValue,
194
+ setDate: handleUpdateRange,
195
+ adjustSection,
196
+ setSection,
197
+ getSectionValue,
198
+ setSectionValue,
199
+ createPlaceholder,
200
+ setValueFromString,
201
+ });
202
+ }
203
+ exports.useRangeDateFieldState = useRangeDateFieldState;
204
+ function useSectionsState(sections, value, validSegments, delimiter) {
205
+ const [state, setState] = react_1.default.useState(() => {
206
+ return {
207
+ value,
208
+ sections,
209
+ validSegments,
210
+ delimiter,
211
+ editableSections: (0, utils_2.getRangeEditableSections)(sections, value, validSegments, delimiter),
212
+ };
213
+ });
214
+ if (sections !== state.sections ||
215
+ validSegments !== state.validSegments ||
216
+ !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||
217
+ delimiter !== state.delimiter) {
218
+ setState({
219
+ value,
220
+ sections,
221
+ validSegments,
222
+ delimiter,
223
+ editableSections: (0, utils_2.getRangeEditableSections)(sections, value, validSegments, delimiter),
224
+ });
225
+ }
226
+ return state;
227
+ }
@@ -0,0 +1,2 @@
1
+ export * from './RangeDateField';
2
+ export * from './hooks/useRangeDateFieldState';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./RangeDateField"), exports);
5
+ tslib_1.__exportStar(require("./hooks/useRangeDateFieldState"), exports);
@@ -0,0 +1,5 @@
1
+ import type { PlaceholderValueOptions } from '../../utils/dates';
2
+ export declare function createPlaceholderRangeValue({ placeholderValue, timeZone }: PlaceholderValueOptions): {
3
+ start: import("@gravity-ui/date-utils").DateTime;
4
+ end: import("@gravity-ui/date-utils").DateTime;
5
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPlaceholderRangeValue = void 0;
4
+ const dates_1 = require("../../utils/dates");
5
+ function createPlaceholderRangeValue({ placeholderValue, timeZone }) {
6
+ const date = (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
7
+ return { start: date, end: date };
8
+ }
9
+ exports.createPlaceholderRangeValue = createPlaceholderRangeValue;
@@ -0,0 +1,5 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { DateFieldSectionWithoutPosition } from '../../DateField/types';
3
+ import type { EDITABLE_SEGMENTS } from '../../DateField/utils';
4
+ import type { RangeValue } from '../../types';
5
+ export declare function getRangeEditableSections(sections: DateFieldSectionWithoutPosition[], value: RangeValue<DateTime>, validSegments: RangeValue<typeof EDITABLE_SEGMENTS>, delimiter: string): import("../../DateField/types").DateFieldSection[];
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRangeEditableSections = void 0;
4
+ const utils_1 = require("../../DateField/utils");
5
+ function getRangeEditableSections(sections, value, validSegments, delimiter) {
6
+ const start = (0, utils_1.getEditableSections)(sections, value.start, validSegments.start);
7
+ const end = (0, utils_1.getEditableSections)(sections, value.end, validSegments.end);
8
+ const last = start[start.length - 1];
9
+ let position = last.end;
10
+ const previousEditableSection = last.nextEditableSection;
11
+ const sectionsCount = start.length + 1;
12
+ const delimiterSection = (0, utils_1.toEditableSection)({
13
+ type: 'literal',
14
+ contentType: 'letter',
15
+ format: delimiter,
16
+ placeholder: delimiter,
17
+ hasLeadingZeros: false,
18
+ }, value.start, validSegments.start, position, previousEditableSection);
19
+ position += delimiterSection.textValue.length - 1;
20
+ let nextEditableSection;
21
+ for (let index = 0; index < end.length; index++) {
22
+ const section = end[index];
23
+ section.start += position;
24
+ section.end += position;
25
+ if (section.previousEditableSection === 0 && nextEditableSection === undefined) {
26
+ section.previousEditableSection = previousEditableSection;
27
+ }
28
+ else {
29
+ section.previousEditableSection += sectionsCount;
30
+ }
31
+ section.nextEditableSection += sectionsCount;
32
+ if ((0, utils_1.isEditableSection)(section) && nextEditableSection === undefined) {
33
+ nextEditableSection = index + sectionsCount;
34
+ }
35
+ }
36
+ if (nextEditableSection !== undefined) {
37
+ delimiterSection.nextEditableSection = nextEditableSection;
38
+ start[previousEditableSection].nextEditableSection = nextEditableSection;
39
+ }
40
+ return [...start, delimiterSection, ...end];
41
+ }
42
+ exports.getRangeEditableSections = getRangeEditableSections;
@@ -0,0 +1,3 @@
1
+ export * from './getRangeEditableSections';
2
+ export * from './isValidRange';
3
+ export * from './createPlaceholderRangeValue';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./getRangeEditableSections"), exports);
5
+ tslib_1.__exportStar(require("./isValidRange"), exports);
6
+ tslib_1.__exportStar(require("./createPlaceholderRangeValue"), exports);
@@ -0,0 +1,3 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { RangeValue } from '../../types';
3
+ export declare function isValidRange({ start, end }: RangeValue<DateTime>): boolean;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidRange = void 0;
4
+ const date_utils_1 = require("@gravity-ui/date-utils");
5
+ function isValidRange({ start, end }) {
6
+ return (0, date_utils_1.isValid)(start) && (0, date_utils_1.isValid)(end) && (start.isSame(end) || start.isBefore(end));
7
+ }
8
+ exports.isValidRange = isValidRange;
@@ -1,7 +1,7 @@
1
- import type { AccessibilityProps, DomProps, FocusableProps, KeyboardEvents, StyleProps, TextInputExtendProps, TextInputProps } from '../types';
1
+ import type { AccessibilityProps, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, StyleProps, TextInputExtendProps, TextInputProps } from '../types';
2
2
  import type { RelativeDateFieldOptions } from './hooks/useRelativeDateFieldState';
3
3
  import './RelativeDateField.css';
4
- export interface RelativeDateFieldProps extends RelativeDateFieldOptions, TextInputProps, TextInputExtendProps, DomProps, StyleProps, AccessibilityProps, FocusableProps, KeyboardEvents {
4
+ export interface RelativeDateFieldProps extends RelativeDateFieldOptions, TextInputProps, TextInputExtendProps, DomProps, InputDOMProps, StyleProps, AccessibilityProps, FocusableProps, KeyboardEvents {
5
5
  /**
6
6
  * Show time field in popup
7
7
  * @default false
@@ -13,9 +13,10 @@ const useRelativeDateFieldState_1 = require("./hooks/useRelativeDateFieldState")
13
13
  require("./RelativeDateField.css");
14
14
  const b = (0, cn_1.block)('relative-date-field');
15
15
  function RelativeDateField(props) {
16
+ var _a;
16
17
  const state = (0, useRelativeDateFieldState_1.useRelativeDateFieldState)(props);
17
18
  const { inputProps, calendarProps, timeInputProps } = (0, useRelativeDateFieldProps_1.useRelativeDateFieldProps)(state, props);
18
- const [isMobile] = (0, uikit_1.useMobile)();
19
+ const isMobile = (0, uikit_1.useMobile)();
19
20
  const anchorRef = react_1.default.useRef(null);
20
21
  const [isOpen, setOpen] = react_1.default.useState(false);
21
22
  const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
@@ -30,6 +31,8 @@ function RelativeDateField(props) {
30
31
  setOpen(true);
31
32
  }
32
33
  (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, e);
33
- }, onBlur: props.onBlur })), !isMobile && ((0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorRef: anchorRef, open: isOpen, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [(0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps)), props.hasTime ? ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({ className: b('time-field') }, timeInputProps)) })) : null] }) }))] })));
34
+ }, onBlur: props.onBlur })), (0, jsx_runtime_1.jsx)("input", { type: "text", hidden: true, name: props.name, value: (_a = state.value) !== null && _a !== void 0 ? _a : '',
35
+ // Ignore React warning
36
+ onChange: () => { } }), !isMobile && ((0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorRef: anchorRef, open: isOpen, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [(0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps)), props.hasTime ? ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({ className: b('time-field') }, timeInputProps)) })) : null] }) }))] })));
34
37
  }
35
38
  exports.RelativeDateField = RelativeDateField;