@gravity-ui/date-components 3.4.1 → 4.0.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 (407) hide show
  1. package/README.md +32 -1
  2. package/dist/cjs/components/Calendar/Calendar.d.ts +6 -2
  3. package/dist/cjs/components/Calendar/Calendar.js +1 -1
  4. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  5. package/dist/cjs/components/CalendarView/Calendar.css +3 -0
  6. package/dist/cjs/components/CalendarView/Calendar.css.map +1 -1
  7. package/dist/cjs/components/CalendarView/CalendarView.d.ts +2 -1
  8. package/dist/cjs/components/CalendarView/CalendarView.js +8 -8
  9. package/dist/cjs/components/CalendarView/CalendarView.js.map +1 -1
  10. package/dist/cjs/components/CalendarView/hooks/types.d.ts +5 -3
  11. package/dist/cjs/components/CalendarView/hooks/types.js.map +1 -1
  12. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  13. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  14. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  15. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  16. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js +7 -1
  17. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  18. package/dist/cjs/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  19. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js +74 -30
  20. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  21. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js +16 -9
  22. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  23. package/dist/cjs/components/DateField/DateField.d.ts +1 -1
  24. package/dist/cjs/components/DateField/DateField.js +5 -17
  25. package/dist/cjs/components/DateField/DateField.js.map +1 -1
  26. package/dist/cjs/components/DateField/IncompleteDate.d.ts +28 -0
  27. package/dist/cjs/components/DateField/IncompleteDate.js +116 -0
  28. package/dist/cjs/components/DateField/IncompleteDate.js.map +1 -0
  29. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  30. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +18 -249
  31. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  32. package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  33. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +250 -54
  34. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  35. package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  36. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +85 -117
  37. package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
  38. package/dist/cjs/components/DateField/hooks/useFocusManager.d.ts +29 -0
  39. package/dist/cjs/components/DateField/hooks/useFocusManager.js +116 -0
  40. package/dist/cjs/components/DateField/hooks/useFocusManager.js.map +1 -0
  41. package/dist/cjs/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  42. package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js +236 -0
  43. package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  44. package/dist/cjs/components/DateField/i18n/ru.json +1 -1
  45. package/dist/cjs/components/DateField/index.d.ts +2 -1
  46. package/dist/cjs/components/DateField/index.js +1 -1
  47. package/dist/cjs/components/DateField/index.js.map +1 -1
  48. package/dist/cjs/components/DateField/types.d.ts +2 -22
  49. package/dist/cjs/components/DateField/types.js.map +1 -1
  50. package/dist/cjs/components/DateField/utils.d.ts +21 -34
  51. package/dist/cjs/components/DateField/utils.js +186 -138
  52. package/dist/cjs/components/DateField/utils.js.map +1 -1
  53. package/dist/cjs/components/DatePicker/DatePicker.d.ts +3 -3
  54. package/dist/cjs/components/DatePicker/DatePicker.js +3 -4
  55. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  56. package/dist/cjs/components/DatePicker/MobileCalendar.d.ts +1 -1
  57. package/dist/cjs/components/DatePicker/MobileCalendar.js +3 -5
  58. package/dist/cjs/components/DatePicker/MobileCalendar.js.map +1 -1
  59. package/dist/cjs/components/DatePicker/StubButton.d.ts +1 -1
  60. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  61. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  62. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  63. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  64. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +30 -17
  65. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  66. package/dist/cjs/components/HiddenInput/HiddenInput.d.ts +2 -5
  67. package/dist/cjs/components/HiddenInput/HiddenInput.js +2 -4
  68. package/dist/cjs/components/HiddenInput/HiddenInput.js.map +1 -1
  69. package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  70. package/dist/cjs/components/RangeCalendar/RangeCalendar.js +2 -3
  71. package/dist/cjs/components/RangeCalendar/RangeCalendar.js.map +1 -1
  72. package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +1 -1
  73. package/dist/cjs/components/RangeDateField/RangeDateField.js +6 -19
  74. package/dist/cjs/components/RangeDateField/RangeDateField.js.map +1 -1
  75. package/dist/cjs/components/RangeDateField/index.d.ts +0 -1
  76. package/dist/cjs/components/RangeDateField/index.js +0 -1
  77. package/dist/cjs/components/RangeDateField/index.js.map +1 -1
  78. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  79. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js +4 -5
  80. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  81. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  82. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js +3 -4
  83. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  84. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  85. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js +4 -5
  86. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  87. package/dist/cjs/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  88. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  89. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  90. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  91. package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  92. package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  93. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  94. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -21
  95. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  96. package/dist/cjs/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  97. package/dist/cjs/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  98. package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  99. package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  100. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  101. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +0 -3
  102. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  103. package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  104. package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  105. package/dist/cjs/components/RangeDateSelection/utils/span.d.ts +2 -1
  106. package/dist/cjs/components/RangeDateSelection/utils/span.js.map +1 -1
  107. package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  108. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +3 -40
  109. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  110. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  111. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  112. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  113. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  114. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  115. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  116. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  117. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  118. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  119. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  120. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -21
  121. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  122. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  123. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  124. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  125. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  126. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  127. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  128. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  129. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  130. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  131. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  132. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  133. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  134. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  135. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  136. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  137. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -16
  138. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  139. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -1
  140. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -7
  141. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  142. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  143. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  144. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  145. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  146. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +9 -12
  147. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  148. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  149. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  150. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  151. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +27 -16
  152. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  153. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  154. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  155. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  156. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  157. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  158. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  159. package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  160. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +32 -9
  161. package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
  162. package/dist/cjs/components/types/inputs.js.map +1 -1
  163. package/dist/cjs/components/utils/constants.d.ts +2 -0
  164. package/dist/cjs/components/utils/constants.js +7 -1
  165. package/dist/cjs/components/utils/constants.js.map +1 -1
  166. package/dist/cjs/components/utils/dates.d.ts +6 -1
  167. package/dist/cjs/components/utils/dates.js +6 -1
  168. package/dist/cjs/components/utils/dates.js.map +1 -1
  169. package/dist/cjs/components/utils/filterDOMProps.js +1 -1
  170. package/dist/cjs/components/utils/filterDOMProps.js.map +1 -1
  171. package/dist/cjs/components/utils/mergeProps.js +1 -1
  172. package/dist/cjs/components/utils/mergeProps.js.map +1 -1
  173. package/dist/cjs/components/utils/validation/datePicker.js +1 -1
  174. package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
  175. package/dist/cjs/components/utils/validation/i18n/ru.json +2 -2
  176. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  177. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +6 -1
  178. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  179. package/dist/cjs/hooks/useEventHandler.js +1 -2
  180. package/dist/cjs/hooks/useEventHandler.js.map +1 -1
  181. package/dist/cjs/hooks/useMove.d.ts +2 -2
  182. package/dist/cjs/hooks/useMove.js +6 -9
  183. package/dist/cjs/hooks/useMove.js.map +1 -1
  184. package/dist/cjs/hooks/useResizeObserver.js +1 -1
  185. package/dist/cjs/hooks/useResizeObserver.js.map +1 -1
  186. package/dist/cjs/package.json +1 -1
  187. package/dist/docs/INDEX.md +131 -0
  188. package/dist/docs/components/Calendar.md +125 -0
  189. package/dist/docs/components/DateField.md +206 -0
  190. package/dist/docs/components/DatePicker.md +194 -0
  191. package/dist/docs/components/RangeCalendar.md +125 -0
  192. package/dist/docs/components/RelativeDateField.md +73 -0
  193. package/dist/docs/components/RelativeDatePicker.md +59 -0
  194. package/dist/esm/components/Calendar/Calendar.d.ts +6 -2
  195. package/dist/esm/components/Calendar/Calendar.js +1 -1
  196. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  197. package/dist/esm/components/CalendarView/Calendar.css +3 -0
  198. package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
  199. package/dist/esm/components/CalendarView/CalendarView.d.ts +2 -1
  200. package/dist/esm/components/CalendarView/CalendarView.js +8 -8
  201. package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
  202. package/dist/esm/components/CalendarView/hooks/types.d.ts +5 -3
  203. package/dist/esm/components/CalendarView/hooks/types.js.map +1 -1
  204. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  205. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  206. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  207. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  208. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +7 -1
  209. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  210. package/dist/esm/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  211. package/dist/esm/components/CalendarView/hooks/useCalendarState.js +74 -30
  212. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  213. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js +16 -10
  214. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  215. package/dist/esm/components/DateField/DateField.d.ts +1 -1
  216. package/dist/esm/components/DateField/DateField.js +6 -18
  217. package/dist/esm/components/DateField/DateField.js.map +1 -1
  218. package/dist/esm/components/DateField/IncompleteDate.d.ts +28 -0
  219. package/dist/esm/components/DateField/IncompleteDate.js +112 -0
  220. package/dist/esm/components/DateField/IncompleteDate.js.map +1 -0
  221. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  222. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +17 -248
  223. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  224. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  225. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +250 -54
  226. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  227. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  228. package/dist/esm/components/DateField/hooks/useDateFieldState.js +87 -119
  229. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  230. package/dist/esm/components/DateField/hooks/useFocusManager.d.ts +29 -0
  231. package/dist/esm/components/DateField/hooks/useFocusManager.js +112 -0
  232. package/dist/esm/components/DateField/hooks/useFocusManager.js.map +1 -0
  233. package/dist/esm/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  234. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js +232 -0
  235. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  236. package/dist/esm/components/DateField/i18n/ru.json +1 -1
  237. package/dist/esm/components/DateField/index.d.ts +2 -1
  238. package/dist/esm/components/DateField/index.js +1 -1
  239. package/dist/esm/components/DateField/index.js.map +1 -1
  240. package/dist/esm/components/DateField/types.d.ts +2 -22
  241. package/dist/esm/components/DateField/types.js.map +1 -1
  242. package/dist/esm/components/DateField/utils.d.ts +21 -34
  243. package/dist/esm/components/DateField/utils.js +185 -131
  244. package/dist/esm/components/DateField/utils.js.map +1 -1
  245. package/dist/esm/components/DatePicker/DatePicker.d.ts +3 -3
  246. package/dist/esm/components/DatePicker/DatePicker.js +3 -5
  247. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  248. package/dist/esm/components/DatePicker/MobileCalendar.d.ts +1 -1
  249. package/dist/esm/components/DatePicker/MobileCalendar.js +3 -5
  250. package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
  251. package/dist/esm/components/DatePicker/StubButton.d.ts +1 -1
  252. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  253. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  254. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  255. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  256. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +30 -18
  257. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  258. package/dist/esm/components/HiddenInput/HiddenInput.d.ts +2 -5
  259. package/dist/esm/components/HiddenInput/HiddenInput.js +3 -4
  260. package/dist/esm/components/HiddenInput/HiddenInput.js.map +1 -1
  261. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  262. package/dist/esm/components/RangeCalendar/RangeCalendar.js +2 -3
  263. package/dist/esm/components/RangeCalendar/RangeCalendar.js.map +1 -1
  264. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
  265. package/dist/esm/components/RangeDateField/RangeDateField.js +7 -20
  266. package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
  267. package/dist/esm/components/RangeDateField/index.d.ts +0 -1
  268. package/dist/esm/components/RangeDateField/index.js +0 -1
  269. package/dist/esm/components/RangeDateField/index.js.map +1 -1
  270. package/dist/esm/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  271. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +4 -6
  272. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  273. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  274. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +2 -3
  275. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  276. package/dist/esm/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  277. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +4 -5
  278. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  279. package/dist/esm/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  280. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  281. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  282. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  283. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  284. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  285. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  286. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -22
  287. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  288. package/dist/esm/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  289. package/dist/esm/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  290. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  291. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  292. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  293. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +1 -2
  294. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  295. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  296. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  297. package/dist/esm/components/RangeDateSelection/utils/span.d.ts +2 -1
  298. package/dist/esm/components/RangeDateSelection/utils/span.js.map +1 -1
  299. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  300. package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -40
  301. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  302. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  303. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  304. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  305. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  306. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  307. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  308. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  309. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  310. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  311. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  312. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -22
  313. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  314. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  315. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  316. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  317. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  318. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  319. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  320. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  321. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  322. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  323. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  324. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  325. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  326. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  327. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  328. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  329. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -17
  330. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  331. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -1
  332. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +32 -7
  333. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  334. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  335. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  336. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  337. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  338. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +8 -10
  339. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  340. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  341. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  342. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  343. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +26 -15
  344. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  345. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  346. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  347. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  348. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  349. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  350. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  351. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  352. package/dist/esm/components/RelativeRangeDatePicker/utils.js +33 -9
  353. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  354. package/dist/esm/components/types/inputs.js.map +1 -1
  355. package/dist/esm/components/utils/constants.d.ts +2 -0
  356. package/dist/esm/components/utils/constants.js +6 -0
  357. package/dist/esm/components/utils/constants.js.map +1 -1
  358. package/dist/esm/components/utils/dates.d.ts +6 -1
  359. package/dist/esm/components/utils/dates.js +5 -1
  360. package/dist/esm/components/utils/dates.js.map +1 -1
  361. package/dist/esm/components/utils/filterDOMProps.js +1 -1
  362. package/dist/esm/components/utils/filterDOMProps.js.map +1 -1
  363. package/dist/esm/components/utils/mergeProps.js +1 -1
  364. package/dist/esm/components/utils/mergeProps.js.map +1 -1
  365. package/dist/esm/components/utils/validation/datePicker.js +1 -1
  366. package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
  367. package/dist/esm/components/utils/validation/i18n/ru.json +2 -2
  368. package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  369. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +6 -1
  370. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  371. package/dist/esm/hooks/useEventHandler.js +1 -2
  372. package/dist/esm/hooks/useEventHandler.js.map +1 -1
  373. package/dist/esm/hooks/useMove.d.ts +2 -2
  374. package/dist/esm/hooks/useMove.js +6 -9
  375. package/dist/esm/hooks/useMove.js.map +1 -1
  376. package/dist/esm/hooks/useResizeObserver.js +1 -1
  377. package/dist/esm/hooks/useResizeObserver.js.map +1 -1
  378. package/dist/esm/package.json +1 -1
  379. package/package.json +45 -50
  380. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -218
  381. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  382. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  383. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -9
  384. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  385. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  386. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +0 -42
  387. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  388. package/dist/cjs/components/RangeDateField/utils/index.d.ts +0 -3
  389. package/dist/cjs/components/RangeDateField/utils/index.js +0 -7
  390. package/dist/cjs/components/RangeDateField/utils/index.js.map +0 -1
  391. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  392. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +0 -7
  393. package/dist/cjs/components/RangeDateField/utils/isValidRange.js.map +0 -1
  394. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -214
  395. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  396. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  397. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -6
  398. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  399. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  400. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +0 -39
  401. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  402. package/dist/esm/components/RangeDateField/utils/index.d.ts +0 -3
  403. package/dist/esm/components/RangeDateField/utils/index.js +0 -4
  404. package/dist/esm/components/RangeDateField/utils/index.js.map +0 -1
  405. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  406. package/dist/esm/components/RangeDateField/utils/isValidRange.js +0 -4
  407. package/dist/esm/components/RangeDateField/utils/isValidRange.js.map +0 -1
