@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
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cleanString = exports.splitFormatIntoSections = exports.setSegment = exports.addSegment = exports.getDurationUnitFromSectionType = exports.getSectionValue = exports.getSectionLimits = exports.expandFormat = void 0;
3
+ exports.useFormatSections = exports.isAllSegmentsValid = exports.parseDateFromString = exports.formatSections = exports.getCurrentEditableSectionIndex = exports.toEditableSection = exports.isEditableSection = exports.getEditableSections = exports.cleanString = exports.splitFormatIntoSections = exports.setSegment = exports.addSegment = exports.getDurationUnitFromSectionType = exports.getSectionValue = exports.getSectionLimits = exports.expandFormat = exports.EDITABLE_SEGMENTS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
4
6
  const date_utils_1 = require("@gravity-ui/date-utils");
7
+ const dates_1 = require("../utils/dates");
5
8
  const i18n_1 = require("./i18n");
9
+ exports.EDITABLE_SEGMENTS = {
10
+ year: true,
11
+ month: true,
12
+ day: true,
13
+ hour: true,
14
+ minute: true,
15
+ second: true,
16
+ dayPeriod: true,
17
+ weekday: true,
18
+ };
6
19
  function expandFormat(format) {
7
20
  const localeFormats = date_utils_1.settings.getLocaleData().formats;
8
21
  const getShortLocalizedFormatFromLongLocalizedFormat = (formatBis) => formatBis.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (_, escapeSequence, localizedFormat) => escapeSequence || localizedFormat.slice(1));
