@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
@@ -0,0 +1,16 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { Preset } from './defaultPresets';
3
+ export declare function getPresetTitle(start: string, end: string, presets?: Preset[]): string;
4
+ export declare function filterPresets(presets: Preset[], minValue?: DateTime): Preset[];
5
+ export interface PresetTab {
6
+ id: string;
7
+ title: string;
8
+ presets: Preset[];
9
+ }
10
+ export declare function getDefaultPresetTabs({ withTime, minValue, }: {
11
+ minValue?: DateTime;
12
+ withTime?: boolean;
13
+ }): PresetTab[];
14
+ export declare function filterPresetTabs(tabs: PresetTab[], { minValue }?: {
15
+ minValue?: DateTime;
16
+ }): PresetTab[];
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.filterPresetTabs = exports.getDefaultPresetTabs = exports.filterPresets = exports.getPresetTitle = void 0;
4
+ const date_utils_1 = require("@gravity-ui/date-utils");
5
+ const defaultPresets_1 = require("./defaultPresets");
6
+ const i18n_1 = require("./i18n");
7
+ function getPresetTitle(start, end, presets = defaultPresets_1.allPresets) {
8
+ const startText = start.replace(/\s+/g, '');
9
+ const endText = end.replace(/\s+/g, '');
10
+ for (const preset of presets) {
11
+ if (preset.from === startText && preset.to === endText) {
12
+ return preset.title;
13
+ }
14
+ }
15
+ if (end === 'now') {
16
+ const match = /^now-(\d+)([m|h|d|w|M|y])$/.exec(start);
17
+ if (match) {
18
+ const [, count, unit] = match;
19
+ if (isDateUnit(unit)) {
20
+ return (0, i18n_1.i18n)('Last {count} {unit}', {
21
+ count,
22
+ unit: (0, i18n_1.i18n)(unit, { count: Number(count) }),
23
+ });
24
+ }
25
+ }
26
+ }
27
+ return startText + ' — ' + endText;
28
+ }
29
+ exports.getPresetTitle = getPresetTitle;
30
+ function isDateUnit(value) {
31
+ return ['m', 'h', 'd', 'w', 'M', 'y'].includes(value);
32
+ }
33
+ function filterPresets(presets, minValue) {
34
+ return presets.filter((preset) => {
35
+ const from = (0, date_utils_1.dateTimeParse)(preset.from);
36
+ const to = (0, date_utils_1.dateTimeParse)(preset.to, { roundUp: true });
37
+ if (!from || !to) {
38
+ return false;
39
+ }
40
+ if (to.isBefore(from)) {
41
+ return false;
42
+ }
43
+ if (minValue && from.isBefore(minValue)) {
44
+ return false;
45
+ }
46
+ return true;
47
+ });
48
+ }
49
+ exports.filterPresets = filterPresets;
50
+ function getDefaultPresetTabs({ withTime, minValue, }) {
51
+ const tabs = [];
52
+ const mainTab = {
53
+ id: 'main',
54
+ title: (0, i18n_1.i18n)('Main'),
55
+ presets: [],
56
+ };
57
+ const mainPresets = defaultPresets_1.DEFAULT_DATE_PRESETS;
58
+ if (withTime) {
59
+ mainPresets.unshift(...defaultPresets_1.DEFAULT_TIME_PRESETS);
60
+ }
61
+ mainTab.presets = filterPresets(mainPresets, minValue);
62
+ if (mainTab.presets.length > 0) {
63
+ tabs.push(mainTab);
64
+ }
65
+ const otherTab = {
66
+ id: 'other',
67
+ title: (0, i18n_1.i18n)('Other'),
68
+ presets: filterPresets(defaultPresets_1.DEFAULT_OTHERS_PRESETS, minValue),
69
+ };
70
+ if (otherTab.presets.length > 0) {
71
+ tabs.push(otherTab);
72
+ }
73
+ return tabs;
74
+ }
75
+ exports.getDefaultPresetTabs = getDefaultPresetTabs;
76
+ function filterPresetTabs(tabs, { minValue } = {}) {
77
+ return tabs.reduce((acc, tab) => {
78
+ const presets = filterPresets(tab.presets, minValue);
79
+ if (presets.length) {
80
+ acc.push(Object.assign(Object.assign({}, tab), { presets }));
81
+ }
82
+ return acc;
83
+ }, []);
84
+ }
85
+ exports.filterPresetTabs = filterPresetTabs;
@@ -0,0 +1,3 @@
1
+ .g-date-relative-range-date-picker-zones__control {
2
+ --g-button-background-color-hover: transparent;
3
+ }
@@ -0,0 +1,9 @@
1
+ import './Zones.css';
2
+ export interface ZonesProps {
3
+ value: string;
4
+ onUpdate: (timeZone: string) => void;
5
+ size?: 's' | 'm' | 'l' | 'xl';
6
+ isMobile?: boolean;
7
+ disabled?: boolean;
8
+ }
9
+ export declare function Zones(props: ZonesProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Zones = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const date_utils_1 = require("@gravity-ui/date-utils");
6
+ const icons_1 = require("@gravity-ui/icons");
7
+ const uikit_1 = require("@gravity-ui/uikit");
8
+ const cn_1 = require("../../../../utils/cn");
9
+ const utils_1 = require("../../utils");
10
+ const i18n_1 = require("./i18n");
11
+ require("./Zones.css");
12
+ const groups = {};
13
+ const zones = (0, date_utils_1.getTimeZonesList)().reduce((opts, value) => {
14
+ const [groupName] = value.split('/');
15
+ if (groupName) {
16
+ let group = groups[groupName];
17
+ if (!group) {
18
+ group = { label: groupName, options: [] };
19
+ groups[groupName] = group;
20
+ opts.push(group);
21
+ }
22
+ group.options.push({ value });
23
+ }
24
+ return opts;
25
+ }, []);
26
+ zones.unshift({
27
+ value: 'UTC',
28
+ });
29
+ zones.unshift({
30
+ value: 'system',
31
+ get content() {
32
+ return (0, i18n_1.i18n)('system');
33
+ },
34
+ });
35
+ zones.unshift({
36
+ value: 'default',
37
+ get content() {
38
+ return (0, i18n_1.i18n)('default');
39
+ },
40
+ });
41
+ const b = (0, cn_1.block)('relative-range-date-picker-zones');
42
+ function Zones(props) {
43
+ const timeZone = (0, utils_1.normalizeTimeZone)(props.value);
44
+ const size = props.isMobile ? 'xl' : props.size;
45
+ return ((0, jsx_runtime_1.jsx)(uikit_1.Select, { value: [timeZone], options: zones, size: size, onUpdate: (v) => {
46
+ const tz = v[0];
47
+ if (tz) {
48
+ props.onUpdate(tz);
49
+ }
50
+ }, width: "max", renderControl: (controlProps) => {
51
+ const value = timeZone === 'system' || timeZone === 'default' ? (0, i18n_1.i18n)(timeZone) : timeZone;
52
+ return ((0, jsx_runtime_1.jsxs)(uikit_1.Button, { onClick: controlProps.onClick, ref: controlProps.ref, view: "flat-secondary", width: "max", pin: "clear-clear", size: size, extraProps: {
53
+ 'aria-haspopup': 'listbox',
54
+ 'aria-expanded': controlProps.open,
55
+ onKeyDown: controlProps.onKeyDown,
56
+ }, className: b('control'), children: [`${value} (${(0, utils_1.getTimeZoneOffset)(timeZone)})`, (0, jsx_runtime_1.jsx)(uikit_1.Icon, { className: b('control-icon'), data: icons_1.ChevronRight, size: props.isMobile ? 20 : 16 })] }));
57
+ }, renderOption: ({ value, content }) => {
58
+ const v = content !== null && content !== void 0 ? content : value;
59
+ return ((0, jsx_runtime_1.jsxs)("span", { className: b('item'), children: [(0, jsx_runtime_1.jsxs)("span", { className: b('item-title'), title: value, children: [v, "\u00A0"] }), (0, jsx_runtime_1.jsx)(uikit_1.Text, { color: "secondary", children: (0, utils_1.getTimeZoneOffset)(value) })] }));
60
+ }, filterable: true }));
61
+ }
62
+ exports.Zones = Zones;
@@ -0,0 +1,4 @@
1
+ {
2
+ "default": "Default",
3
+ "system": "Browser time"
4
+ }
@@ -0,0 +1 @@
1
+ export declare const i18n: (key: "default" | "system", params?: import("@gravity-ui/i18n").Params | undefined) => string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("@gravity-ui/uikit/i18n");
6
+ const cn_1 = require("../../../../../utils/cn");
7
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
8
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
9
+ exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}relative-range-date-picker-zones`);
@@ -0,0 +1,4 @@
1
+ {
2
+ "default": "Дефолтная",
3
+ "system": "Браузерное время"
4
+ }
@@ -0,0 +1,26 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { Value } from '../../RelativeDatePicker';
3
+ import type { RangeValue } from '../../types';
4
+ export interface RelativeRangeDatePickerState {
5
+ value: RangeValue<Value | null> | null;
6
+ timeZone: string;
7
+ setValue: (value: RangeValue<Value | null> | null, timeZone: string) => void;
8
+ isInvalid: boolean;
9
+ errors: string[];
10
+ }
11
+ export interface RelativeRangeDatePickerStateOptions {
12
+ value?: RangeValue<Value | null> | null;
13
+ defaultValue?: RangeValue<Value | null>;
14
+ onUpdate?: (value: RangeValue<Value | null> | null, timeZone: string) => void;
15
+ timeZone?: string;
16
+ defaultTimeZone?: string;
17
+ onUpdateTimeZone?: (timeZone: string) => void;
18
+ /** The minimum allowed date that a user may select. */
19
+ minValue?: DateTime;
20
+ /** The maximum allowed date that a user may select. */
21
+ maxValue?: DateTime;
22
+ /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */
23
+ isDateUnavailable?: (date: DateTime) => boolean;
24
+ allowNullableValues?: boolean;
25
+ }
26
+ export declare function useRelativeRangeDatePickerState(props: RelativeRangeDatePickerStateOptions): RelativeRangeDatePickerState;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRelativeRangeDatePickerState = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const date_utils_1 = require("@gravity-ui/date-utils");
7
+ const uikit_1 = require("@gravity-ui/uikit");
8
+ const datePicker_1 = require("../../utils/validation/datePicker");
9
+ const i18n_1 = require("../i18n");
10
+ function useRelativeRangeDatePickerState(props) {
11
+ var _a, _b;
12
+ const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null);
13
+ const [timeZone, setTimeZone] = (0, uikit_1.useControlledState)(props.timeZone, (_b = props.defaultTimeZone) !== null && _b !== void 0 ? _b : 'default', props.onUpdateTimeZone);
14
+ const validation = react_1.default.useMemo(() => getRangeValidationResult(value, props.allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone), [
15
+ value,
16
+ props.allowNullableValues,
17
+ props.isDateUnavailable,
18
+ props.maxValue,
19
+ props.minValue,
20
+ timeZone,
21
+ ]);
22
+ return Object.assign({ value,
23
+ timeZone,
24
+ setValue(v, tz) {
25
+ var _a;
26
+ setValue(v);
27
+ setTimeZone(tz);
28
+ if (value !== v || (value && timeZone !== tz)) {
29
+ (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, v, tz);
30
+ }
31
+ } }, validation);
32
+ }
33
+ exports.useRelativeRangeDatePickerState = useRelativeRangeDatePickerState;
34
+ function getRangeValidationResult(value, allowNullableValues, minValue, maxValue, isDateUnavailable, timeZone) {
35
+ if (!value) {
36
+ return { isInvalid: false, errors: [] };
37
+ }
38
+ const startDate = value.start ? (0, date_utils_1.dateTimeParse)(value.start.value, { timeZone }) : null;
39
+ const endDate = value.end ? (0, date_utils_1.dateTimeParse)(value.end.value, { timeZone, roundUp: true }) : null;
40
+ const startValidationResult = (0, datePicker_1.getValidationResult)(startDate, minValue, maxValue, isDateUnavailable, timeZone, (0, i18n_1.i18n)('"From"'));
41
+ if (!startDate && !allowNullableValues) {
42
+ startValidationResult.isInvalid = true;
43
+ startValidationResult.errors.push((0, i18n_1.i18n)('"From" is required.'));
44
+ }
45
+ const endValidationResult = (0, datePicker_1.getValidationResult)(endDate, minValue, maxValue, isDateUnavailable, timeZone, (0, i18n_1.i18n)('"To"'));
46
+ if (!endDate && !allowNullableValues) {
47
+ endValidationResult.isInvalid = true;
48
+ endValidationResult.errors.push((0, i18n_1.i18n)('"To" is required.'));
49
+ }
50
+ if (startDate && endDate && endDate.isBefore(startDate)) {
51
+ startValidationResult.isInvalid = true;
52
+ startValidationResult.errors.push((0, i18n_1.i18n)(`"From" can't be after "To".`));
53
+ }
54
+ return {
55
+ isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,
56
+ errors: startValidationResult.errors.concat(endValidationResult.errors),
57
+ };
58
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "\"From\"": "\"From\"",
3
+ "\"From\" is required.": "\"From\" is required.",
4
+ "\"To\"": "\"To\"",
5
+ "\"To\" is required.": "\"To\" is required.",
6
+ "\"From\" can't be after \"To\".": "\"From\" can't be after \"To\".",
7
+ "to": "to"
8
+ }
@@ -0,0 +1 @@
1
+ export declare const i18n: (key: "\"From\"" | "\"From\" is required." | "\"To\"" | "\"To\" is required." | "\"From\" can't be after \"To\"." | "to", params?: import("@gravity-ui/i18n").Params | undefined) => string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("@gravity-ui/uikit/i18n");
6
+ const cn_1 = require("../../../utils/cn");
7
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
8
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
9
+ exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}relative-range-date-picker`);
@@ -0,0 +1,8 @@
1
+ {
2
+ "\"From\"": "«От»",
3
+ "\"From\" is required.": "«От» обязательно.",
4
+ "\"To\"": "«До»",
5
+ "\"To\" is required.": "«До» обязательно.",
6
+ "\"From\" can't be after \"To\".": "«От» не может быть позже чем «До».",
7
+ "to": "до"
8
+ }
@@ -0,0 +1,4 @@
1
+ export * from './RelativeRangeDatePicker';
2
+ export { PickerDialog as RelativeRangeDatePickerDialog } from './components/PickerDialog/PickerDialog';
3
+ export type { PickerDialogProps as RelativeRangeDatePickerDialogProps } from './components/PickerDialog/PickerDialog';
4
+ export * from './hooks/useRelativeRangeDatePickerState';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelativeRangeDatePickerDialog = void 0;
4
+ const tslib_1 = require("tslib");
5
+ tslib_1.__exportStar(require("./RelativeRangeDatePicker"), exports);
6
+ var PickerDialog_1 = require("./components/PickerDialog/PickerDialog");
7
+ Object.defineProperty(exports, "RelativeRangeDatePickerDialog", { enumerable: true, get: function () { return PickerDialog_1.PickerDialog; } });
8
+ tslib_1.__exportStar(require("./hooks/useRelativeRangeDatePickerState"), exports);
@@ -0,0 +1,15 @@
1
+ import type { Value } from '../RelativeDatePicker';
2
+ import type { RangeValue } from '../types';
3
+ import type { Preset } from './components/Presets/defaultPresets';
4
+ export declare function resolveTimeZone(timeZone: string): string;
5
+ export declare function normalizeTimeZone(timeZone: string): string;
6
+ export declare function getTimeZoneOffset(timeZone: string): string;
7
+ interface GetDefaultTitleArgs {
8
+ value: RangeValue<Value | null> | null;
9
+ timeZone: string;
10
+ alwaysShowAsAbsolute?: boolean;
11
+ format?: string;
12
+ presets?: Preset[];
13
+ }
14
+ export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, }: GetDefaultTitleArgs): string;
15
+ export {};
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultTitle = exports.getTimeZoneOffset = exports.normalizeTimeZone = exports.resolveTimeZone = void 0;
4
+ const date_utils_1 = require("@gravity-ui/date-utils");
5
+ const utils_1 = require("./components/Presets/utils");
6
+ function resolveTimeZone(timeZone) {
7
+ if (timeZone === 'default' || timeZone === 'system') {
8
+ return (0, date_utils_1.dateTime)({ timeZone }).timeZone();
9
+ }
10
+ return timeZone;
11
+ }
12
+ exports.resolveTimeZone = resolveTimeZone;
13
+ function normalizeTimeZone(timeZone) {
14
+ const lowered = timeZone.toLowerCase();
15
+ if (lowered === 'default' || lowered === 'system') {
16
+ return lowered;
17
+ }
18
+ return resolveTimeZone(timeZone);
19
+ }
20
+ exports.normalizeTimeZone = normalizeTimeZone;
21
+ function getTimeZoneOffset(timeZone) {
22
+ return `UTC ${(0, date_utils_1.dateTime)({ timeZone }).format('Z')}`;
23
+ }
24
+ exports.getTimeZoneOffset = getTimeZoneOffset;
25
+ function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, }) {
26
+ var _a, _b, _c, _d, _e, _f;
27
+ if (!value) {
28
+ return '';
29
+ }
30
+ const tz = timeZone === 'system' ? '' : ` (${getTimeZoneOffset(timeZone)})`;
31
+ let from = '';
32
+ if (value.start) {
33
+ from =
34
+ value.start.type === 'relative' && !alwaysShowAsAbsolute
35
+ ? value.start.value
36
+ : (_b = (_a = (0, date_utils_1.dateTimeParse)(value.start.value, { timeZone })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '';
37
+ }
38
+ let to = '';
39
+ if (value.end) {
40
+ to =
41
+ value.end.type === 'relative' && !alwaysShowAsAbsolute
42
+ ? value.end.value
43
+ : (_d = (_c = (0, date_utils_1.dateTimeParse)(value.end.value, { timeZone, roundUp: true })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '';
44
+ }
45
+ if (!alwaysShowAsAbsolute &&
46
+ ((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
47
+ ((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
48
+ return `${(0, utils_1.getPresetTitle)(value.start.value, value.end.value, presets)}${tz}`;
49
+ }
50
+ const delimiter = ' — ';
51
+ return `${from}${delimiter}${to}${tz}`;
52
+ }
53
+ exports.getDefaultTitle = getDefaultTitle;
@@ -4,3 +4,6 @@ export * from './DateField';
4
4
  export * from './DatePicker';
5
5
  export * from './RelativeDateField';
6
6
  export * from './RelativeDatePicker';
7
+ export * from './RangeDateField';
8
+ export * from './RelativeRangeDatePicker';
9
+ export type { RangeValue } from './types';
@@ -7,3 +7,5 @@ tslib_1.__exportStar(require("./DateField"), exports);
7
7
  tslib_1.__exportStar(require("./DatePicker"), exports);
8
8
  tslib_1.__exportStar(require("./RelativeDateField"), exports);
9
9
  tslib_1.__exportStar(require("./RelativeDatePicker"), exports);
10
+ tslib_1.__exportStar(require("./RangeDateField"), exports);
11
+ tslib_1.__exportStar(require("./RelativeRangeDatePicker"), exports);
@@ -1,6 +1,6 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { InputBase, Validation, ValueBase } from './inputs';
3
- export interface DateFieldBase<T = DateTime> extends ValueBase<T, T | null>, InputBase, Validation {
3
+ export interface DateFieldBase<T = DateTime> extends ValueBase<T | null>, InputBase, Validation {
4
4
  /** The minimum allowed date that a user may select. */
5
5
  minValue?: DateTime;
6
6
  /** The maximum allowed date that a user may select. */
@@ -11,6 +11,9 @@ export interface DateFieldBase<T = DateTime> extends ValueBase<T, T | null>, Inp
11
11
  format?: string;
12
12
  /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */
13
13
  placeholderValue?: DateTime;
14
- /** */
14
+ /**
15
+ * Which timezone use to show values. Example: 'default', 'system', 'Europe/Amsterdam'.
16
+ * @default The timezone of the `value` or `defaultValue` or `placeholderValue`, 'default' otherwise.
17
+ */
15
18
  timeZone?: string;
16
19
  }
@@ -1,15 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  export interface KeyboardEvents {
3
3
  /** Handler that is called when a key is pressed. */
4
- onKeyDown?: (e: React.KeyboardEvent) => void;
4
+ onKeyDown?(e: React.KeyboardEvent): void;
5
5
  /** Handler that is called when a key is released. */
6
- onKeyUp?: (e: React.KeyboardEvent) => void;
6
+ onKeyUp?(e: React.KeyboardEvent): void;
7
7
  }
8
8
  export interface FocusEvents<Target = Element> {
9
9
  /** Handler that is called when the element receives focus. */
10
- onFocus?: (e: React.FocusEvent<Target>) => void;
10
+ onFocus?(e: React.FocusEvent<Target>): void;
11
11
  /** Handler that is called when the element loses focus. */
12
- onBlur?: (e: React.FocusEvent<Target>) => void;
12
+ onBlur?(e: React.FocusEvent<Target>): void;
13
13
  }
14
14
  export interface FocusableProps<Target = Element> extends FocusEvents<Target> {
15
15
  /** Whether the element should receive focus on render. */
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { TextInputProps as TextInputBaseProps, TextInputPin, TextInputSize, TextInputView } from '@gravity-ui/uikit';
3
2
  export type ValidationState = 'invalid';
4
3
  export interface AccessibilityProps {
@@ -13,22 +12,24 @@ export interface AccessibilityProps {
13
12
  }
14
13
  export interface ValueBase<T, C = T> {
15
14
  /** The current value (controlled). */
16
- value?: T | null;
15
+ value?: T;
17
16
  /** The default value (uncontrolled). */
18
17
  defaultValue?: T;
19
18
  /** Handler that is called when the value changes. */
20
19
  onUpdate?: (value: C) => void;
21
20
  }
22
- export interface Validation {
23
- /** Whether the input should display its "invalid" visual styling */
24
- validationState?: ValidationState;
25
- /** An error message for the field */
26
- errorMessage?: React.ReactNode;
21
+ export interface Validation extends Pick<TextInputBaseProps, 'validationState' | 'errorMessage' | 'errorPlacement'> {
27
22
  }
28
23
  export interface DomProps {
29
24
  /** The element's unique identifier. */
30
25
  id?: string;
31
26
  }
27
+ export interface InputDOMProps {
28
+ /**
29
+ * The name of the input element, used when submitting an HTML form.
30
+ */
31
+ name?: string;
32
+ }
32
33
  export interface InputBase {
33
34
  /**
34
35
  * Whether the field is disabled.
@@ -65,11 +66,11 @@ export interface TextInputExtendProps {
65
66
  /**
66
67
  * User`s node rendered before label and input