@@ -1,24 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EDITABLE_SEGMENTS = void 0;
4
- exports.getSectionLimits = getSectionLimits;
5
- exports.getSectionValue = getSectionValue;
3
+ exports.PAGE_STEP = void 0;
6
4
  exports.getDurationUnitFromSectionType = getDurationUnitFromSectionType;
7
5
  exports.addSegment = addSegment;
8
6
  exports.setSegment = setSegment;
9
7
  exports.splitFormatIntoSections = splitFormatIntoSections;
10
8
  exports.cleanString = cleanString;
11
9
  exports.getEditableSections = getEditableSections;
12
- exports.isEditableSection = isEditableSection;
10
+ exports.isEditableSectionType = isEditableSectionType;
13
11
  exports.toEditableSection = toEditableSection;
14
- exports.getCurrentEditableSectionIndex = getCurrentEditableSectionIndex;
15
- exports.formatSections = formatSections;
16
12
  exports.parseDateFromString = parseDateFromString;
17
- exports.isAllSegmentsValid = isAllSegmentsValid;
18
13
  exports.useFormatSections = useFormatSections;
19
14
  exports.getFormatInfo = getFormatInfo;
20
15
  exports.adjustDateToFormat = adjustDateToFormat;
21
- exports.markValidSection = markValidSection;
22
16
  const tslib_1 = require("tslib");
