@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,18 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { PresetTab } from './utils';
3
+ import './Presets.css';
4
+ export interface PresetProps {
5
+ className?: string;
6
+ onChoosePreset: (start: string, end: string) => void;
7
+ withTime?: boolean;
8
+ minValue?: DateTime;
9
+ size?: 's' | 'm' | 'l' | 'xl';
10
+ presetTabs?: PresetTab[];
11
+ }
12
+ export declare function Presets({ className, size, minValue, withTime, onChoosePreset, presetTabs, }: PresetProps): import("react/jsx-runtime").JSX.Element | null;
13
+ export declare const SIZE_TO_ITEM_HEIGHT: {
14
+ s: number;
15
+ m: number;
16
+ l: number;
17
+ xl: number;
18
+ };
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { List, Tabs } from '@gravity-ui/uikit';
4
+ import { block } from '../../../../utils/cn';
5
+ import { PresetsDoc } from './PresetsDoc';
6
+ import { filterPresetTabs, getDefaultPresetTabs } from './utils';
7
+ import './Presets.css';
8
+ const b = block('relative-range-date-picker-presets');
9
+ export function Presets({ className, size = 'm', minValue, withTime, onChoosePreset, presetTabs, }) {
10
+ var _a, _b;
11
+ const tabs = React.useMemo(() => {
12
+ return filterPresetTabs(presetTabs !== null && presetTabs !== void 0 ? presetTabs : getDefaultPresetTabs({ withTime }), { minValue });
13
+ }, [withTime, minValue, presetTabs]);
14
+ const [activeTabId, setActiveTab] = React.useState((_a = tabs[0]) === null || _a === void 0 ? void 0 : _a.id);
15
+ if (tabs.length === 0) {
16
+ return null;
17
+ }
18
+ const activeTab = (_b = tabs.find((tab) => tab.id === activeTabId)) !== null && _b !== void 0 ? _b : tabs[0];
19
+ if (!activeTab) {
20
+ return null;
21
+ }
22
+ if (activeTab.id !== activeTabId) {
23
+ setActiveTab(activeTab.id);
24
+ }
25
+ return (_jsxs("div", { className: b({ size }, className), children: [_jsxs("div", { className: b('tabs'), children: [_jsx(Tabs, { activeTab: activeTabId, onSelectTab: setActiveTab, items: tabs, size: size === 's' ? 'm' : size }), _jsx(PresetsDoc, { className: b('doc'), size: size })] }), _jsx("div", { className: b('content'), children: _jsx(PresetsList, { presets: activeTab.presets, onChoosePreset: onChoosePreset, size: size }) })] }));
26
+ }
27
+ export const SIZE_TO_ITEM_HEIGHT = {
28
+ s: 28,
29
+ m: 28,
30
+ l: 32,
31
+ xl: 36,
32
+ };
33
+ function PresetsList({ presets, onChoosePreset, size = 'm' }) {
34
+ const ref = React.useRef(null);
35
+ React.useEffect(() => {
36
+ var _a, _b;
37
+ const list = ref.current;
38
+ const container = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.refContainer.current) === null || _b === void 0 ? void 0 : _b.node;
39
+ if (list && container) {
40
+ try {
41
+ container.setAttribute('tabindex', '0');
42
+ container.setAttribute('class', b('list-container'));
43
+ const handleFocus = () => {
44
+ if (list.getActiveItem() === null) {
45
+ list.activateItem(0, true);
46
+ }
47
+ };
48
+ container.addEventListener('focus', handleFocus);
49
+ return () => {
50
+ container.removeEventListener('focus', handleFocus);
51
+ };
52
+ }
53
+ catch (_c) {
54
+ // Oooops
55
+ }
56
+ }
57
+ return undefined;
58
+ }, []);
59
+ return (_jsx(List, { ref: ref, className: b('list'), itemClassName: b('item'), items: presets, filterable: false, virtualized: false, renderItem: (item) => item.title, itemHeight: SIZE_TO_ITEM_HEIGHT[size], onItemClick: (item) => {
60
+ onChoosePreset(item.from, item.to);
61
+ } }));
62
+ }
@@ -0,0 +1,14 @@
1
+ .g-date-relative-range-date-picker-presets-doc__button {
2
+ --g-button-background-color-hover: transparent;
3
+ }
4
+ .g-date-relative-range-date-picker-presets-doc__content {
5
+ --g-popover-max-width: "none";
6
+ }
7
+ .g-date-relative-range-date-picker-presets-doc__table_size_xl {
8
+ font-size: var(--g-text-body-2-font-size);
9
+ line-height: var(--g-text-body-2-line-height);
10
+ font-weight: var(--g-text-body-font-weight);
11
+ }
12
+ .g-date-relative-range-date-picker-presets-doc__table > table {
13
+ width: 100%;
14
+ }
@@ -0,0 +1,7 @@
1
+ import './PresetsDoc.css';
2
+ interface PresetsDocProps {
3
+ className?: string;
4
+ size?: 's' | 'm' | 'l' | 'xl';
5
+ }
6
+ export declare function PresetsDoc({ className, size }: PresetsDocProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { CircleQuestion } from '@gravity-ui/icons';
4
+ import { Button, Icon, Popover, Sheet, Table, useMobile } from '@gravity-ui/uikit';
5
+ import { block } from '../../../../utils/cn';
6
+ import { getButtonSizeForInput } from '../../../utils/getButtonSizeForInput';
7
+ import { i18n } from './i18n';
8
+ import './PresetsDoc.css';
9
+ const b = block('relative-range-date-picker-presets-doc');
10
+ const columns = [
11
+ {
12
+ id: 'title',
13
+ name: () => {
14
+ return i18n('Range');
15
+ },
16
+ },
17
+ {
18
+ id: 'from',
19
+ name: () => {
20
+ return i18n('From');
21
+ },
22
+ },
23
+ {
24
+ id: 'to',
25
+ name: () => {
26
+ return i18n('To');
27
+ },
28
+ },
29
+ ];
30
+ const data = [
31
+ {
32
+ get title() {
33
+ return i18n('Last 5 minutes');
34
+ },
35
+ from: 'now - 5m',
36
+ to: 'now',
37
+ },
38
+ {
39
+ get title() {
40
+ return i18n('From start of day');
41
+ },
42
+ from: 'now/d',
43
+ to: 'now',
44
+ },
45
+ {
46
+ get title() {
47
+ return i18n('This week');
48
+ },
49
+ from: 'now/w',
50
+ to: 'now/w',
51
+ },
52
+ {
53
+ get title() {
54
+ return i18n('From start of week');
55
+ },
56
+ from: 'now/w',
57
+ to: 'now',
58
+ },
59
+ {
60
+ get title() {
61
+ return i18n('Previous month');
62
+ },
63
+ from: 'now - 1M/M',
64
+ to: 'now - 1M/M',
65
+ },
66
+ ];
67
+ function PresetsExamples({ size }) {
68
+ return _jsx(Table, { columns: columns, data: data, className: b('table', { size }) });
69
+ }
70
+ function DesktopDoc({ className, size }) {
71
+ return (_jsx(Popover, { className: b(null, className), tooltipContentClassName: b('content'), hasArrow: false, content: _jsx(PresetsExamples, { size: size }), children: _jsx(Button, { className: b('button'), view: "flat-secondary", size: getButtonSizeForInput(size), children: _jsx(Icon, { data: CircleQuestion }) }) }));
72
+ }
73
+ function MobileDoc({ className, size }) {
74
+ const [open, setOpen] = React.useState(false);
75
+ return (_jsxs("div", { className: b(null, className), children: [_jsx(Button, { className: b('button'), view: "flat-secondary", size: "l", onClick: () => {
76
+ setOpen(true);
77
+ }, children: _jsx(Icon, { data: CircleQuestion }) }), _jsx(Sheet, { visible: open, onClose: () => setOpen(false), children: _jsx(PresetsExamples, { size: size }) })] }));
78
+ }
79
+ export function PresetsDoc({ className, size }) {
80
+ const isMobile = useMobile();
81
+ if (isMobile) {
82
+ return _jsx(MobileDoc, { className: className, size: size });
83
+ }
84
+ return _jsx(DesktopDoc, { className: className, size: size });
85
+ }
@@ -0,0 +1,9 @@
1
+ export interface Preset {
2
+ from: string;
3
+ to: string;
4
+ title: string;
5
+ }
6
+ export declare const DEFAULT_DATE_PRESETS: Preset[];
7
+ export declare const DEFAULT_TIME_PRESETS: Preset[];
8
+ export declare const DEFAULT_OTHERS_PRESETS: Preset[];
9
+ export declare const allPresets: Preset[];
@@ -0,0 +1,183 @@
1
+ import { i18n } from './i18n';
2
+ export const DEFAULT_DATE_PRESETS = [
3
+ {
4
+ from: 'now-1d',
5
+ to: 'now',
6
+ get title() {
7
+ return i18n('Last day');
8
+ },
9
+ },
10
+ {
11
+ from: 'now-3d',
12
+ to: 'now',
13
+ get title() {
14
+ return i18n('Last 3 days');
15
+ },
16
+ },
17
+ {
18
+ from: 'now-1w',
19
+ to: 'now',
20
+ get title() {
21
+ return i18n('Last week');
22
+ },
23
+ },
24
+ {
25
+ from: 'now-1M',
26
+ to: 'now',
27
+ get title() {
28
+ return i18n('Last month');
29
+ },
30
+ },
31
+ {
32
+ from: 'now-3M',
33
+ to: 'now',
34
+ get title() {
35
+ return i18n('Last 3 months');
36
+ },
37
+ },
38
+ {
39
+ from: 'now-6M',
40
+ to: 'now',
41
+ get title() {
42
+ return i18n('Last 6 months');
43
+ },
44
+ },
45
+ {
46
+ from: 'now-1y',
47
+ to: 'now',
48
+ get title() {
49
+ return i18n('Last year');
50
+ },
51
+ },
52
+ {
53
+ from: 'now-3y',
54
+ to: 'now',
55
+ get title() {
56
+ return i18n('Last 3 years');
57
+ },
58
+ },
59
+ ];
60
+ export const DEFAULT_TIME_PRESETS = [
61
+ {
62
+ from: 'now-5m',
63
+ to: 'now',
64
+ get title() {
65
+ return i18n('Last 5 minutes');
66
+ },
67
+ },
68
+ {
69
+ from: 'now-15m',
70
+ to: 'now',
71
+ get title() {
72
+ return i18n('Last 15 minutes');
73
+ },
74
+ },
75
+ {
76
+ from: 'now-30m',
77
+ to: 'now',
78
+ get title() {
79
+ return i18n('Last 30 minutes');
80
+ },
81
+ },
82
+ {
83
+ from: 'now-1h',
84
+ to: 'now',
85
+ get title() {
86
+ return i18n('Last hour');
87
+ },
88
+ },
89
+ {
90
+ from: 'now-3h',
91
+ to: 'now',
92
+ get title() {
93
+ return i18n('Last 3 hours');
94
+ },
95
+ },
96
+ {
97
+ from: 'now-6h',
98
+ to: 'now',
99
+ get title() {
100
+ return i18n('Last 6 hours');
101
+ },
102
+ },
103
+ {
104
+ from: 'now-12h',
105
+ to: 'now',
106
+ get title() {
107
+ return i18n('Last 12 hours');
108
+ },
109
+ },
110
+ ];
111
+ export const DEFAULT_OTHERS_PRESETS = [
112
+ {
113
+ from: 'now/d',
114
+ to: 'now/d',
115
+ get title() {
116
+ return i18n('Today');
117
+ },
118
+ },
119
+ {
120
+ from: 'now-1d/d',
121
+ to: 'now-1d/d',
122
+ get title() {
123
+ return i18n('Yesterday');
124
+ },
125
+ },
126
+ {
127
+ from: 'now-2d/d',
128
+ to: 'now-2d/d',
129
+ get title() {
130
+ return i18n('Day before yesterday');
131
+ },
132
+ },
133
+ {
134
+ from: 'now/w',
135
+ to: 'now/w',
136
+ get title() {
137
+ return i18n('This week');
138
+ },
139
+ },
140
+ {
141
+ from: 'now/M',
142
+ to: 'now/M',
143
+ get title() {
144
+ return i18n('This month');
145
+ },
146
+ },
147
+ {
148
+ from: 'now/y',
149
+ to: 'now/y',
150
+ get title() {
151
+ return i18n('This year');
152
+ },
153
+ },
154
+ {
155
+ from: 'now/d',
156
+ to: 'now',
157
+ get title() {
158
+ return i18n('From start of day');
159
+ },
160
+ },
161
+ {
162
+ from: 'now/w',
163
+ to: 'now',
164
+ get title() {
165
+ return i18n('From start of week');
166
+ },
167
+ },
168
+ {
169
+ from: 'now/M',
170
+ to: 'now',
171
+ get title() {
172
+ return i18n('From start of month');
173
+ },
174
+ },
175
+ {
176
+ from: 'now/y',
177
+ to: 'now',
178
+ get title() {
179
+ return i18n('From start of year');
180
+ },
181
+ },
182
+ ];
183
+ export const allPresets = DEFAULT_TIME_PRESETS.concat(DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS);
@@ -0,0 +1,40 @@
1
+ {
2
+ "Last 5 minutes": "Last 5 minutes",
3
+ "Last 15 minutes": "Last 15 minutes",
4
+ "Last 30 minutes": "Last 30 minutes",
5
+ "Last hour": "Last hour",
6
+ "Last 3 hours": "Last 3 hours",
7
+ "Last 6 hours": "Last 6 hours",
8
+ "Last 12 hours": "Last 12 hours",
9
+ "Last day": "Last day",
10
+ "Last 3 days": "Last 3 days",
11
+ "Last week": "Last week",
12
+ "Last month": "Last month",
13
+ "Last 3 months": "Last 3 months",
14
+ "Last 6 months": "Last 6 months",
15
+ "Last year": "Last year",
16
+ "Last 3 years": "Last 3 years",
17
+ "Today": "Today",
18
+ "Yesterday": "Yesterday",
19
+ "Day before yesterday": "Day before yesterday",
20
+ "This week": "This week",
21
+ "This month": "This month",
22
+ "This year": "This year",
23
+ "From start of day": "From start of day",
24
+ "From start of week": "From start of week",
25
+ "From start of month": "From start of month",
26
+ "From start of year": "From start of year",
27
+ "Previous month": "Previous month",
28
+ "Last {count} {unit}": "Last {{count}} {{unit}}",
29
+ "m": ["minute", "minutes", "minutes"],
30
+ "h": ["hour", "hours", "hours"],
31
+ "d": ["day", "days", "days"],
32
+ "w": ["week", "weeks", "weeks"],
33
+ "M": ["month", "months", "months"],
34
+ "y": ["year", "years", "years"],
35
+ "Main": "Main",
36
+ "Other": "Other",
37
+ "Range": "Range",
38
+ "From": "From",
39
+ "To": "To"
40
+ }
@@ -0,0 +1 @@
1
+ export declare const i18n: (key: "m" | "y" | "M" | "d" | "h" | "w" | "Last 5 minutes" | "Last 15 minutes" | "Last 30 minutes" | "Last hour" | "Last 3 hours" | "Last 6 hours" | "Last 12 hours" | "Last day" | "Last 3 days" | "Last week" | "Last month" | "Last 3 months" | "Last 6 months" | "Last year" | "Last 3 years" | "Today" | "Yesterday" | "Day before yesterday" | "This week" | "This month" | "This year" | "From start of day" | "From start of week" | "From start of month" | "From start of year" | "Previous month" | "Main" | "Other" | "Range" | "From" | "To" | "Last {count} {unit}", params?: import("@gravity-ui/i18n").Params | undefined) => string;
@@ -0,0 +1,5 @@
1
+ import { addComponentKeysets } from '@gravity-ui/uikit/i18n';
2
+ import { NAMESPACE } from '../../../../../utils/cn';
3
+ import en from './en.json';
4
+ import ru from './ru.json';
5
+ export const i18n = addComponentKeysets({ en, ru }, `${NAMESPACE}relative-range-date-picker-presets`);
@@ -0,0 +1,40 @@
1
+ {
2
+ "Last 5 minutes": "Последние 5 минут",
3
+ "Last 15 minutes": "Последние 15 минут",
4
+ "Last 30 minutes": "Последние 30 минут",
5
+ "Last hour": "Последний час",
6
+ "Last 3 hours": "Последние 3 часа",
7
+ "Last 6 hours": "Последние 6 часов",
8
+ "Last 12 hours": "Последние 12 часов",
9
+ "Last day": "Последний день",
10
+ "Last 3 days": "Последние 3 дня",
11
+ "Last week": "Последняя неделя",
12
+ "Last month": "Последний месяц",
13
+ "Last 3 months": "Последние 3 месяца",
14
+ "Last 6 months": "Последние 6 месяцев",
15
+ "Last year": "Последний год",
16
+ "Last 3 years": "Последние 3 года",
17
+ "Today": "Сегодня",
18
+ "Yesterday": "Вчера",
19
+ "Day before yesterday": "Позавчера",
20
+ "This week": "Эта неделя",
21
+ "This month": "Этот месяц",
22
+ "This year": "Этот год",
23
+ "From start of day": "С начала дня",
24
+ "From start of week": "С начала недели",
25
+ "From start of month": "С начала месяца",
26
+ "From start of year": "С начала года",
27
+ "Previous month": "Предыдущий месяц",
28
+ "Last {count} {unit}": "Last {{count}} {{unit}}",
29
+ "m": ["minute", "minutes", "minutes"],
30
+ "h": ["hour", "hours", "hours"],
31
+ "d": ["day", "days", "days"],
32
+ "w": ["week", "weeks", "weeks"],
33
+ "M": ["month", "months", "months"],
34
+ "y": ["year", "years", "years"],
35
+ "Main": "Основные",
36
+ "Other": "Другие",
37
+ "Range": "Период",
38
+ "From": "От",
39
+ "To": "До"
40
+ }
@@ -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,78 @@
1
+ import { dateTimeParse } from '@gravity-ui/date-utils';
2
+ import { DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS, DEFAULT_TIME_PRESETS, allPresets, } from './defaultPresets';
3
+ import { i18n } from './i18n';
4
+ export function getPresetTitle(start, end, presets = allPresets) {
5
+ const startText = start.replace(/\s+/g, '');
6
+ const endText = end.replace(/\s+/g, '');
7
+ for (const preset of presets) {
8
+ if (preset.from === startText && preset.to === endText) {
9
+ return preset.title;
10
+ }
11
+ }
12
+ if (end === 'now') {
13
+ const match = /^now-(\d+)([m|h|d|w|M|y])$/.exec(start);
14
+ if (match) {
15
+ const [, count, unit] = match;
16
+ if (isDateUnit(unit)) {
17
+ return i18n('Last {count} {unit}', {
18
+ count,
19
+ unit: i18n(unit, { count: Number(count) }),
20
+ });
21
+ }
22
+ }
23
+ }
24
+ return startText + ' — ' + endText;
25
+ }
26
+ function isDateUnit(value) {
27
+ return ['m', 'h', 'd', 'w', 'M', 'y'].includes(value);
28
+ }
29
+ export function filterPresets(presets, minValue) {
30
+ return presets.filter((preset) => {
31
+ const from = dateTimeParse(preset.from);
32
+ const to = dateTimeParse(preset.to, { roundUp: true });
33
+ if (!from || !to) {
34
+ return false;
35
+ }
36
+ if (to.isBefore(from)) {
37
+ return false;
38
+ }
39
+ if (minValue && from.isBefore(minValue)) {
40
+ return false;
41
+ }
42
+ return true;
43
+ });
44
+ }
45
+ export function getDefaultPresetTabs({ withTime, minValue, }) {
46
+ const tabs = [];
47
+ const mainTab = {
48
+ id: 'main',
49
+ title: i18n('Main'),
50
+ presets: [],
51
+ };
52
+ const mainPresets = DEFAULT_DATE_PRESETS;
53
+ if (withTime) {
54
+ mainPresets.unshift(...DEFAULT_TIME_PRESETS);
55
+ }
56
+ mainTab.presets = filterPresets(mainPresets, minValue);
57
+ if (mainTab.presets.length > 0) {
58
+ tabs.push(mainTab);
59
+ }
60
+ const otherTab = {
61
+ id: 'other',
62
+ title: i18n('Other'),
63
+ presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),
64
+ };
65
+ if (otherTab.presets.length > 0) {
66
+ tabs.push(otherTab);
67
+ }
68
+ return tabs;
69
+ }
70
+ export function filterPresetTabs(tabs, { minValue } = {}) {
71
+ return tabs.reduce((acc, tab) => {
72
+ const presets = filterPresets(tab.presets, minValue);
73
+ if (presets.length) {
74
+ acc.push(Object.assign(Object.assign({}, tab), { presets }));
75
+ }
76
+ return acc;
77
+ }, []);
78
+ }
@@ -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,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getTimeZonesList } from '@gravity-ui/date-utils';
3
+ import { ChevronRight } from '@gravity-ui/icons';
4
+ import { Button, Icon, Select, Text } from '@gravity-ui/uikit';
5
+ import { block } from '../../../../utils/cn';
6
+ import { getTimeZoneOffset, normalizeTimeZone } from '../../utils';
7
+ import { i18n } from './i18n';
8
+ import './Zones.css';
9
+ const groups = {};
10
+ const zones = getTimeZonesList().reduce((opts, value) => {
11
+ const [groupName] = value.split('/');
12
+ if (groupName) {
13
+ let group = groups[groupName];
14
+ if (!group) {
15
+ group = { label: groupName, options: [] };
16
+ groups[groupName] = group;
17
+ opts.push(group);
18
+ }
19
+ group.options.push({ value });
20
+ }
21
+ return opts;
22
+ }, []);
23
+ zones.unshift({
24
+ value: 'UTC',
25
+ });
26
+ zones.unshift({
27
+ value: 'system',
28
+ get content() {
29
+ return i18n('system');
30
+ },
31
+ });
32
+ zones.unshift({
33
+ value: 'default',
34
+ get content() {
35
+ return i18n('default');
36
+ },
37
+ });
38
+ const b = block('relative-range-date-picker-zones');
39
+ export function Zones(props) {
40
+ const timeZone = normalizeTimeZone(props.value);
41
+ const size = props.isMobile ? 'xl' : props.size;
42
+ return (_jsx(Select, { value: [timeZone], options: zones, size: size, onUpdate: (v) => {
43
+ const tz = v[0];
44
+ if (tz) {
45
+ props.onUpdate(tz);
46
+ }
47
+ }, width: "max", renderControl: (controlProps) => {
48
+ const value = timeZone === 'system' || timeZone === 'default' ? i18n(timeZone) : timeZone;
49
+ return (_jsxs(Button, { onClick: controlProps.onClick, ref: controlProps.ref, view: "flat-secondary", width: "max", pin: "clear-clear", size: size, extraProps: {
50
+ 'aria-haspopup': 'listbox',
51
+ 'aria-expanded': controlProps.open,
52
+ onKeyDown: controlProps.onKeyDown,
53
+ }, className: b('control'), children: [`${value} (${getTimeZoneOffset(timeZone)})`, _jsx(Icon, { className: b('control-icon'), data: ChevronRight, size: props.isMobile ? 20 : 16 })] }));
54
+ }, renderOption: ({ value, content }) => {
55
+ const v = content !== null && content !== void 0 ? content : value;
56
+ return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
57
+ }, filterable: true }));
58
+ }
@@ -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,5 @@
1
+ import { addComponentKeysets } from '@gravity-ui/uikit/i18n';
2
+ import { NAMESPACE } from '../../../../../utils/cn';
3
+ import en from './en.json';
4
+ import ru from './ru.json';
5
+ export const i18n = addComponentKeysets({ en, ru }, `${NAMESPACE}relative-range-date-picker-zones`);
@@ -0,0 +1,4 @@
1
+ {
2
+ "default": "Дефолтная",
3
+ "system": "Браузерное время"
4
+ }