67
68
  */
68
- leftContent?: TextInputBaseProps['leftContent'];
69
+ startContent?: TextInputBaseProps['startContent'];
69
70
  /**
70
71
  * User`s node rendered after input and clear button
71
72
  */
72
- rightContent?: TextInputBaseProps['rightContent'];
73
+ endContent?: TextInputBaseProps['endContent'];
73
74
  }
74
75
  export interface RangeValue<T> {
75
76
  /** The start value of the range. */
@@ -1,9 +1,8 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
- interface PlaceholderValueOptions {
2
+ export interface PlaceholderValueOptions {
3
3
  placeholderValue?: DateTime;
4
4
  timeZone?: string;
5
5
  }
6
6
  export declare function createPlaceholderValue({ placeholderValue, timeZone }: PlaceholderValueOptions): DateTime;
7
7
  export declare function isInvalid(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined): boolean;
8
8
  export declare function mergeDateTime(date: DateTime, time: DateTime): DateTime;
9
- export {};
@@ -0,0 +1,2 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ export declare function useDefaultTimeZone(date: DateTime | null | undefined): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDefaultTimeZone = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ function useDefaultTimeZone(date) {
7
+ const defaultTimeZone = date ? date.timeZone() : 'default';
8
+ const [lastValue, setLastValue] = react_1.default.useState(defaultTimeZone);
9
+ if (date && defaultTimeZone !== lastValue) {
10
+ setLastValue(defaultTimeZone);
11
+ }
12
+ const timeZone = date ? defaultTimeZone : lastValue;
13
+ return timeZone;
14
+ }
15
+ exports.useDefaultTimeZone = useDefaultTimeZone;
@@ -0,0 +1,6 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ export interface ValidationResult {
3
+ isInvalid: boolean;
4
+ errors: string[];
5
+ }
6
+ export declare function getValidationResult(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined, isDateUnavailable: ((v: DateTime) => boolean) | undefined, timeZone: string, valueTitle?: string): ValidationResult;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getValidationResult = void 0;
4
+ const i18n_1 = require("./i18n");
5
+ function getValidationResult(value, minValue, maxValue, isDateUnavailable, timeZone, valueTitle = 'Value') {
6
+ const rangeOverflow = value && maxValue && maxValue.isBefore(value);
7
+ const rangeUnderflow = value && minValue && value.isBefore(minValue);
8
+ const isUnavailable = (value && (isDateUnavailable === null || isDateUnavailable === void 0 ? void 0 : isDateUnavailable(value))) || false;
9
+ const isInvalid = rangeOverflow || rangeUnderflow || isUnavailable;
10
+ const errors = [];
11
+ if (isInvalid) {
12
+ if (rangeUnderflow) {
13
+ errors.push((0, i18n_1.i18n)('Value must be {minValue} or later.', {
14
+ minValue: minValue.timeZone(timeZone).format(),
15
+ value: valueTitle,
16
+ }));
17
+ }
18
+ if (rangeOverflow) {
19
+ errors.push((0, i18n_1.i18n)('Value must be {maxValue} or earlier.', {
20
+ maxValue: maxValue.timeZone(timeZone).format(),
21
+ value: valueTitle,
22
+ }));
23
+ }
24
+ if (isUnavailable) {
25
+ errors.push((0, i18n_1.i18n)('Selected date unavailable.'));
26
+ }
27
+ }
28
+ return { isInvalid, errors };
29
+ }
30
+ exports.getValidationResult = getValidationResult;
@@ -0,0 +1,6 @@
1
+ {
2
+ "Value must be {minValue} or later.": "{{value}} must be {{minValue}} or later.",
3
+ "Value must be {maxValue} or earlier.": "{{value}} must be {{maxValue}} or earlier.",
4
+ "Selected date unavailable.": "Selected date unavailable.",
5
+ "Value is required.": "{{value}} is required."
6
+ }
@@ -0,0 +1 @@
1
+ export declare const i18n: (key: "Selected date unavailable." | "Value must be {minValue} or later." | "Value must be {maxValue} or earlier." | "Value is required.", params?: import("@gravity-ui/i18n").Params | undefined) => string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const i18n_1 = require("@gravity-ui/uikit/i18n");
6
+ const cn_1 = require("../../../../utils/cn");
7
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
8
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
9
+ exports.i18n = (0, i18n_1.addComponentKeysets)({ en: en_json_1.default, ru: ru_json_1.default }, `${cn_1.NAMESPACE}validation`);
@@ -0,0 +1,6 @@
1
+ {
2
+ "Value must be {minValue} or later.": "{value} должно ровняться {minValue} или быть позже.",
3
+ "Value must be {maxValue} or earlier.": "{value} должно ровняться {maxValue} или быть раньше.",
4
+ "Selected date unavailable.": "Выбранная дата недоступна.",
5
+ "Value is required.": "{value} обязательно."
6
+ }