23
17
  const react_1 = tslib_1.__importDefault(require("react"));
24
18
  const date_utils_1 = require("@gravity-ui/date-utils");
@@ -26,16 +20,16 @@ const index_js_1 = require("@gravity-ui/date-utils/build/dayjs/index.js");
26
20
  const uikit_1 = require("@gravity-ui/uikit");
27
21
  const dates_1 = require("../utils/dates.js");
28
22
  const i18n_1 = require("./i18n/index.js");
29
- exports.EDITABLE_SEGMENTS = {
23
+ const EDITABLE_SEGMENTS = {
30
24
  year: true,
31
25
  quarter: true,
32
26
  month: true,
33
27
  day: true,
28
+ weekday: true,
34
29
  hour: true,
35
30
  minute: true,
36
31
  second: true,
37
32
  dayPeriod: true,
38
- weekday: true,
39
33
  };
40
34
  const escapedCharacters = { start: '[', end: ']' };
41
35
  const formatTokenMap = {
@@ -44,6 +38,7 @@ const formatTokenMap = {
44
38
  YYYY: 'year',
45
39
  // Quarter
46
40
  Q: 'quarter',
41
+ Qo: 'quarter',
47
42
  // Month
48
43
  M: 'month',
49
44
  MM: 'month',
@@ -78,6 +73,16 @@ const formatTokenMap = {
78
73
  Z: { sectionType: 'timeZoneName', contentType: 'letter' },
79
74
  ZZ: { sectionType: 'timeZoneName', contentType: 'letter' },
80
75
  };
76
+ exports.PAGE_STEP = {
77
+ year: 5,
78
+ quarter: 2,
79
+ month: 2,
80
+ weekday: 3,
81
+ day: 7,
82
+ hour: 2,
83
+ minute: 15,
84
+ second: 15,
85
+ };
81
86
  function getDateSectionConfigFromFormatToken(formatToken) {
82
87
  const config = formatTokenMap[formatToken];
83
88
  if (!config) {
@@ -107,7 +112,7 @@ function isFourDigitYearFormat(format) {
107
112
  function isHour12(format) {
108
113
  return (0, date_utils_1.dateTime)().set('hour', 15).format(format) !== '15';
109
114
  }
110
- function getSectionLimits(section, date) {
115
+ function getSectionLimits(section, date, placeholder) {
111
116
  const { type, format } = section;
112
117
  switch (type) {
113
118
  case 'year': {
@@ -122,8 +127,8 @@ function getSectionLimits(section, date) {
122
127
  }
123
128
  case 'month': {
124
129
  return {
125
- minValue: 0,
126
- maxValue: 11,
130
+ minValue: 1,
131
+ maxValue: 12,
127
132
  };
128
133
  }
129
134
  case 'weekday': {
@@ -135,12 +140,12 @@ function getSectionLimits(section, date) {
135
140
  case 'day': {
136
141
  return {
137
142
  minValue: 1,
138
- maxValue: date ? date.daysInMonth() : 31,
143
+ maxValue: 31,
139
144
  };
140
145
  }
141
146
  case 'hour': {
142
147
  if (isHour12(format)) {
143
- const isPM = date.hour() >= 12;
148
+ const isPM = (date.hour ?? placeholder.hour()) >= 12;
144
149
  return {
145
150
  minValue: isPM ? 12 : 0,
146
151
  maxValue: isPM ? 23 : 11,
@@ -165,28 +170,25 @@ function getSectionValue(section, date) {
165
170
  const type = section.type;
166
171
  switch (type) {
167
172
  case 'year': {
173
+ if (date.year === null) {
174
+ return null;
175
+ }
168
176
  return isFourDigitYearFormat(section.format)
169
- ? date.year()
170
- : Number(date.format(section.format));
177
+ ? date.year
178
+ : Number((0, date_utils_1.dateTime)().set('year', date.year).format(section.format));
171
179
  }
172
180
  case 'quarter':
173
181
  case 'month':
182
+ case 'weekday':
174
183
  case 'hour':
175
184
  case 'minute':
176
- case 'second': {
177
- return date[type]();
178
- }
179
- case 'day': {
180
- return date.date();
181
- }
182
- case 'weekday': {
183
- return date.day();
184
- }
185
+ case 'second':
186
+ case 'day':
185
187
  case 'dayPeriod': {
186
- return date.hour() >= 12 ? 12 : 0;
188
+ return date[type];
187
189
  }
188
190
  }
189
- return undefined;
191
+ return null;
190
192
  }
191
193
  const TYPE_MAPPING = {
192
194
  weekday: 'day',
@@ -194,7 +196,7 @@ const TYPE_MAPPING = {
194
196
  dayPeriod: 'hour',
195
197
  };
196
198
  function getDurationUnitFromSectionType(type) {
197
- if (type === 'literal' || type === 'timeZoneName' || type === 'unknown') {
199
+ if (!isEditableSectionType(type)) {
198
200
  throw new Error(`${type} section does not have duration unit.`);
199
201
  }
200
202
  if (type in TYPE_MAPPING) {
@@ -202,11 +204,42 @@ function getDurationUnitFromSectionType(type) {
202
204
  }
203
205
  return type;
204
206
  }
205
- function addSegment(section, date, amount) {
206
- var _a;
207
- let val = (_a = section.value) !== null && _a !== void 0 ? _a : 0;
207
+ function addSegment(section, date, amount, placeholder) {
208
+ if (!isEditableSectionType(section.type)) {
209
+ throw new Error();
210
+ }
211
+ let val = date[section.type];
212
+ if (val === null) {
213
+ let newDate;
214
+ if (section.type === 'quarter' || section.type === 'month') {
215
+ newDate = date.set('month', placeholder.month() + 1);
216
+ }
217
+ else if (section.type === 'dayPeriod') {
218
+ newDate = date.set('hour', placeholder.hour());
219
+ }
220
+ else if (section.type === 'weekday' && date.day && date.day !== placeholder.date()) {
221
+ newDate = date.set('weekday', placeholder.set({ date: date.day }).day());
222
+ }
223
+ else {
224
+ newDate = date.set(section.type, placeholder[getDurationUnitFromSectionType(section.type)]());
225
+ }
226
+ if (newDate.weekday !== null &&
227
+ (section.type === 'day' ||
228
+ section.type === 'month' ||
229
+ section.type === 'quarter' ||
230
+ section.type === 'year') &&
231
+ newDate.year !== null &&
232
+ newDate.month !== null &&
233
+ newDate.day !== null) {
234
+ newDate = newDate.set('weekday', placeholder
235
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
236
+ .day());
237
+ }
238
+ return newDate;
239
+ }
208
240
  if (section.type === 'dayPeriod') {
209
- val = date.hour() + (date.hour() >= 12 ? -12 : 12);
241
+ const hour = date.hour ?? placeholder.hour();
242
+ val = hour + (hour >= 12 ? -12 : 12);
210
243
  }
211
244
  else {
212
245
  val = val + amount;
@@ -217,48 +250,71 @@ function addSegment(section, date, amount) {
217
250
  val = ((val - min + length) % length) + min;
218
251
  }
219
252
  }
253
+ if (section.type === 'dayPeriod') {
254
+ return date.set('hour', val);
255
+ }
220
256
  if (section.type === 'year' && !isFourDigitYearFormat(section.format)) {
221
257
  val = (0, date_utils_1.dateTime)({ input: `${val}`.padStart(2, '0'), format: section.format }).year();
222
258
  }
223
- if (section.type === 'quarter') {
224
- return date.set(getDurationUnitFromSectionType('month'), val * 3 - 1);
259
+ const newDate = date.set(section.type, val);
260
+ if (newDate.year !== null && newDate.month !== null && newDate.day !== null) {
261
+ if (date.weekday !== null &&
262
+ (section.type === 'day' ||
263
+ section.type === 'month' ||
264
+ section.type === 'quarter' ||
265
+ section.type === 'year')) {
266
+ newDate.weekday = placeholder
267
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
268
+ .day();
269
+ }
270
+ else if (section.type === 'weekday') {
271
+ const d = placeholder
272
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
273
+ .set({ day: val });
274
+ newDate.year = d.year();
275
+ newDate.month = d.month();
276
+ newDate.day = d.date();
277
+ }
225
278
  }
226
- const type = getDurationUnitFromSectionType(section.type);
227
- return date.set(type, val);
279
+ return newDate;
228
280
  }
229
- function setSegment(section, date, amount) {
281
+ function setSegment(section, date, amount, placeholder) {
230
282
  const type = section.type;
283
+ let newDate;
231
284
  switch (type) {
232
285
  case 'year': {
233
- return date.set('year', isFourDigitYearFormat(section.format)
286
+ newDate = date.set('year', isFourDigitYearFormat(section.format)
234
287
  ? amount
235
288
  : (0, date_utils_1.dateTime)({
236
289
  input: `${amount}`.padStart(2, '0'),
237
290
  format: section.format,
238
291
  }).year());
292
+ break;
239
293
  }
240
- case 'quarter': {
241
- return date.set(getDurationUnitFromSectionType('month'), amount * 3 - 1);
242
- }
243
- case 'day':
294
+ case 'quarter':
295
+ case 'month':
244
296
  case 'weekday':
245
- case 'month': {
246
- return date.set(getDurationUnitFromSectionType(type), amount);
297
+ case 'day': {
298
+ newDate = date.set(type, amount);
299
+ break;
247
300
  }
248
301
  case 'dayPeriod': {
249
- const hours = date.hour();
302
+ const hours = date.hour ?? placeholder.hour();
250
303
  const wasPM = hours >= 12;
251
- const isPM = amount >= 12;
304
+ const isPM = amount === 1;
252
305
  if (isPM === wasPM) {
253
- return date;
306
+ newDate = date;
254
307
  }
255
- return date.set('hour', wasPM ? hours - 12 : hours + 12);
308
+ else {
309
+ newDate = date.set('hour', wasPM ? hours - 12 : hours + 12);
310
+ }
311
+ break;
256
312
  }
257
313
  case 'hour': {
258
314
  // In 12 hour time, ensure that AM/PM does not change
259
315
  let sectionAmount = amount;
260
316
  if (section.minValue === 12 || section.maxValue === 11) {
261
- const hours = date.hour();
317
+ const hours = date.hour ?? placeholder.hour();
262
318
  const wasPM = hours >= 12;
263
319
  if (!wasPM && sectionAmount === 12) {
264
320
  sectionAmount = 0;
@@ -267,14 +323,36 @@ function setSegment(section, date, amount) {
267
323
  sectionAmount += 12;
268
324
  }
269
325
  }
270
- return date.set('hour', sectionAmount);
326
+ newDate = date.set('hour', sectionAmount);
327
+ break;
271
328
  }
272
329
  case 'minute':
273
330
  case 'second': {
274
- return date.set(type, amount);
331
+ newDate = date.set(type, amount);
332
+ break;
333
+ }
334
+ default: {
335
+ newDate = date;
336
+ break;
275
337
  }
276
338
  }
277
- return date;
339
+ if (newDate.year !== null && newDate.month !== null && newDate.day !== null) {
340
+ if (newDate.weekday !== null &&
341
+ (type === 'day' || type === 'month' || type === 'quarter' || type === 'year')) {
342
+ newDate = newDate.set('weekday', placeholder
343
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
344
+ .day());
345
+ }
346
+ else if (type === 'weekday') {
347
+ const d = placeholder
348
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
349
+ .set({ day: amount });
350
+ newDate.year = d.year();
351
+ newDate.month = d.month();
352
+ newDate.day = d.date();
353
+ }
354
+ }
355
+ return newDate;
278
356
  }
279
357
  function doesSectionHaveLeadingZeros(contentType, sectionType, format) {
280
358
  if (contentType !== 'digit') {
@@ -321,7 +399,7 @@ function getSectionPlaceholder(sectionConfig, currentTokenValue, t) {
321
399
  return t('year_placeholder').repeat((0, date_utils_1.dateTime)().format(currentTokenValue).length);
322
400
  }
323
401
  case 'quarter': {
324
- return t('quarter_placeholder');
402
+ return t('quarter_placeholder').repeat(currentTokenValue.length);
325
403
  }
326
404
  case 'month': {
327
405
  return t('month_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);
@@ -330,7 +408,7 @@ function getSectionPlaceholder(sectionConfig, currentTokenValue, t) {
330
408
  return t('day_placeholder').repeat(2);
331
409
  }
332
410
  case 'weekday': {
333
- return t('weekday_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);
411
+ return t('weekday_placeholder').repeat(sectionConfig.contentType === 'letter' ? currentTokenValue.length : 2);
334
412
  }
335
413
  case 'hour': {
336
414
  return t('hour_placeholder').repeat(2);
@@ -375,7 +453,7 @@ function splitFormatIntoSections(format, t = i18n_1.i18n, lang = 'en') {
375
453
  }
376
454
  else {
377
455
  if (!isSeparator) {
378
- addFormatSection(sections, currentTokenValue, t);
456
+ addFormatSection(sections, currentTokenValue, t, lang);
379
457
  currentTokenValue = '';
380
458
  }
381
459
  isSeparator = true;
@@ -392,18 +470,24 @@ function splitFormatIntoSections(format, t = i18n_1.i18n, lang = 'en') {
392
470
  addLiteralSection(sections, currentTokenValue);
393
471
  }
394
472
  else {
395
- addFormatSection(sections, currentTokenValue, t);
473
+ addFormatSection(sections, currentTokenValue, t, lang);
396
474
  }
397
475
  }
398
476
  return sections;
399
477
  }
400
- function addFormatSection(sections, token, t) {
478
+ function addFormatSection(sections, token, t, lang) {
401
479
  if (!token) {
402
480
  return;
403
481
  }
404
482
  const sectionConfig = getDateSectionConfigFromFormatToken(token);
405
483
  const hasLeadingZeros = doesSectionHaveLeadingZeros(sectionConfig.contentType, sectionConfig.type, token);
406
- sections.push(Object.assign(Object.assign({}, sectionConfig), { format: token, placeholder: getSectionPlaceholder(sectionConfig, token, t), options: getSectionOptions(sectionConfig, token), hasLeadingZeros }));
484
+ sections.push({
485
+ ...sectionConfig,
486
+ format: token,
487
+ placeholder: getSectionPlaceholder(sectionConfig, token, t),
488
+ options: getSectionOptions(sectionConfig, token, lang),
489
+ hasLeadingZeros,
490
+ });
407
491
  }
408
492
  function addLiteralSection(sections, token) {
409
493
  if (!token) {
@@ -417,11 +501,11 @@ function addLiteralSection(sections, token) {
417
501
  hasLeadingZeros: false,
418
502
  });
419
503
  }
420
- function getSectionOptions(section, token) {
504
+ function getSectionOptions(section, token, lang) {
421
505
  switch (section.type) {
422
506
  case 'month': {
423
507
  const format = section.contentType === 'letter' ? token : 'MMMM';
424
- let date = (0, date_utils_1.dateTime)().startOf('year');
508
+ let date = (0, date_utils_1.dateTime)({ lang }).startOf('year');
425
509
  const options = [];
426
510
  for (let i = 0; i < 12; i++) {
427
511
  options.push(date.format(format).toLocaleUpperCase());
@@ -440,7 +524,7 @@ function getSectionOptions(section, token) {
440
524
  }
441
525
  case 'weekday': {
442
526
  const format = section.contentType === 'letter' ? token : 'dddd';
443
- let date = (0, date_utils_1.dateTime)().day(0);
527
+ let date = (0, date_utils_1.dateTime)({ lang }).day(0);
444
528
  const options = [];
445
529
  for (let i = 0; i < 7; i++) {
446
530
  options.push(date.format(format).toLocaleUpperCase());
@@ -454,68 +538,53 @@ function getSectionOptions(section, token) {
454
538
  function cleanString(dirtyString) {
455
539
  return dirtyString.replace(/[\u2066\u2067\u2068\u2069]/g, '');
456
540
  }
457
- function getEditableSections(sections, value, validSegments) {
458
- let position = 1;
459
- const newSections = [];
460
- let previousEditableSection = -1;
461
- for (let i = 0; i < sections.length; i++) {
462
- const section = sections[i];
463
- if (!section) {
464
- continue;
465
- }
466
- const newSection = toEditableSection(section, value, validSegments, position, previousEditableSection);
467
- newSections.push(newSection);
468
- if (isEditableSection(section)) {
469
- for (let j = Math.max(0, previousEditableSection); j <= i; j++) {
470
- const prevSection = newSections[j];
471
- if (prevSection) {
472
- prevSection.nextEditableSection = i;
473
- if (prevSection.previousEditableSection === -1) {
474
- prevSection.previousEditableSection = i;
475
- }
476
- }
477
- }
478
- previousEditableSection = i;
479
- }
480
- position += newSection.textValue.length;
481
- }
482
- return newSections;
541
+ function getEditableSections(sections, value, placeholder) {
542
+ return sections.map((section) => toEditableSection(section, value, placeholder));
483
543
  }
484
- function isEditableSection(section) {
485
- var _a;
486
- return (_a = exports.EDITABLE_SEGMENTS[section.type]) !== null && _a !== void 0 ? _a : false;
544
+ function isEditableSectionType(type) {
545
+ return EDITABLE_SEGMENTS[type] ?? false;
487
546
  }
488
- function toEditableSection(section, value, validSegments, position, previousEditableSection) {
489
- const isEditable = isEditableSection(section);
547
+ function toEditableSection(section, value, placeholder) {
490
548
  let renderedValue = section.placeholder;
491
- if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {
492
- renderedValue = value.format(section.format);
549
+ let val = isEditableSectionType(section.type) ? value[section.type] : null;
550
+ if (section.type === 'timeZoneName') {
551
+ renderedValue = placeholder.format(section.format);
552
+ }
553
+ else if (isEditableSectionType(section.type) && val !== null) {
554
+ const sectionDate = placeholder.set({ month: 0, date: 1, hour: 0, minute: 0, second: 0 });
555
+ let sectionType = getDurationUnitFromSectionType(section.type);
556
+ if (section.type === 'month') {
557
+ val -= 1;
558
+ }
559
+ else if (section.type === 'quarter') {
560
+ sectionType = 'month';
561
+ val = (val - 1) * 3;
562
+ }
563
+ else if (section.type === 'dayPeriod') {
564
+ if (value.hour === null) {
565
+ val = val === 1 ? 12 : 0;
566
+ }
567
+ else {
568
+ val = value.hour;
569
+ }
570
+ }
571
+ renderedValue = sectionDate.set(sectionType, val).format(section.format);
493
572
  if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {
494
573
  renderedValue = renderedValue.padStart(section.placeholder.length, '0');
495
574
  }
496
575
  }
497
- // use bidirectional context to allow the browser autodetect text direction
498
- renderedValue = '\u2068' + renderedValue + '\u2069';
499
- const sectionLength = renderedValue.length;
500
- 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));
576
+ const newSection = {
577
+ ...section,
578
+ value: getSectionValue(section, value),
579
+ textValue: renderedValue,
580
+ ...getSectionLimits(section, value, placeholder),
581
+ };
501
582
  return newSection;
502
583
  }
503
- function getCurrentEditableSectionIndex(sections, selectedSections) {
504
- const currentIndex = selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;
505
- const section = sections[currentIndex];
506
- if (section && !exports.EDITABLE_SEGMENTS[section.type]) {
507
- return section.nextEditableSection;
508
- }
509
- return section ? currentIndex : -1;
510
- }
511
- function formatSections(sections) {
512
- // use ltr direction context to get predictable navigation inside input
513
- return '\u2066' + sections.map((s) => s.textValue).join('') + '\u2069';
514
- }
515
584
  function parseDate(options) {
516
585
  let date = (0, date_utils_1.dateTime)(options);
517
586
  if (!date.isValid()) {
518
- date = (0, date_utils_1.dateTime)(Object.assign(Object.assign({}, options), { format: undefined }));
587
+ date = (0, date_utils_1.dateTime)({ ...options, format: undefined });
519
588
  }
520
589
  return date;
521
590
  }
@@ -541,9 +610,6 @@ function parseDateFromString(str, format, timeZone) {
541
610
  }
542
611
  return date;
543
612
  }
544
- function isAllSegmentsValid(allSegments, validSegments) {
545
- return Object.keys(allSegments).every((key) => validSegments[key]);
546
- }
547
613
  function useFormatSections(format) {
548
614
  const { t } = i18n_1.i18n.useTranslation();
549
615
  const { lang } = (0, uikit_1.useLang)();
@@ -558,21 +624,20 @@ function useFormatSections(format) {
558
624
  const dateUnits = ['day', 'month', 'quarter', 'year'];
559
625
  const timeUnits = ['second', 'minute', 'hour'];
560
626
  function getFormatInfo(sections) {
561
- var _a, _b;
562
627
  const availableUnits = {};
563
628
  let hasDate = false;
564
629
  let hasTime = false;
565
630
  let minDateUnitIndex = dateUnits.length - 1;
566
631
  let minTimeUnitIndex = timeUnits.length - 1;
567
632
  for (const s of sections) {
568
- if (!isEditableSection(s)) {
633
+ if (!isEditableSectionType(s.type)) {
569
634
  continue;
570
635
  }
571
636
  const dateUnitIndex = dateUnits.indexOf(s.type);
572
637
  const timeUnitIndex = timeUnits.indexOf(s.type);
573
638
  availableUnits[s.type] = true;
574
- hasDate || (hasDate = dateUnitIndex !== -1);
575
- hasTime || (hasTime = timeUnitIndex !== -1);
639
+ hasDate ||= dateUnitIndex !== -1;
640
+ hasTime ||= timeUnitIndex !== -1;
576
641
  minDateUnitIndex =
577
642
  dateUnitIndex === -1 ? minDateUnitIndex : Math.min(dateUnitIndex, minDateUnitIndex);
578
643
  minTimeUnitIndex =
@@ -582,8 +647,8 @@ function getFormatInfo(sections) {
582
647
  availableUnits,
583
648
  hasDate,
584
649
  hasTime,
585
- minDateUnit: (_a = dateUnits[minDateUnitIndex]) !== null && _a !== void 0 ? _a : 'day',
586
- minTimeUnit: (_b = timeUnits[minTimeUnitIndex]) !== null && _b !== void 0 ? _b : 'second',
650
+ minDateUnit: dateUnits[minDateUnitIndex] ?? 'day',
651
+ minTimeUnit: timeUnits[minTimeUnitIndex] ?? 'second',
587
652
  };
588
653
  }
589
654
  function adjustDateToFormat(date, formatInfo, method = 'startOf') {
@@ -599,21 +664,4 @@ function adjustDateToFormat(date, formatInfo, method = 'startOf') {
599
664
  }
600
665
  return newDate;
601
666
  }
602
- function markValidSection(allSections, editableSections, unit) {
603
- const validSections = Object.assign({}, editableSections);
604
- validSections[unit] = true;
605
- if (validSections.day && validSections.month && validSections.year && allSections.weekday) {
606
- validSections.weekday = true;
607
- }
608
- if (validSections.month && allSections.quarter) {
609
- validSections.quarter = true;
610
- }
611
- if (validSections.quarter && allSections.month) {
612
- validSections.month = true;
613
- }
614
- if (validSections.hour && allSections.dayPeriod) {
615
- validSections.dayPeriod = true;
616
- }
617
- return validSections;
618
- }
619
667
  //# sourceMappingURL=utils.js.map