@@ -320,7 +333,7 @@ function splitFormatIntoSections(format) {
320
333
  let isSeparator = false;
321
334
  let isInEscapeBoundary = false;
322
335
  for (let i = 0; i < expandedFormat.length; i++) {
323
- const char = expandedFormat[i];
336
+ const char = expandedFormat[i] || '';
324
337
  if (isInEscapeBoundary) {
325
338
  if (char === escapedCharacters.end) {
326
339
  isInEscapeBoundary = false;
@@ -419,3 +432,102 @@ function cleanString(dirtyString) {
419
432
  return dirtyString.replace(/[\u2066\u2067\u2068\u2069]/g, '');
420
433
  }
421
434
  exports.cleanString = cleanString;
435
+ function getEditableSections(sections, value, validSegments) {
436
+ let position = 1;
437
+ const newSections = [];
438
+ let previousEditableSection = -1;
439
+ for (let i = 0; i < sections.length; i++) {
440
+ const section = sections[i];
441
+ if (!section) {
442
+ continue;
443
+ }
444
+ const newSection = toEditableSection(section, value, validSegments, position, previousEditableSection);
445
+ newSections.push(newSection);
446
+ if (isEditableSection(section)) {
447
+ for (let j = Math.max(0, previousEditableSection); j <= i; j++) {
448
+ const prevSection = newSections[j];
449
+ if (prevSection) {
450
+ prevSection.nextEditableSection = i;
451
+ if (prevSection.previousEditableSection === -1) {
452
+ prevSection.previousEditableSection = i;
453
+ }
454
+ }
455
+ }
456
+ previousEditableSection = i;
457
+ }
458
+ position += newSection.textValue.length;
459
+ }
460
+ return newSections;
461
+ }
462
+ exports.getEditableSections = getEditableSections;
463
+ function isEditableSection(section) {
464
+ var _a;
465
+ return (_a = exports.EDITABLE_SEGMENTS[section.type]) !== null && _a !== void 0 ? _a : false;
466
+ }
467
+ exports.isEditableSection = isEditableSection;
468
+ function toEditableSection(section, value, validSegments, position, previousEditableSection) {
469
+ const isEditable = isEditableSection(section);
470
+ let renderedValue = section.placeholder;
471
+ if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {
472
+ renderedValue = value.format(section.format);
473
+ if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {
474
+ renderedValue = renderedValue.padStart(section.placeholder.length, '0');
475
+ }
476
+ }
477
+ // use bidirectional context to allow the browser autodetect text direction
478
+ renderedValue = '\u2068' + renderedValue + '\u2069';
479
+ const sectionLength = renderedValue.length;
480
+ const newSection = Object.assign(Object.assign(Object.assign({}, section), { value: getSectionValue(section, value), textValue: renderedValue, start: position, end: position + sectionLength, modified: false, previousEditableSection, nextEditableSection: previousEditableSection }), getSectionLimits(section, value));
481
+ return newSection;
482
+ }
483
+ exports.toEditableSection = toEditableSection;
484
+ function getCurrentEditableSectionIndex(sections, selectedSections) {
485
+ const currentIndex = selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;
486
+ const section = sections[currentIndex];
487
+ if (section && !exports.EDITABLE_SEGMENTS[section.type]) {
488
+ return section.nextEditableSection;
489
+ }
490
+ return section ? currentIndex : -1;
491
+ }
492
+ exports.getCurrentEditableSectionIndex = getCurrentEditableSectionIndex;
493
+ function formatSections(sections) {
494
+ // use ltr direction context to get predictable navigation inside input
495
+ return '\u2066' + sections.map((s) => s.textValue).join('') + '\u2069';
496
+ }
497
+ exports.formatSections = formatSections;
498
+ function parseDate(options) {
499
+ let date = (0, date_utils_1.dateTime)(options);
500
+ if (!(0, date_utils_1.isValid)(date)) {
501
+ date = (0, date_utils_1.dateTime)(Object.assign(Object.assign({}, options), { format: undefined }));
502
+ }
503
+ return date;
504
+ }
505
+ function isDateStringWithTimeZone(str) {
506
+ return /z$/i.test(str) || /[+-]\d\d:\d\d$/.test(str);
507
+ }
508
+ function parseDateFromString(str, format, timeZone) {
509
+ let date = parseDate({ input: str, format, timeZone });
510
+ if ((0, date_utils_1.isValid)(date)) {
511
+ if (timeZone && !isDateStringWithTimeZone(str)) {
512
+ const time = parseDate({ input: str, format });
513
+ date = (0, dates_1.mergeDateTime)(date, time);
514
+ }
515
+ }
516
+ return date;
517
+ }
518
+ exports.parseDateFromString = parseDateFromString;
519
+ function isAllSegmentsValid(allSegments, validSegments) {
520
+ return Object.keys(allSegments).every((key) => validSegments[key]);
521
+ }
522
+ exports.isAllSegmentsValid = isAllSegmentsValid;
523
+ function useFormatSections(format) {
524
+ const usedFormat = format;
525
+ const [sections, setSections] = react_1.default.useState(() => splitFormatIntoSections(usedFormat));
526
+ const [previousFormat, setFormat] = react_1.default.useState(usedFormat);
527
+ if (usedFormat !== previousFormat) {
528
+ setFormat(usedFormat);
529
+ setSections(splitFormatIntoSections(usedFormat));
530
+ }
531
+ return sections;
532
+ }
533
+ exports.useFormatSections = useFormatSections;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { type CalendarProps } from '../Calendar';
3
- import type { AccessibilityProps, DateFieldBase, DomProps, FocusableProps, KeyboardEvents, StyleProps, TextInputProps } from '../types';
2
+ import type { CalendarProps } from '../Calendar';
3
+ import type { AccessibilityProps, DateFieldBase, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, StyleProps, TextInputProps } from '../types';
4
4
  import './DatePicker.css';
5
- export interface DatePickerProps extends DateFieldBase, TextInputProps, FocusableProps, KeyboardEvents, DomProps, StyleProps, AccessibilityProps {
5
+ export interface DatePickerProps extends DateFieldBase, TextInputProps, FocusableProps, KeyboardEvents, DomProps, InputDOMProps, StyleProps, AccessibilityProps {
6
6
  children?: (props: CalendarProps) => React.ReactNode;
7
7
  }
8
- export declare function DatePicker({ value, defaultValue, onUpdate, className, ...props }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function DatePicker({ className, ...props }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
@@ -9,18 +9,20 @@ const uikit_1 = require("@gravity-ui/uikit");
9
9
  const Calendar_1 = require("../Calendar");
10
10
  const DateField_1 = require("../DateField");
11
11
  const MobileCalendar_1 = require("./MobileCalendar");
12
+ const StubButton_1 = require("./StubButton");
12
13
  const useDatePickerProps_1 = require("./hooks/useDatePickerProps");
13
14
  const useDatePickerState_1 = require("./hooks/useDatePickerState");
14
15
  const utils_1 = require("./utils");
15
16
  require("./DatePicker.css");
16
17
  function DatePicker(_a) {
17
- var { value, defaultValue, onUpdate, className } = _a, props = tslib_1.__rest(_a, ["value", "defaultValue", "onUpdate", "className"]);
18
+ var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
18
19
  const anchorRef = react_1.default.useRef(null);
19
- const state = (0, useDatePickerState_1.useDatePickerState)(Object.assign(Object.assign({}, props), { value,
20
- defaultValue,
21
- onUpdate }));
20
+ const state = (0, useDatePickerState_1.useDatePickerState)(props);
22
21
  const { groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps } = (0, useDatePickerProps_1.useDatePickerProps)(state, props);
23
- const [isMobile] = (0, uikit_1.useMobile)();
24
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, utils_1.b)(null, className) }, groupProps, { children: [isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendar, { props: props, state: state })) : ((0, jsx_runtime_1.jsx)("div", { ref: anchorRef, className: (0, utils_1.b)('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorRef: anchorRef }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.b)('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.b)('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })) })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: (0, utils_1.b)('field', { mobile: isMobile }), hasClear: !isMobile && fieldProps.hasClear, rightContent: isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendarIcon, { props: props, state: state })) : ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))) }))] })));
22
+ const isMobile = (0, uikit_1.useMobile)();
23
+ const isOnlyTime = state.hasTime && !state.hasDate;
24
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, utils_1.b)(null, className) }, groupProps, { children: [isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendar, { props: props, state: state })) : (!isOnlyTime && ((0, jsx_runtime_1.jsx)("div", { ref: anchorRef, className: (0, utils_1.b)('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorRef: anchorRef }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.b)('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.b)('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })) }))), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: (0, utils_1.b)('field', { mobile: isMobile }), hasClear: !isMobile && fieldProps.hasClear, endContent: (0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isMobile && !isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))), !isMobile && isOnlyTime && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: icons_1.Clock })), isMobile && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: isOnlyTime ? icons_1.Clock : icons_1.Calendar }))] }) })), (0, jsx_runtime_1.jsx)("input", { type: "text", hidden: true, name: props.name, value: state.value ? state.value.toISOString() : '',
25
+ // Ignore React warning
26
+ onChange: () => { } })] })));
25
27
  }
26
28
  exports.DatePicker = DatePicker;
@@ -1,35 +1,10 @@
1
1
  .g-date-mobile-calendar {
2
- position: relative;
3
- display: inline-block;
4
- width: 24px;
5
- height: 24px;
6
- }
7
- .g-date-mobile-calendar_size_xs {
8
- width: 20px;
9
- height: 20px;
10
- }
11
- .g-date-mobile-calendar_size_m {
12
- width: 28px;
13
- height: 28px;
14
- }
15
- .g-date-mobile-calendar_size_l {
16
- width: 36px;
17
- height: 36px;
18
- }
19
- .g-date-mobile-calendar__button {
20
- position: absolute;
21
- inset: 0;
22
- display: flex;
23
- justify-content: center;
24
- align-items: center;
25
- }
26
- .g-date-mobile-calendar__input {
27
2
  position: absolute;
28
3
  z-index: 1;
29
- top: 0;
30
- left: 0;
4
+ inset-block-start: 0;
5
+ inset-inline-start: 0;
31
6
  box-sizing: border-box;
32
- width: 100%;
7
+ min-width: 100%;
33
8
  height: 100%;
34
9
  margin: 0;
35
10
  padding: 0;
@@ -37,11 +12,11 @@
37
12
  opacity: 0;
38
13
  border: none;
39
14
  }
40
- .g-date-mobile-calendar__input::-webkit-calendar-picker-indicator {
15
+ .g-date-mobile-calendar::-webkit-calendar-picker-indicator {
41
16
  position: absolute;
42
- top: 0;
43
- left: 0;
44
- width: 100%;
17
+ inset-block-start: 0;
18
+ inset-inline-start: 0;
19
+ min-width: 100%;
45
20
  height: 100%;
46
21
  margin: 0;
47
22
  padding: 0;
@@ -6,9 +6,4 @@ interface MobileCalendarProps {
6
6
  state: DatePickerState;
7
7
  }
8
8
  export declare function MobileCalendar({ props, state }: MobileCalendarProps): import("react/jsx-runtime").JSX.Element;
9
- interface MobileCalendarIconProps {
10
- props: DatePickerProps;
11
- state: DatePickerState;
12
- }
13
- export declare function MobileCalendarIcon({ props }: MobileCalendarIconProps): import("react/jsx-runtime").JSX.Element;
14
9
  export {};
@@ -1,16 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MobileCalendarIcon = exports.MobileCalendar = void 0;
3
+ exports.MobileCalendar = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const date_utils_1 = require("@gravity-ui/date-utils");
6
- const icons_1 = require("@gravity-ui/icons");
7
- const uikit_1 = require("@gravity-ui/uikit");
8
6
  const cn_1 = require("../../utils/cn");
9
7
  const dates_1 = require("../utils/dates");
10
- const getButtonSizeForInput_1 = require("../utils/getButtonSizeForInput");
11
8
  require("./MobileCalendar.css");
12
9
  const b = (0, cn_1.block)('mobile-calendar');
13
10
  function MobileCalendar({ props, state }) {
11
+ var _a, _b;
14
12
  let type = 'date';
15
13
  if (state.hasTime && state.hasDate) {
16
14
  type = 'datetime-local';
@@ -18,31 +16,35 @@ function MobileCalendar({ props, state }) {
18
16
  else if (state.hasTime) {
19
17
  type = 'time';
20
18
  }
21
- return ((0, jsx_runtime_1.jsx)("input", { className: b('input'), disabled: props.disabled, type: type, value: formatNative(state.value || props.placeholderValue, type), id: props.id, min: formatNative(props.minValue, type), max: formatNative(props.maxValue, type), tabIndex: -1, onChange: (e) => {
19
+ return ((0, jsx_runtime_1.jsx)("input", { className: b(), disabled: props.disabled, type: type, value: formatNative(state.dateFieldState.displayValue, type), id: props.id, min: formatNative((_a = props.minValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone), type), max: formatNative((_b = props.maxValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone), type), tabIndex: -1, onChange: (e) => {
20
+ var _a, _b;
22
21
  if (props.readOnly) {
23
22
  return;
24
23
  }
25
24
  const newValue = e.target.value;
26
25
  if (newValue) {
27
- const localDate = (0, date_utils_1.dateTime)({ input: newValue, format: getDateFormat(type) });
26
+ const localDate = (0, date_utils_1.dateTime)({
27
+ input: newValue,
28
+ format: getDateFormat(type),
29
+ timeZone: 'system',
30
+ }).timeZone(state.timeZone, true);
28
31
  let newDate = state.hasDate
29
- ? (0, date_utils_1.dateTime)({
30
- input: newValue,
31
- format: getDateFormat(type),
32
- timeZone: props.timeZone,
33
- })
32
+ ? localDate
34
33
  : (0, dates_1.createPlaceholderValue)({
35
- placeholderValue: props.placeholderValue,
36
- timeZone: props.timeZone,
34
+ placeholderValue: (_a = props.placeholderValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone),
35
+ timeZone: state.timeZone,
37
36
  });
38
37
  if (state.hasTime) {
39
38
  newDate = (0, dates_1.mergeDateTime)(newDate, localDate);
40
39
  }
41
- else if (state.dateValue) {
42
- newDate = (0, dates_1.mergeDateTime)(newDate, state.dateValue);
40
+ else if (state.value) {
41
+ newDate = (0, dates_1.mergeDateTime)(newDate, state.value.timeZone(state.timeZone));
43
42
  }
44
43
  else {
45
- newDate = newDate.set('hours', 0).set('minutes', 0).set('seconds', 0);
44
+ newDate = (0, dates_1.mergeDateTime)(newDate, (0, dates_1.createPlaceholderValue)({
45
+ placeholderValue: (_b = props.placeholderValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone),
46
+ timeZone: state.timeZone,
47
+ }));
46
48
  }
47
49
  state.setValue(newDate);
48
50
  }
@@ -52,10 +54,6 @@ function MobileCalendar({ props, state }) {
52
54
  } }));
53
55
  }
54
56
  exports.MobileCalendar = MobileCalendar;
55
- function MobileCalendarIcon({ props }) {
56
- return ((0, jsx_runtime_1.jsx)("span", { className: b({ size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size) }), children: (0, jsx_runtime_1.jsx)("span", { className: b('button'), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }) }));
57
- }
58
- exports.MobileCalendarIcon = MobileCalendarIcon;
59
57
  function getDateFormat(type) {
60
58
  switch (type) {
61
59
  case 'time': {
@@ -0,0 +1,26 @@
1
+ .g-date-stub-button {
2
+ position: relative;
3
+ display: inline-block;
4
+ width: 24px;
5
+ height: 24px;
6
+ }
7
+ .g-date-stub-button_size_xs {
8
+ width: 20px;
9
+ height: 20px;
10
+ }
11
+ .g-date-stub-button_size_m {
12
+ width: 28px;
13
+ height: 28px;
14
+ }
15
+ .g-date-stub-button_size_l {
16
+ width: 36px;
17
+ height: 36px;
18
+ }
19
+ .g-date-stub-button__icon {
20
+ position: absolute;
21
+ inset: 0;
22
+ display: flex;
23
+ justify-content: center;
24
+ align-items: center;
25
+ color: var(--g-color-text-secondary);
26
+ }
@@ -0,0 +1,8 @@
1
+ import type { ButtonSize, IconData } from '@gravity-ui/uikit';
2
+ import './StubButton.css';
3
+ interface StubButtonProps {
4
+ size?: ButtonSize;
5
+ icon: IconData;
6
+ }
7
+ export declare function StubButton({ size, icon }: StubButtonProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StubButton = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const uikit_1 = require("@gravity-ui/uikit");
6
+ const cn_1 = require("../../utils/cn");
7
+ require("./StubButton.css");
8
+ const b = (0, cn_1.block)('stub-button');
9
+ function StubButton({ size, icon }) {
10
+ return ((0, jsx_runtime_1.jsx)("span", { className: b({ size }), children: (0, jsx_runtime_1.jsx)("span", { className: b('icon'), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon }) }) }));
11
+ }
12
+ exports.StubButton = StubButton;
@@ -9,7 +9,6 @@ const getButtonSizeForInput_1 = require("../../utils/getButtonSizeForInput");
9
9
  const mergeProps_1 = require("../../utils/mergeProps");
10
10
  const i18n_1 = require("../i18n");
11
11
  function useDatePickerProps(state, _a) {
12
- var _b;
13
12
  var { onFocus, onBlur } = _a, props = tslib_1.__rest(_a, ["onFocus", "onBlur"]);
14
13
  const [isActive, setActive] = react_1.default.useState(false);
15
14
  const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
@@ -23,15 +22,6 @@ function useDatePickerProps(state, _a) {
23
22
  },
24
23
  });
25
24
  const { inputProps } = (0, DateField_1.useDateFieldProps)(state.dateFieldState, props);
26
- let error;
27
- let validationState = props.validationState;
28
- if (validationState) {
29
- error = validationState === 'invalid' ? props.errorMessage || true : undefined;
30
- }
31
- else {
32
- validationState = state.dateFieldState.validationState;
33
- error = validationState === 'invalid';
34
- }
35
25
  const inputRef = react_1.default.useRef(null);
36
26
  const handleRef = (0, uikit_1.useForkRef)(inputRef, inputProps.controlRef);
37
27
  const calendarRef = react_1.default.useRef(null);
@@ -43,9 +33,10 @@ function useDatePickerProps(state, _a) {
43
33
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
44
34
  });
45
35
  }
36
+ const onlyTime = state.hasTime && !state.hasDate;
46
37
  return {
47
38
  groupProps: Object.assign(Object.assign({ ref: groupRef, tabIndex: -1, role: 'group' }, focusWithinProps), { style: props.style, 'aria-disabled': state.disabled || undefined, onKeyDown: (e) => {
48
- if (e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
39
+ if (!onlyTime && e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
49
40
  e.preventDefault();
50
41
  e.stopPropagation();
51
42
  state.setOpen(true);
@@ -53,7 +44,7 @@ function useDatePickerProps(state, _a) {
53
44
  } }),
54
45
  fieldProps: (0, mergeProps_1.mergeProps)(inputProps, state.dateFieldState.isEmpty && !isActive && props.placeholder
55
46
  ? { value: '' }
56
- : undefined, { controlRef: handleRef, error }),
47
+ : undefined, { controlRef: handleRef }),
57
48
  calendarButtonProps: {
58
49
  ref: calendarButtonRef,
59
50
  size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size),
@@ -84,7 +75,6 @@ function useDatePickerProps(state, _a) {
84
75
  focusInput();
85
76
  }
86
77
  },
87
- // @ts-expect-error focusTrap in popup was introduced in a newer version of uikit
88
78
  focusTrap: true,
89
79
  },
90
80
  calendarProps: {
@@ -99,20 +89,20 @@ function useDatePickerProps(state, _a) {
99
89
  focusInput();
100
90
  }
101
91
  },
102
- defaultFocusedValue: (_b = state.dateValue) !== null && _b !== void 0 ? _b : undefined,
103
- value: state.dateValue,
92
+ value: state.dateFieldState.displayValue,
104
93
  minValue: props.minValue,
105
94
  maxValue: props.maxValue,
106
95
  isDateUnavailable: props.isDateUnavailable,
107
- timeZone: props.timeZone,
96
+ timeZone: state.timeZone,
108
97
  },
109
98
  timeInputProps: {
110
99
  value: state.timeValue,
100
+ placeholderValue: state.dateFieldState.displayValue,
111
101
  onUpdate: state.setTimeValue,
112
102
  format: state.timeFormat,
113
103
  readOnly: state.readOnly,
114
104
  disabled: state.disabled,
115
- timeZone: props.timeZone,
105
+ timeZone: state.timeZone,
116
106
  hasClear: props.hasClear,
117
107
  size: props.size,
118
108
  },
@@ -6,21 +6,21 @@ export interface DatePickerState {
6
6
  /** The currently selected date. */
7
7
  value: DateTime | null;
8
8
  /** Sets the selected date. */
9
- setValue(value: DateTime | null): void;
9
+ setValue: (value: DateTime | null) => void;
10
10
  /**
11
11
  * The date portion of the value. This may be set prior to `value` if the user has
12
12
  * selected a date but has not yet selected a time.
13
13
  */
14
14
  dateValue: DateTime | null;
15
15
  /** Sets the date portion of the value. */
16
- setDateValue(value: DateTime): void;
16
+ setDateValue: (value: DateTime) => void;
17
17
  /**
18
18
  * The time portion of the value. This may be set prior to `value` if the user has
19
19
  * selected a time but has not yet selected a date.
20
20
  */
21
21
  timeValue: DateTime | null;
22
22
  /** Sets the time portion of the value. */
23
- setTimeValue(value: DateTime | null): void;
23
+ setTimeValue: (value: DateTime | null) => void;
24
24
  /** Whether the field is read only. */
25
25
  readOnly?: boolean;
26
26
  /** Whether the field is disabled. */
@@ -33,10 +33,11 @@ export interface DatePickerState {
33
33
  hasTime: boolean;
34
34
  /** Format of the time when rendered in the input. */
35
35
  timeFormat?: string;
36
+ timeZone: string;
36
37
  /** Whether the calendar popover is currently open. */
37
38
  isOpen: boolean;
38
39
  /** Sets whether the calendar popover is open. */
39
- setOpen(isOpen: boolean): void;
40
+ setOpen: (isOpen: boolean) => void;
40
41
  dateFieldState: DateFieldState;
41
42
  }
42
43
  export interface DatePickerStateOptions extends DateFieldBase {