@gravity-ui/date-components 1.6.0 → 2.0.1

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 (265) 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/{esm/components/CalendarBase → cjs/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
  12. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +45 -23
  13. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
  14. package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +25 -14
  15. package/dist/cjs/components/DateField/DateField.d.ts +1 -4
  16. package/dist/cjs/components/DateField/DateField.js +3 -1
  17. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
  18. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +316 -0
  19. package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
  20. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +14 -12
  21. package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +2 -65
  22. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +98 -410
  23. package/dist/cjs/components/DateField/index.d.ts +1 -0
  24. package/dist/cjs/components/DateField/index.js +1 -0
  25. package/dist/cjs/components/DateField/utils.d.ts +10 -1
  26. package/dist/cjs/components/DateField/utils.js +114 -2
  27. package/dist/cjs/components/DatePicker/DatePicker.d.ts +4 -4
  28. package/dist/cjs/components/DatePicker/DatePicker.js +6 -6
  29. package/dist/cjs/components/DatePicker/MobileCalendar.css +6 -6
  30. package/dist/cjs/components/DatePicker/MobileCalendar.js +17 -12
  31. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +5 -16
  32. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
  33. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +71 -56
  34. package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +3 -3
  35. package/dist/cjs/components/RangeCalendar/RangeCalendar.js +4 -4
  36. package/dist/cjs/components/RangeDateField/RangeDateField.css +4 -0
  37. package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +12 -0
  38. package/dist/cjs/components/RangeDateField/RangeDateField.js +25 -0
  39. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
  40. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +227 -0
  41. package/dist/cjs/components/RangeDateField/index.d.ts +2 -0
  42. package/dist/cjs/components/RangeDateField/index.js +5 -0
  43. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
  44. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +9 -0
  45. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
  46. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +42 -0
  47. package/dist/cjs/components/RangeDateField/utils/index.d.ts +3 -0
  48. package/dist/cjs/components/RangeDateField/utils/index.js +6 -0
  49. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +3 -0
  50. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +8 -0
  51. package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  52. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +5 -2
  53. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
  54. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
  55. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
  56. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
  57. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  58. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +13 -2
  59. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
  60. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
  61. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
  62. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
  63. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
  64. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +90 -0
  65. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
  66. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
  67. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +43 -0
  68. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
  69. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
  70. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +9 -0
  71. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
  72. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
  73. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +104 -0
  74. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
  75. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
  76. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +67 -0
  77. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
  78. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
  79. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +90 -0
  80. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
  81. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +186 -0
  82. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
  83. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
  84. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +9 -0
  85. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
  86. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
  87. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +85 -0
  88. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
  89. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
  90. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +62 -0
  91. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
  92. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
  93. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +9 -0
  94. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
  95. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
  96. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +58 -0
  97. package/dist/cjs/components/RelativeRangeDatePicker/i18n/en.json +8 -0
  98. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
  99. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.js +9 -0
  100. package/dist/cjs/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
  101. package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +4 -0
  102. package/dist/cjs/components/RelativeRangeDatePicker/index.js +8 -0
  103. package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +15 -0
  104. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +53 -0
  105. package/dist/cjs/components/index.d.ts +3 -0
  106. package/dist/cjs/components/index.js +2 -0
  107. package/dist/cjs/components/types/datePicker.d.ts +5 -2
  108. package/dist/cjs/components/types/events.d.ts +4 -4
  109. package/dist/cjs/components/types/inputs.d.ts +10 -9
  110. package/dist/cjs/components/utils/dates.d.ts +1 -2
  111. package/dist/cjs/components/utils/useDefaultTimeZone.d.ts +2 -0
  112. package/dist/cjs/components/utils/useDefaultTimeZone.js +15 -0
  113. package/dist/cjs/components/utils/validation/datePicker.d.ts +6 -0
  114. package/dist/cjs/components/utils/validation/datePicker.js +30 -0
  115. package/dist/cjs/components/utils/validation/i18n/en.json +6 -0
  116. package/dist/cjs/components/utils/validation/i18n/index.d.ts +1 -0
  117. package/dist/cjs/components/utils/validation/i18n/index.js +9 -0
  118. package/dist/cjs/components/utils/validation/i18n/ru.json +6 -0
  119. package/dist/esm/components/Calendar/Calendar.d.ts +6 -5
  120. package/dist/esm/components/Calendar/Calendar.js +4 -4
  121. package/dist/esm/components/Calendar/index.d.ts +6 -6
  122. package/dist/esm/components/Calendar/index.js +5 -5
  123. package/dist/esm/components/{CalendarBase → CalendarView}/Calendar.css +9 -6
  124. package/dist/esm/components/{CalendarBase/CalendarBase.d.ts → CalendarView/CalendarView.d.ts} +2 -2
  125. package/dist/esm/components/{CalendarBase/CalendarBase.js → CalendarView/CalendarView.js} +3 -2
  126. package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/types.d.ts +37 -31
  127. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.js +1 -2
  128. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.d.ts +2 -2
  129. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -1
  130. package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
  131. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +46 -24
  132. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
  133. package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +24 -13
  134. package/dist/esm/components/DateField/DateField.d.ts +1 -4
  135. package/dist/esm/components/DateField/DateField.js +4 -2
  136. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
  137. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +311 -0
  138. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
  139. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +14 -12
  140. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +2 -65
  141. package/dist/esm/components/DateField/hooks/useDateFieldState.js +97 -409
  142. package/dist/esm/components/DateField/index.d.ts +1 -0
  143. package/dist/esm/components/DateField/index.js +1 -0
  144. package/dist/esm/components/DateField/utils.d.ts +10 -1
  145. package/dist/esm/components/DateField/utils.js +105 -2
  146. package/dist/esm/components/DatePicker/DatePicker.d.ts +4 -4
  147. package/dist/esm/components/DatePicker/DatePicker.js +6 -6
  148. package/dist/esm/components/DatePicker/MobileCalendar.css +6 -6
  149. package/dist/esm/components/DatePicker/MobileCalendar.js +17 -12
  150. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +5 -16
  151. package/dist/esm/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
  152. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +71 -56
  153. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +3 -3
  154. package/dist/esm/components/RangeCalendar/RangeCalendar.js +4 -4
  155. package/dist/esm/components/RangeDateField/RangeDateField.css +4 -0
  156. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +12 -0
  157. package/dist/esm/components/RangeDateField/RangeDateField.js +21 -0
  158. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
  159. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +222 -0
  160. package/dist/esm/components/RangeDateField/index.d.ts +2 -0
  161. package/dist/esm/components/RangeDateField/index.js +2 -0
  162. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
  163. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +5 -0
  164. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
  165. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +38 -0
  166. package/dist/esm/components/RangeDateField/utils/index.d.ts +3 -0
  167. package/dist/esm/components/RangeDateField/utils/index.js +3 -0
  168. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +3 -0
  169. package/dist/esm/components/RangeDateField/utils/isValidRange.js +4 -0
  170. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  171. package/dist/esm/components/RelativeDateField/RelativeDateField.js +5 -2
  172. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
  173. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
  174. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
  175. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
  176. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  177. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +13 -2
  178. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
  179. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
  180. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
  181. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
  182. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
  183. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +85 -0
  184. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
  185. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
  186. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +39 -0
  187. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
  188. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
  189. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +5 -0
  190. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
  191. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
  192. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +99 -0
  193. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
  194. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
  195. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +62 -0
  196. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
  197. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
  198. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +85 -0
  199. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
  200. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +183 -0
  201. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
  202. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
  203. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +5 -0
  204. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
  205. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
  206. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +78 -0
  207. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
  208. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
  209. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +58 -0
  210. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
  211. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
  212. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +5 -0
  213. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
  214. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
  215. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +53 -0
  216. package/dist/esm/components/RelativeRangeDatePicker/i18n/en.json +8 -0
  217. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
  218. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.js +5 -0
  219. package/dist/esm/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
  220. package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +4 -0
  221. package/dist/esm/components/RelativeRangeDatePicker/index.js +3 -0
  222. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +15 -0
  223. package/dist/esm/components/RelativeRangeDatePicker/utils.js +46 -0
  224. package/dist/esm/components/index.d.ts +3 -0
  225. package/dist/esm/components/index.js +2 -0
  226. package/dist/esm/components/types/datePicker.d.ts +5 -2
  227. package/dist/esm/components/types/events.d.ts +4 -4
  228. package/dist/esm/components/types/inputs.d.ts +10 -9
  229. package/dist/esm/components/utils/dates.d.ts +1 -2
  230. package/dist/esm/components/utils/useDefaultTimeZone.d.ts +2 -0
  231. package/dist/esm/components/utils/useDefaultTimeZone.js +10 -0
  232. package/dist/esm/components/utils/validation/datePicker.d.ts +6 -0
  233. package/dist/esm/components/utils/validation/datePicker.js +26 -0
  234. package/dist/esm/components/utils/validation/i18n/en.json +6 -0
  235. package/dist/esm/components/utils/validation/i18n/index.d.ts +1 -0
  236. package/dist/esm/components/utils/validation/i18n/index.js +5 -0
  237. package/dist/esm/components/utils/validation/i18n/ru.json +6 -0
  238. package/package.json +27 -27
  239. package/dist/cjs/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
  240. package/dist/cjs/components/hooks/useControlledState.d.ts +0 -1
  241. package/dist/cjs/components/hooks/useControlledState.js +0 -28
  242. package/dist/esm/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
  243. package/dist/esm/components/hooks/useControlledState.d.ts +0 -1
  244. package/dist/esm/components/hooks/useControlledState.js +0 -23
  245. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
  246. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
  247. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -0
  248. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
  249. /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +0 -0
  250. /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/en.json +0 -0
  251. /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/index.d.ts +0 -0
  252. /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
  253. /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/ru.json +0 -0
  254. /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
  255. /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.js +0 -0
  256. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
  257. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
  258. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
  259. /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +0 -0
  260. /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/en.json +0 -0
  261. /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/index.d.ts +0 -0
  262. /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
  263. /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/ru.json +0 -0
  264. /package/dist/esm/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
  265. /package/dist/esm/components/{CalendarBase → CalendarView}/utils.js +0 -0
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useRelativeDatePickerState = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
- const DateField_1 = require("../../DateField");
6
+ const uikit_1 = require("@gravity-ui/uikit");
7
7
  const DatePicker_1 = require("../../DatePicker");
8
8
  const RelativeDateField_1 = require("../../RelativeDateField");
9
- const useControlledState_1 = require("../../hooks/useControlledState");
10
9
  function useRelativeDatePickerState(props) {
11
- const [value, setValue] = (0, useControlledState_1.useControlledState)(props.value, props.defaultValue, props.onUpdate);
10
+ var _a;
11
+ const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
12
12
  const [mode, setMode] = react_1.default.useState((value === null || value === void 0 ? void 0 : value.type) === 'relative' ? 'relative' : 'absolute');
13
13
  const [prevValue, setPrevValue] = react_1.default.useState(value);
14
14
  if (value !== prevValue) {
15
15
  setPrevValue(value);
16
- if (value) {
16
+ if (value && value.type !== mode) {
17
17
  setMode(value.type);
18
18
  }
19
19
  }
@@ -35,15 +35,8 @@ function useRelativeDatePickerState(props) {
35
35
  timeZone: props.timeZone,
36
36
  disabled: props.disabled,
37
37
  readOnly: props.readOnly,
38
- });
39
- const dateFieldState = (0, DateField_1.useDateFieldState)({
40
- value: valueDate,
41
- onUpdate: datePickerState.setValue,
42
- format: props.format,
43
- placeholderValue: props.placeholderValue,
44
- timeZone: props.timeZone,
45
- disabled: props.disabled,
46
- readOnly: props.readOnly,
38
+ minValue: props.minValue,
39
+ maxValue: props.maxValue,
47
40
  });
48
41
  const [valueRelative, setValueRelative] = react_1.default.useState((value === null || value === void 0 ? void 0 : value.type) === 'relative' ? value.value : null);
49
42
  if ((value === null || value === void 0 ? void 0 : value.type) === 'relative' && value.value !== valueRelative) {
@@ -60,6 +53,8 @@ function useRelativeDatePickerState(props) {
60
53
  },
61
54
  disabled: props.disabled,
62
55
  readOnly: props.readOnly,
56
+ timeZone: datePickerState.timeZone,
57
+ roundUp: props.roundUp,
63
58
  });
64
59
  if (!value) {
65
60
  if (mode === 'absolute' && valueDate) {
@@ -69,10 +64,12 @@ function useRelativeDatePickerState(props) {
69
64
  setValueRelative(null);
70
65
  }
71
66
  }
72
- const selectedDate = mode === 'relative' ? relativeDateState.parsedDate : datePickerState.dateValue;
67
+ const selectedDate = mode === 'relative'
68
+ ? relativeDateState.parsedDate
69
+ : datePickerState.dateFieldState.displayValue;
73
70
  const [isActive, setActive] = react_1.default.useState(false);
74
71
  return {
75
- value: value !== null && value !== void 0 ? value : null,
72
+ value,
76
73
  setValue(v) {
77
74
  if (props.readOnly || props.disabled) {
78
75
  return;
@@ -97,7 +94,6 @@ function useRelativeDatePickerState(props) {
97
94
  }
98
95
  },
99
96
  datePickerState,
100
- dateFieldState,
101
97
  relativeDateState,
102
98
  selectedDate,
103
99
  isActive,
@@ -0,0 +1,56 @@
1
+ .g-date-relative-range-date-picker {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }
5
+ .g-date-relative-range-date-picker__input_mobile {
6
+ pointer-events: none;
7
+ }
8
+ .g-date-relative-range-date-picker__mobile-trigger {
9
+ --_--g-date-mobile-trigger-clear-width: 0px;
10
+ --_--g-date-mobile-trigger-errors-width: 0px;
11
+ --_--g-date-mobile-trigger-button-width: 24px;
12
+ position: absolute;
13
+ inset: 0;
14
+ inset-inline-end: calc(var(--g-spacing-2) + var(--_--g-date-mobile-trigger-button-width) + var(--_--g-date-mobile-trigger-clear-width) + var(--_--g-date-mobile-trigger-errors-width));
15
+ opacity: 0;
16
+ }
17
+ .g-date-relative-range-date-picker__mobile-trigger_size_s {
18
+ --_--g-date-mobile-trigger-button-width: 20px;
19
+ }
20
+ .g-date-relative-range-date-picker__mobile-trigger_size_l {
21
+ --_--g-date-mobile-trigger-button-width: 28px;
22
+ }
23
+ .g-date-relative-range-date-picker__mobile-trigger_size_xl {
24
+ --_--g-date-mobile-trigger-button-width: 36px;
25
+ }
26
+ .g-date-relative-range-date-picker__mobile-trigger_has-clear {
27
+ --_--g-date-mobile-trigger-clear-width: calc(
28
+ var(--_--g-date-mobile-trigger-button-width) + 2px
29
+ );
30
+ }
31
+ .g-date-relative-range-date-picker__mobile-trigger_has-errors {
32
+ --_--g-date-mobile-trigger-errors-width: calc(
33
+ var(--_--g-date-mobile-trigger-button-width) + 2px
34
+ );
35
+ }
36
+ .g-date-relative-range-date-picker__value-label {
37
+ display: flex;
38
+ width: 100%;
39
+ }
40
+ .g-date-relative-range-date-picker__value-label > div {
41
+ flex: 1 0 0;
42
+ }
43
+ .g-date-relative-range-date-picker__value-label-content {
44
+ display: flex;
45
+ flex-direction: column;
46
+ }
47
+ .g-date-relative-range-date-picker__value-label-tooltip {
48
+ --g-popover-max-width: "none";
49
+ }
50
+ .g-date-relative-range-date-picker__value-label-item, .g-date-relative-range-date-picker__value-label-to, .g-date-relative-range-date-picker__value-label-tz {
51
+ text-align: center;
52
+ }
53
+ .g-date-relative-range-date-picker__value-label-tz {
54
+ margin-block-start: 5px;
55
+ color: var(--g-color-text-hint);
56
+ }
@@ -0,0 +1,27 @@
1
+ import type { DateTime } from '@gravity-ui/date-utils';
2
+ import type { Value } from '../RelativeDatePicker';
3
+ import type { DomProps, InputBase, RangeValue, StyleProps, TextInputProps, Validation } from '../types';
4
+ import type { PresetTab } from './components/Presets/utils';
5
+ import type { RelativeRangeDatePickerStateOptions } from './hooks/useRelativeRangeDatePickerState';
6
+ import './RelativeRangeDatePicker.css';
7
+ export interface RelativeRangeDatePickerProps extends RelativeRangeDatePickerStateOptions, DomProps, InputBase, TextInputProps, Validation, StyleProps {
8
+ /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */
9
+ format?: string;
10
+ /** 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. */
11
+ placeholderValue?: DateTime;
12
+ /** Apply changes with button */
13
+ withApplyButton?: boolean;
14
+ /** Show time zone selector */
15
+ withZonesList?: boolean;
16
+ /** Show relative range presets */
17
+ withPresets?: boolean;
18
+ /** Custom preset tabs */
19
+ presetTabs?: PresetTab[];
20
+ /** Show selected relative values as absolute dates */
21
+ alwaysShowAsAbsolute?: boolean;
22
+ /** */
23
+ getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;
24
+ /** Sets the CSS className for the popup element. */
25
+ popupClassName?: string;
26
+ }
27
+ export declare function RelativeRangeDatePicker(props: RelativeRangeDatePickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelativeRangeDatePicker = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const date_utils_1 = require("@gravity-ui/date-utils");
8
+ const icons_1 = require("@gravity-ui/icons");
9
+ const uikit_1 = require("@gravity-ui/uikit");
10
+ const cn_1 = require("../../utils/cn");
11
+ const getButtonSizeForInput_1 = require("../utils/getButtonSizeForInput");
12
+ const PickerDialog_1 = require("./components/PickerDialog/PickerDialog");
13
+ const useRelativeRangeDatePickerState_1 = require("./hooks/useRelativeRangeDatePickerState");
14
+ const i18n_1 = require("./i18n");
15
+ const utils_1 = require("./utils");
16
+ require("./RelativeRangeDatePicker.css");
17
+ const b = (0, cn_1.block)('relative-range-date-picker');
18
+ function RelativeRangeDatePicker(props) {
19
+ var _a, _b;
20
+ const state = (0, useRelativeRangeDatePickerState_1.useRelativeRangeDatePickerState)(props);
21
+ const isMobile = (0, uikit_1.useMobile)();
22
+ const anchorRef = react_1.default.useRef(null);
23
+ const inputRef = react_1.default.useRef(null);
24
+ const [isActive, setIsActive] = react_1.default.useState(false);
25
+ const [open, setOpen] = react_1.default.useState(false);
26
+ const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
27
+ isDisabled: props.disabled || isMobile,
28
+ onFocusWithinChange: (isFocusedWithin) => {
29
+ if (!isFocusedWithin) {
30
+ setIsActive(false);
31
+ }
32
+ },
33
+ });
34
+ const { alwaysShowAsAbsolute, presetTabs, getRangeTitle } = props;
35
+ const format = (_a = props.format) !== null && _a !== void 0 ? _a : 'L';
36
+ const text = react_1.default.useMemo(() => typeof getRangeTitle === 'function'
37
+ ? getRangeTitle(state.value, state.timeZone)
38
+ : (0, utils_1.getDefaultTitle)({
39
+ value: state.value,
40
+ timeZone: state.timeZone,
41
+ alwaysShowAsAbsolute: alwaysShowAsAbsolute,
42
+ format,
43
+ presets: presetTabs === null || presetTabs === void 0 ? void 0 : presetTabs.flatMap(({ presets }) => presets),
44
+ }), [alwaysShowAsAbsolute, format, getRangeTitle, presetTabs, state.timeZone, state.value]);
45
+ const validationState = props.validationState || (state.isInvalid ? 'invalid' : undefined);
46
+ const errorMessage = (_b = props.errorMessage) !== null && _b !== void 0 ? _b : state.errors.join('\n');
47
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ ref: anchorRef }, focusWithinProps, { className: b(null, props.className), style: props.style, children: [(0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b('value-label'), tooltipContentClassName: b('value-label-tooltip'), disabled: isMobile || open || !state.value, delayOpening: 500, placement: ['right', 'right-start', 'right-end', 'auto'], hasArrow: false, content: (0, jsx_runtime_1.jsx)(ValueLabel, { value: state.value, format: format, timeZone: state.timeZone }), children: (0, jsx_runtime_1.jsx)(uikit_1.TextInput, { controlRef: inputRef, value: text, placeholder: props.placeholder, onUpdate: (v) => {
48
+ if (!props.readOnly && !v) {
49
+ state.setValue(null, 'default');
50
+ }
51
+ }, controlProps: {
52
+ 'aria-haspopup': 'dialog',
53
+ 'aria-expanded': open,
54
+ disabled: isMobile,
55
+ className: b('input', { mobile: isMobile }),
56
+ }, onKeyDown: (e) => {
57
+ if (props.disabled) {
58
+ return;
59
+ }
60
+ if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
61
+ e.preventDefault();
62
+ setOpen(true);
63
+ }
64
+ }, onFocus: () => {
65
+ if (!isActive) {
66
+ setIsActive(true);
67
+ setOpen(true);
68
+ }
69
+ }, validationState: validationState, errorMessage: errorMessage, errorPlacement: props.errorPlacement, pin: props.pin, size: props.size, label: props.label, hasClear: props.hasClear, disabled: props.disabled, endContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "flat-secondary", size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size), disabled: props.disabled, extraProps: {
70
+ 'aria-haspopup': 'dialog',
71
+ 'aria-expanded': open,
72
+ }, onClick: () => {
73
+ setIsActive(true);
74
+ setOpen(!open);
75
+ }, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }) }), isMobile ? ((0, jsx_runtime_1.jsx)("button", { className: b('mobile-trigger', {
76
+ 'has-clear': Boolean(props.hasClear && state.value),
77
+ 'has-errors': state.isInvalid && props.errorPlacement === 'inside',
78
+ size: props.size,
79
+ }), onClick: () => {
80
+ setIsActive(true);
81
+ setOpen(true);
82
+ } })) : null, (0, jsx_runtime_1.jsx)(PickerDialog_1.PickerDialog, { state: state, props: props, open: open, onClose: () => {
83
+ setOpen(false);
84
+ }, anchorRef: anchorRef, isMobile: isMobile, className: props.className })] })));
85
+ }
86
+ exports.RelativeRangeDatePicker = RelativeRangeDatePicker;
87
+ function ValueLabel({ value, format, timeZone }) {
88
+ var _a, _b, _c, _d;
89
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b('value-label-content'), children: [(0, jsx_runtime_1.jsx)("span", { className: b('value-label-item'), children: (_b = (0, date_utils_1.dateTimeParse)((_a = value === null || value === void 0 ? void 0 : value.start) === null || _a === void 0 ? void 0 : _a.value, { timeZone })) === null || _b === void 0 ? void 0 : _b.format(format) }), (0, jsx_runtime_1.jsx)("span", { className: b('value-label-to'), children: (0, i18n_1.i18n)('to') }), (0, jsx_runtime_1.jsx)("span", { className: b('value-label-item'), children: (_d = (0, date_utils_1.dateTimeParse)((_c = value === null || value === void 0 ? void 0 : value.end) === null || _c === void 0 ? void 0 : _c.value, { timeZone, roundUp: true })) === null || _d === void 0 ? void 0 : _d.format(format) }), timeZone && (0, jsx_runtime_1.jsx)("span", { className: b('value-label-tz'), children: timeZone })] }));
90
+ }
@@ -0,0 +1,32 @@
1
+ .g-date-relative-range-date-picker-dialog__content {
2
+ --_--popup-content-padding: var(--g-spacing-2);
3
+ padding: var(--_--popup-content-padding);
4
+ }
5
+ .g-date-relative-range-date-picker-dialog__content_mobile {
6
+ --_--popup-content-padding: var(--g-spacing-5);
7
+ }
8
+ .g-date-relative-range-date-picker-dialog__content:not(.g-date-relative-range-date-picker-dialog__content_mobile) {
9
+ width: 310px;
10
+ }
11
+ .g-date-relative-range-date-picker-dialog__content_size_xl:not(.g-date-relative-range-date-picker-dialog__content_mobile) {
12
+ width: 380px;
13
+ }
14
+ .g-date-relative-range-date-picker-dialog__pickers {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: var(--g-spacing-2);
18
+ }
19
+ .g-date-relative-range-date-picker-dialog__pickers .g-text-input__label {
20
+ width: 40px;
21
+ }
22
+ .g-date-relative-range-date-picker-dialog__content_size_xl .g-date-relative-range-date-picker-dialog__pickers .g-text-input__label {
23
+ width: 50px;
24
+ }
25
+ .g-date-relative-range-date-picker-dialog__apply {
26
+ margin-block-start: var(--g-spacing-2);
27
+ }
28
+ .g-date-relative-range-date-picker-dialog__zone {
29
+ margin-block: var(--g-spacing-2) calc(-1 * var(--_--popup-content-padding));
30
+ margin-inline: calc(-1 * var(--_--popup-content-padding));
31
+ border-block-start: 1px solid var(--g-color-line-generic);
32
+ }
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import type { RelativeRangeDatePickerProps } from '../../RelativeRangeDatePicker';
3
+ import type { RelativeRangeDatePickerState } from '../../hooks/useRelativeRangeDatePickerState';
4
+ import './PickerDialog.css';
5
+ export interface PickerDialogProps {
6
+ className?: string;
7
+ state: RelativeRangeDatePickerState;
8
+ props: RelativeRangeDatePickerProps;
9
+ open: boolean;
10
+ isMobile?: boolean;
11
+ anchorRef?: React.RefObject<HTMLElement>;
12
+ onClose: () => void;
13
+ }
14
+ export declare function PickerDialog({ props, state, open, onClose, isMobile, anchorRef, className, }: PickerDialogProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PickerDialog = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const date_utils_1 = require("@gravity-ui/date-utils");
6
+ const uikit_1 = require("@gravity-ui/uikit");
7
+ const cn_1 = require("../../../../utils/cn");
8
+ const RelativeDatePicker_1 = require("../../../RelativeDatePicker");
9
+ const Presets_1 = require("../Presets/Presets");
10
+ const Zones_1 = require("../Zones/Zones");
11
+ const i18n_1 = require("./i18n");
12
+ const useRelativeRangeDatePickerDialogState_1 = require("./useRelativeRangeDatePickerDialogState");
13
+ require("./PickerDialog.css");
14
+ const b = (0, cn_1.block)('relative-range-date-picker-dialog');
15
+ function PickerDialog({ props, state, open, onClose, isMobile, anchorRef, className, }) {
16
+ if (isMobile) {
17
+ return ((0, jsx_runtime_1.jsx)(uikit_1.Sheet, { visible: open, onClose: onClose, contentClassName: b('content', { mobile: true, size: 'xl' }, className), children: (0, jsx_runtime_1.jsx)(DialogContent, Object.assign({}, props, { size: "xl", state: state, onApply: onClose })) }));
18
+ }
19
+ return ((0, jsx_runtime_1.jsx)(uikit_1.Popup, { open: open, onClose: onClose, role: "dialog", anchorRef: anchorRef, contentClassName: b('content', { size: props.size }, className), focusTrap: true, restoreFocus: true, children: (0, jsx_runtime_1.jsx)(DialogContent, Object.assign({}, props, { state: state, onApply: onClose })) }));
20
+ }
21
+ exports.PickerDialog = PickerDialog;
22
+ function DialogContent(props) {
23
+ var _a, _b, _c, _d, _e, _f, _g;
24
+ const state = (0, useRelativeRangeDatePickerDialogState_1.useRelativeRangeDatePickerDialogState)(props.state, props);
25
+ const placeholderValue = ((_a = props.placeholderValue) === null || _a === void 0 ? void 0 : _a.timeZone(props.state.timeZone)) ||
26
+ (0, date_utils_1.dateTime)({ timeZone: props.state.timeZone });
27
+ const fieldProps = {
28
+ timeZone: props.state.timeZone,
29
+ format: props.format,
30
+ minValue: props.minValue,
31
+ maxValue: props.maxValue,
32
+ hasClear: props.allowNullableValues,
33
+ readOnly: props.readOnly,
34
+ size: props.size,
35
+ errorPlacement: 'inside',
36
+ };
37
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: b('pickers'), children: [(0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { validationState: ((_b = state.startValidation) === null || _b === void 0 ? void 0 : _b.isInvalid) ? 'invalid' : undefined, errorMessage: ((_d = (_c = state.startValidation) === null || _c === void 0 ? void 0 : _c.errors) === null || _d === void 0 ? void 0 : _d.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: placeholderValue.startOf('day'), label: (0, i18n_1.i18n)('From'), value: state.start, onUpdate: state.setStart })), (0, jsx_runtime_1.jsx)(RelativeDatePicker_1.RelativeDatePicker, Object.assign({}, fieldProps, { validationState: ((_e = state.endValidation) === null || _e === void 0 ? void 0 : _e.isInvalid) ? 'invalid' : undefined, errorMessage: ((_g = (_f = state.endValidation) === null || _f === void 0 ? void 0 : _f.errors) === null || _g === void 0 ? void 0 : _g.join('\n')) || (0, i18n_1.i18n)('Value is incorrect.'), placeholderValue: placeholderValue.endOf('day'), label: (0, i18n_1.i18n)('To'), value: state.end, onUpdate: state.setEnd, roundUp: true }))] }), props.withApplyButton && !props.readOnly ? ((0, jsx_runtime_1.jsx)(uikit_1.Button, { disabled: state.isInvalid, size: props.size, onClick: () => {
38
+ state.applyValue();
39
+ props.onApply();
40
+ }, className: b('apply'), width: "max", children: (0, i18n_1.i18n)('Apply') })) : null, props.withPresets && !props.readOnly ? ((0, jsx_runtime_1.jsx)(Presets_1.Presets, { size: props.size, presetTabs: props.presetTabs, onChoosePreset: (start, end) => {
41
+ state.setRange({ type: 'relative', value: start }, { type: 'relative', value: end });
42
+ }, minValue: props.minValue })) : null, props.withZonesList ? ((0, jsx_runtime_1.jsx)("div", { className: b('zone'), children: (0, jsx_runtime_1.jsx)(Zones_1.Zones, { value: state.timeZone, onUpdate: state.setTimeZone, disabled: props.readOnly, size: props.size }) })) : null] }));
43
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "Value is incorrect.": "Value is incorrect.",
3
+ "Value is required.": "Value is required.",
4
+ "\"From\" can't be after \"To\".": "\"From\" can't be after \"To\".",
5
+ "From": "From",
6
+ "To": "To",
7
+ "Apply": "Apply"
8
+ }
@@ -0,0 +1 @@
1
+ export declare const i18n: (key: "Value is required." | "\"From\" can't be after \"To\"." | "From" | "To" | "Value is incorrect." | "Apply", 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-dialog`);
@@ -0,0 +1,8 @@
1
+ {
2
+ "Value is incorrect.": "Значение некорректно.",
3
+ "Value is required.": "Value is required.",
4
+ "\"From\" can't be after \"To\".": "Значение «От» не может быть позже чем «До».",
5
+ "From": "От",
6
+ "To": "Дo",
7
+ "Apply": "Применить"
8
+ }
@@ -0,0 +1,16 @@
1
+ import type { Value } from '../../../RelativeDatePicker';
2
+ import type { RelativeRangeDatePickerProps } from '../../RelativeRangeDatePicker';
3
+ import type { RelativeRangeDatePickerState } from '../../hooks/useRelativeRangeDatePickerState';
4
+ export declare function useRelativeRangeDatePickerDialogState(state: RelativeRangeDatePickerState, props: RelativeRangeDatePickerProps): {
5
+ start: Value | null;
6
+ end: Value | null;
7
+ timeZone: string;
8
+ setStart: (newValue: Value | null) => void;
9
+ setEnd: (newValue: Value | null) => void;
10
+ setRange: (newStart: Value, newEnd: Value) => void;
11
+ setTimeZone: (newTimeZone: string) => void;
12
+ applyValue: () => void;
13
+ isInvalid: boolean;
14
+ startValidation: import("../../../utils/validation/datePicker").ValidationResult | undefined;
15
+ endValidation: import("../../../utils/validation/datePicker").ValidationResult | undefined;
16
+ };
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRelativeRangeDatePickerDialogState = 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 datePicker_1 = require("../../../utils/validation/datePicker");
8
+ const i18n_1 = require("./i18n");
9
+ function useRelativeRangeDatePickerDialogState(state, props) {
10
+ var _a, _b, _c, _d;
11
+ const { withApplyButton, allowNullableValues } = props;
12
+ const [start, setStart] = react_1.default.useState((_b = (_a = state.value) === null || _a === void 0 ? void 0 : _a.start) !== null && _b !== void 0 ? _b : null);
13
+ const [end, setEnd] = react_1.default.useState((_d = (_c = state.value) === null || _c === void 0 ? void 0 : _c.end) !== null && _d !== void 0 ? _d : null);
14
+ const [innerTimeZone, setTimeZone] = react_1.default.useState(state.timeZone);
15
+ const timeZone = withApplyButton ? innerTimeZone : state.timeZone;
16
+ function setStartValue(newValue) {
17
+ setStart(newValue);
18
+ if (!withApplyButton) {
19
+ state.setValue(getRangeValue(newValue, end, Object.assign(Object.assign({}, props), { timeZone })), timeZone);
20
+ }
21
+ }
22
+ function setEndValue(newValue) {
23
+ setEnd(newValue);
24
+ if (!withApplyButton) {
25
+ state.setValue(getRangeValue(start, newValue, Object.assign(Object.assign({}, props), { timeZone })), timeZone);
26
+ }
27
+ }
28
+ function setTimeZoneValue(newTimeZone) {
29
+ setTimeZone(newTimeZone);
30
+ if (!withApplyButton) {
31
+ state.setValue(getRangeValue(start, end, Object.assign(Object.assign({}, props), { timeZone: newTimeZone })), newTimeZone);
32
+ }
33
+ }
34
+ function setRange(newStart, newEnd) {
35
+ setStart(newStart);
36
+ setEnd(newEnd);
37
+ if (!withApplyButton) {
38
+ state.setValue(getRangeValue(newStart, newEnd, Object.assign(Object.assign({}, props), { timeZone })), timeZone);
39
+ }
40
+ }
41
+ function applyValue() {
42
+ state.setValue(getRangeValue(start, end, Object.assign(Object.assign({}, props), { timeZone })), timeZone);
43
+ }
44
+ const validation = react_1.default.useMemo(() => getRangeValidationResult(start, end, allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone), [
45
+ allowNullableValues,
46
+ end,
47
+ props.isDateUnavailable,
48
+ props.maxValue,
49
+ props.minValue,
50
+ start,
51
+ timeZone,
52
+ ]);
53
+ return {
54
+ start,
55
+ end,
56
+ timeZone,
57
+ setStart: setStartValue,
58
+ setEnd: setEndValue,
59
+ setRange,
60
+ setTimeZone: setTimeZoneValue,
61
+ applyValue,
62
+ isInvalid: validation.isInvalid,
63
+ startValidation: validation.startValidationResult,
64
+ endValidation: validation.endValidationResult,
65
+ };
66
+ }
67
+ exports.useRelativeRangeDatePickerDialogState = useRelativeRangeDatePickerDialogState;
68
+ function getRangeValue(start, end, options = {}) {
69
+ var _a;
70
+ if (!start && !end) {
71
+ return null;
72
+ }
73
+ const { isInvalid } = getRangeValidationResult(start, end, options.allowNullableValues, options.minValue, options.maxValue, options.isDateUnavailable, (_a = options.timeZone) !== null && _a !== void 0 ? _a : 'default');
74
+ if (isInvalid) {
75
+ return null;
76
+ }
77
+ return { start, end };
78
+ }
79
+ function getRangeValidationResult(start, end, allowNullableValues, minValue, maxValue, isDateUnavailable, timeZone) {
80
+ if (!start && !end) {
81
+ return { isInvalid: false };
82
+ }
83
+ const startDate = start ? (0, date_utils_1.dateTimeParse)(start.value, { timeZone }) : null;
84
+ const endDate = end ? (0, date_utils_1.dateTimeParse)(end.value, { timeZone, roundUp: true }) : null;
85
+ const startValidationResult = (0, datePicker_1.getValidationResult)(startDate, minValue, maxValue, isDateUnavailable, timeZone);
86
+ if (!startDate && !allowNullableValues) {
87
+ startValidationResult.isInvalid = true;
88
+ startValidationResult.errors.push((0, i18n_1.i18n)('Value is required.'));
89
+ }
90
+ const endValidationResult = (0, datePicker_1.getValidationResult)(endDate, minValue, maxValue, isDateUnavailable, timeZone);
91
+ if (!endDate && !allowNullableValues) {
92
+ endValidationResult.isInvalid = true;
93
+ endValidationResult.errors.push((0, i18n_1.i18n)('Value is required.'));
94
+ }
95
+ if (startDate && endDate && endDate.isBefore(startDate)) {
96
+ startValidationResult.isInvalid = true;
97
+ startValidationResult.errors.push((0, i18n_1.i18n)(`"From" can't be after "To".`));
98
+ }
99
+ return {
100
+ isInvalid: startValidationResult.isInvalid || endValidationResult.isInvalid,
101
+ startValidationResult,
102
+ endValidationResult,
103
+ };
104
+ }
@@ -0,0 +1,26 @@
1
+ .g-date-relative-range-date-picker-presets__tabs {
2
+ --g-tabs-border-width: 0;
3
+ display: flex;
4
+ align-items: center;
5
+ gap: var(--g-spacing-2);
6
+ box-shadow: inset 0 -1px var(--g-color-line-generic);
7
+ }
8
+ .g-date-relative-range-date-picker-presets__list-container {
9
+ outline: none;
10
+ }
11
+ .g-date-relative-range-date-picker-presets__doc {
12
+ margin-inline-start: auto;
13
+ }
14
+ .g-date-relative-range-date-picker-presets__content {
15
+ overflow: auto;
16
+ height: 128px;
17
+ }
18
+ .g-date-relative-range-date-picker-presets_size_l .g-date-relative-range-date-picker-presets__content {
19
+ height: 144px;
20
+ }
21
+ .g-date-relative-range-date-picker-presets_size_xl .g-date-relative-range-date-picker-presets__content {
22
+ height: 162px;
23
+ font-size: var(--g-text-body-2-font-size);
24
+ line-height: var(--g-text-body-2-line-height);
25
+ font-weight: var(--g-text-body-font-weight);
26
+ }
@@ -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,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SIZE_TO_ITEM_HEIGHT = exports.Presets = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const uikit_1 = require("@gravity-ui/uikit");
8
+ const cn_1 = require("../../../../utils/cn");
9
+ const PresetsDoc_1 = require("./PresetsDoc");
10
+ const utils_1 = require("./utils");
11
+ require("./Presets.css");
12
+ const b = (0, cn_1.block)('relative-range-date-picker-presets');
13
+ function Presets({ className, size = 'm', minValue, withTime, onChoosePreset, presetTabs, }) {
14
+ var _a, _b;
15
+ const tabs = react_1.default.useMemo(() => {
16
+ return (0, utils_1.filterPresetTabs)(presetTabs !== null && presetTabs !== void 0 ? presetTabs : (0, utils_1.getDefaultPresetTabs)({ withTime }), { minValue });
17
+ }, [withTime, minValue, presetTabs]);
18
+ const [activeTabId, setActiveTab] = react_1.default.useState((_a = tabs[0]) === null || _a === void 0 ? void 0 : _a.id);
19
+ if (tabs.length === 0) {
20
+ return null;
21
+ }
22
+ const activeTab = (_b = tabs.find((tab) => tab.id === activeTabId)) !== null && _b !== void 0 ? _b : tabs[0];
23
+ if (!activeTab) {
24
+ return null;
25
+ }
26
+ if (activeTab.id !== activeTabId) {
27
+ setActiveTab(activeTab.id);
28
+ }
29
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b({ size }, className), children: [(0, jsx_runtime_1.jsxs)("div", { className: b('tabs'), children: [(0, jsx_runtime_1.jsx)(uikit_1.Tabs, { activeTab: activeTabId, onSelectTab: setActiveTab, items: tabs, size: size === 's' ? 'm' : size }), (0, jsx_runtime_1.jsx)(PresetsDoc_1.PresetsDoc, { className: b('doc'), size: size })] }), (0, jsx_runtime_1.jsx)("div", { className: b('content'), children: (0, jsx_runtime_1.jsx)(PresetsList, { presets: activeTab.presets, onChoosePreset: onChoosePreset, size: size }) })] }));
30
+ }
31
+ exports.Presets = Presets;
32
+ exports.SIZE_TO_ITEM_HEIGHT = {
33
+ s: 28,
34
+ m: 28,
35
+ l: 32,
36
+ xl: 36,
37
+ };
38
+ function PresetsList({ presets, onChoosePreset, size = 'm' }) {
39
+ const ref = react_1.default.useRef(null);
40
+ react_1.default.useEffect(() => {
41
+ var _a, _b;
42
+ const list = ref.current;
43
+ const container = (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.refContainer.current) === null || _b === void 0 ? void 0 : _b.node;
44
+ if (list && container) {
45
+ try {
46
+ container.setAttribute('tabindex', '0');
47
+ container.setAttribute('class', b('list-container'));
48
+ const handleFocus = () => {
49
+ if (list.getActiveItem() === null) {
50
+ list.activateItem(0, true);
51
+ }
52
+ };
53
+ container.addEventListener('focus', handleFocus);
54
+ return () => {
55
+ container.removeEventListener('focus', handleFocus);
56
+ };
57
+ }
58
+ catch (_c) {
59
+ // Oooops
60
+ }
61
+ }
62
+ return undefined;
63
+ }, []);
64
+ return ((0, jsx_runtime_1.jsx)(uikit_1.List, { ref: ref, className: b('list'), itemClassName: b('item'), items: presets, filterable: false, virtualized: false, renderItem: (item) => item.title, itemHeight: exports.SIZE_TO_ITEM_HEIGHT[size], onItemClick: (item) => {
65
+ onChoosePreset(item.from, item.to);
66
+ } }));
67
+ }
@@ -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 {};