@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
@@ -4,16 +4,16 @@ import { dayjs } from '@gravity-ui/date-utils/build/dayjs/index.js';
4
4
  import { useLang } from '@gravity-ui/uikit';
5
5
  import { mergeDateTime } from "../utils/dates.js";
6
6
  import { i18n } from "./i18n/index.js";
7
- export const EDITABLE_SEGMENTS = {
7
+ const EDITABLE_SEGMENTS = {
8
8
  year: true,
9
9
  quarter: true,
10
10
  month: true,
11
11
  day: true,
12
+ weekday: true,
12
13
  hour: true,
13
14
  minute: true,
14
15
  second: true,
15
16
  dayPeriod: true,
16
- weekday: true,
17
17
  };
18
18
  const escapedCharacters = { start: '[', end: ']' };
19
19
  const formatTokenMap = {
@@ -22,6 +22,7 @@ const formatTokenMap = {
22
22
  YYYY: 'year',
23
23
  // Quarter
24
24
  Q: 'quarter',
25
+ Qo: 'quarter',
25
26
  // Month
26
27
  M: 'month',
27
28
  MM: 'month',
@@ -56,6 +57,16 @@ const formatTokenMap = {
56
57
  Z: { sectionType: 'timeZoneName', contentType: 'letter' },
57
58
  ZZ: { sectionType: 'timeZoneName', contentType: 'letter' },
58
59
  };
60
+ export const PAGE_STEP = {
61
+ year: 5,
62
+ quarter: 2,
63
+ month: 2,
64
+ weekday: 3,
65
+ day: 7,
66
+ hour: 2,
67
+ minute: 15,
68
+ second: 15,
69
+ };
59
70
  function getDateSectionConfigFromFormatToken(formatToken) {
60
71
  const config = formatTokenMap[formatToken];
61
72
  if (!config) {
@@ -85,7 +96,7 @@ function isFourDigitYearFormat(format) {
85
96
  function isHour12(format) {
86
97
  return dateTime().set('hour', 15).format(format) !== '15';
87
98
  }
88
- export function getSectionLimits(section, date) {
99
+ function getSectionLimits(section, date, placeholder) {
89
100
  const { type, format } = section;
90
101
  switch (type) {
91
102
  case 'year': {
@@ -100,8 +111,8 @@ export function getSectionLimits(section, date) {
100
111
  }
101
112
  case 'month': {
102
113
  return {
103
- minValue: 0,
104
- maxValue: 11,
114
+ minValue: 1,
115
+ maxValue: 12,
105
116
  };
106
117
  }
107
118
  case 'weekday': {
@@ -113,12 +124,12 @@ export function getSectionLimits(section, date) {
113
124
  case 'day': {
114
125
  return {
115
126
  minValue: 1,
116
- maxValue: date ? date.daysInMonth() : 31,
127
+ maxValue: 31,
117
128
  };
118
129
  }
119
130
  case 'hour': {
120
131
  if (isHour12(format)) {
121
- const isPM = date.hour() >= 12;
132
+ const isPM = (date.hour ?? placeholder.hour()) >= 12;
122
133
  return {
123
134
  minValue: isPM ? 12 : 0,
124
135
  maxValue: isPM ? 23 : 11,
@@ -139,32 +150,29 @@ export function getSectionLimits(section, date) {
139
150
  }
140
151
  return {};
141
152
  }
142
- export function getSectionValue(section, date) {
153
+ function getSectionValue(section, date) {
143
154
  const type = section.type;
144
155
  switch (type) {
145
156
  case 'year': {
157
+ if (date.year === null) {
158
+ return null;
159
+ }
146
160
  return isFourDigitYearFormat(section.format)
147
- ? date.year()
148
- : Number(date.format(section.format));
161
+ ? date.year
162
+ : Number(dateTime().set('year', date.year).format(section.format));
149
163
  }
150
164
  case 'quarter':
151
165
  case 'month':
166
+ case 'weekday':
152
167
  case 'hour':
153
168
  case 'minute':
154
- case 'second': {
155
- return date[type]();
156
- }
157
- case 'day': {
158
- return date.date();
159
- }
160
- case 'weekday': {
161
- return date.day();
162
- }
169
+ case 'second':
170
+ case 'day':
163
171
  case 'dayPeriod': {
164
- return date.hour() >= 12 ? 12 : 0;
172
+ return date[type];
165
173
  }
166
174
  }
167
- return undefined;
175
+ return null;
168
176
  }
169
177
  const TYPE_MAPPING = {
170
178
  weekday: 'day',
@@ -172,7 +180,7 @@ const TYPE_MAPPING = {
172
180
  dayPeriod: 'hour',
173
181
  };
174
182
  export function getDurationUnitFromSectionType(type) {
175
- if (type === 'literal' || type === 'timeZoneName' || type === 'unknown') {
183
+ if (!isEditableSectionType(type)) {
176
184
  throw new Error(`${type} section does not have duration unit.`);
177
185
  }
178
186
  if (type in TYPE_MAPPING) {
@@ -180,11 +188,42 @@ export function getDurationUnitFromSectionType(type) {
180
188
  }
181
189
  return type;
182
190
  }
183
- export function addSegment(section, date, amount) {
184
- var _a;
185
- let val = (_a = section.value) !== null && _a !== void 0 ? _a : 0;
191
+ export function addSegment(section, date, amount, placeholder) {
192
+ if (!isEditableSectionType(section.type)) {
193
+ throw new Error();
194
+ }
195
+ let val = date[section.type];
196
+ if (val === null) {
197
+ let newDate;
198
+ if (section.type === 'quarter' || section.type === 'month') {
199
+ newDate = date.set('month', placeholder.month() + 1);
200
+ }
201
+ else if (section.type === 'dayPeriod') {
202
+ newDate = date.set('hour', placeholder.hour());
203
+ }
204
+ else if (section.type === 'weekday' && date.day && date.day !== placeholder.date()) {
205
+ newDate = date.set('weekday', placeholder.set({ date: date.day }).day());
206
+ }
207
+ else {
208
+ newDate = date.set(section.type, placeholder[getDurationUnitFromSectionType(section.type)]());
209
+ }
210
+ if (newDate.weekday !== null &&
211
+ (section.type === 'day' ||
212
+ section.type === 'month' ||
213
+ section.type === 'quarter' ||
214
+ section.type === 'year') &&
215
+ newDate.year !== null &&
216
+ newDate.month !== null &&
217
+ newDate.day !== null) {
218
+ newDate = newDate.set('weekday', placeholder
219
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
220
+ .day());
221
+ }
222
+ return newDate;
223
+ }
186
224
  if (section.type === 'dayPeriod') {
187
- val = date.hour() + (date.hour() >= 12 ? -12 : 12);
225
+ const hour = date.hour ?? placeholder.hour();
226
+ val = hour + (hour >= 12 ? -12 : 12);
188
227
  }
189
228
  else {
190
229
  val = val + amount;
@@ -195,48 +234,71 @@ export function addSegment(section, date, amount) {
195
234
  val = ((val - min + length) % length) + min;
196
235
  }
197
236
  }
237
+ if (section.type === 'dayPeriod') {
238
+ return date.set('hour', val);
239
+ }
198
240
  if (section.type === 'year' && !isFourDigitYearFormat(section.format)) {
199
241
  val = dateTime({ input: `${val}`.padStart(2, '0'), format: section.format }).year();
200
242
  }
201
- if (section.type === 'quarter') {
202
- return date.set(getDurationUnitFromSectionType('month'), val * 3 - 1);
243
+ const newDate = date.set(section.type, val);
244
+ if (newDate.year !== null && newDate.month !== null && newDate.day !== null) {
245
+ if (date.weekday !== null &&
246
+ (section.type === 'day' ||
247
+ section.type === 'month' ||
248
+ section.type === 'quarter' ||
249
+ section.type === 'year')) {
250
+ newDate.weekday = placeholder
251
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
252
+ .day();
253
+ }
254
+ else if (section.type === 'weekday') {
255
+ const d = placeholder
256
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
257
+ .set({ day: val });
258
+ newDate.year = d.year();
259
+ newDate.month = d.month();
260
+ newDate.day = d.date();
261
+ }
203
262
  }
204
- const type = getDurationUnitFromSectionType(section.type);
205
- return date.set(type, val);
263
+ return newDate;
206
264
  }
207
- export function setSegment(section, date, amount) {
265
+ export function setSegment(section, date, amount, placeholder) {
208
266
  const type = section.type;
267
+ let newDate;
209
268
  switch (type) {
210
269
  case 'year': {
211
- return date.set('year', isFourDigitYearFormat(section.format)
270
+ newDate = date.set('year', isFourDigitYearFormat(section.format)
212
271
  ? amount
213
272
  : dateTime({
214
273
  input: `${amount}`.padStart(2, '0'),
215
274
  format: section.format,
216
275
  }).year());
276
+ break;
217
277
  }
218
- case 'quarter': {
219
- return date.set(getDurationUnitFromSectionType('month'), amount * 3 - 1);
220
- }
221
- case 'day':
278
+ case 'quarter':
279
+ case 'month':
222
280
  case 'weekday':
223
- case 'month': {
224
- return date.set(getDurationUnitFromSectionType(type), amount);
281
+ case 'day': {
282
+ newDate = date.set(type, amount);
283
+ break;
225
284
  }
226
285
  case 'dayPeriod': {
227
- const hours = date.hour();
286
+ const hours = date.hour ?? placeholder.hour();
228
287
  const wasPM = hours >= 12;
229
- const isPM = amount >= 12;
288
+ const isPM = amount === 1;
230
289
  if (isPM === wasPM) {
231
- return date;
290
+ newDate = date;
232
291
  }
233
- return date.set('hour', wasPM ? hours - 12 : hours + 12);
292
+ else {
293
+ newDate = date.set('hour', wasPM ? hours - 12 : hours + 12);
294
+ }
295
+ break;
234
296
  }
235
297
  case 'hour': {
236
298
  // In 12 hour time, ensure that AM/PM does not change
237
299
  let sectionAmount = amount;
238
300
  if (section.minValue === 12 || section.maxValue === 11) {
239
- const hours = date.hour();
301
+ const hours = date.hour ?? placeholder.hour();
240
302
  const wasPM = hours >= 12;
241
303
  if (!wasPM && sectionAmount === 12) {
242
304
  sectionAmount = 0;
@@ -245,14 +307,36 @@ export function setSegment(section, date, amount) {
245
307
  sectionAmount += 12;
246
308
  }
247
309
  }
248
- return date.set('hour', sectionAmount);
310
+ newDate = date.set('hour', sectionAmount);
311
+ break;
249
312
  }
250
313
  case 'minute':
251
314
  case 'second': {
252
- return date.set(type, amount);
315
+ newDate = date.set(type, amount);
316
+ break;
317
+ }
318
+ default: {
319
+ newDate = date;
320
+ break;
253
321
  }
254
322
  }
255
- return date;
323
+ if (newDate.year !== null && newDate.month !== null && newDate.day !== null) {
324
+ if (newDate.weekday !== null &&
325
+ (type === 'day' || type === 'month' || type === 'quarter' || type === 'year')) {
326
+ newDate = newDate.set('weekday', placeholder
327
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
328
+ .day());
329
+ }
330
+ else if (type === 'weekday') {
331
+ const d = placeholder
332
+ .set({ date: newDate.day, month: newDate.month, year: newDate.year })
333
+ .set({ day: amount });
334
+ newDate.year = d.year();
335
+ newDate.month = d.month();
336
+ newDate.day = d.date();
337
+ }
338
+ }
339
+ return newDate;
256
340
  }
257
341
  function doesSectionHaveLeadingZeros(contentType, sectionType, format) {
258
342
  if (contentType !== 'digit') {
@@ -299,7 +383,7 @@ function getSectionPlaceholder(sectionConfig, currentTokenValue, t) {
299
383
  return t('year_placeholder').repeat(dateTime().format(currentTokenValue).length);
300
384
  }
301
385
  case 'quarter': {
302
- return t('quarter_placeholder');
386
+ return t('quarter_placeholder').repeat(currentTokenValue.length);
303
387
  }
304
388
  case 'month': {
305
389
  return t('month_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);
@@ -308,7 +392,7 @@ function getSectionPlaceholder(sectionConfig, currentTokenValue, t) {
308
392
  return t('day_placeholder').repeat(2);
309
393
  }
310
394
  case 'weekday': {
311
- return t('weekday_placeholder').repeat(sectionConfig.contentType === 'letter' ? 4 : 2);
395
+ return t('weekday_placeholder').repeat(sectionConfig.contentType === 'letter' ? currentTokenValue.length : 2);
312
396
  }
313
397
  case 'hour': {
314
398
  return t('hour_placeholder').repeat(2);
@@ -353,7 +437,7 @@ export function splitFormatIntoSections(format, t = i18n, lang = 'en') {
353
437
  }
354
438
  else {
355
439
  if (!isSeparator) {
356
- addFormatSection(sections, currentTokenValue, t);
440
+ addFormatSection(sections, currentTokenValue, t, lang);
357
441
  currentTokenValue = '';
358
442
  }
359
443
  isSeparator = true;
@@ -370,18 +454,24 @@ export function splitFormatIntoSections(format, t = i18n, lang = 'en') {
370
454
  addLiteralSection(sections, currentTokenValue);
371
455
  }
372
456
  else {
373
- addFormatSection(sections, currentTokenValue, t);
457
+ addFormatSection(sections, currentTokenValue, t, lang);
374
458
  }
375
459
  }
376
460
  return sections;
377
461
  }
378
- function addFormatSection(sections, token, t) {
462
+ function addFormatSection(sections, token, t, lang) {
379
463
  if (!token) {
380
464
  return;
381
465
  }
382
466
  const sectionConfig = getDateSectionConfigFromFormatToken(token);
383
467
  const hasLeadingZeros = doesSectionHaveLeadingZeros(sectionConfig.contentType, sectionConfig.type, token);
384
- sections.push(Object.assign(Object.assign({}, sectionConfig), { format: token, placeholder: getSectionPlaceholder(sectionConfig, token, t), options: getSectionOptions(sectionConfig, token), hasLeadingZeros }));
468
+ sections.push({
469
+ ...sectionConfig,
470
+ format: token,
471
+ placeholder: getSectionPlaceholder(sectionConfig, token, t),
472
+ options: getSectionOptions(sectionConfig, token, lang),
473
+ hasLeadingZeros,
474
+ });
385
475
  }
386
476
  function addLiteralSection(sections, token) {
387
477
  if (!token) {
@@ -395,11 +485,11 @@ function addLiteralSection(sections, token) {
395
485
  hasLeadingZeros: false,
396
486
  });
397
487
  }
398
- function getSectionOptions(section, token) {
488
+ function getSectionOptions(section, token, lang) {
399
489
  switch (section.type) {
400
490
  case 'month': {
401
491
  const format = section.contentType === 'letter' ? token : 'MMMM';
402
- let date = dateTime().startOf('year');
492
+ let date = dateTime({ lang }).startOf('year');
403
493
  const options = [];
404
494
  for (let i = 0; i < 12; i++) {
405
495
  options.push(date.format(format).toLocaleUpperCase());
@@ -418,7 +508,7 @@ function getSectionOptions(section, token) {
418
508
  }
419
509
  case 'weekday': {
420
510
  const format = section.contentType === 'letter' ? token : 'dddd';
421
- let date = dateTime().day(0);
511
+ let date = dateTime({ lang }).day(0);
422
512
  const options = [];
423
513
  for (let i = 0; i < 7; i++) {
424
514
  options.push(date.format(format).toLocaleUpperCase());
@@ -432,68 +522,53 @@ function getSectionOptions(section, token) {
432
522
  export function cleanString(dirtyString) {
433
523
  return dirtyString.replace(/[\u2066\u2067\u2068\u2069]/g, '');
434
524
  }
435
- export 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;
525
+ export function getEditableSections(sections, value, placeholder) {
526
+ return sections.map((section) => toEditableSection(section, value, placeholder));
461
527
  }
462
- export function isEditableSection(section) {
463
- var _a;
464
- return (_a = EDITABLE_SEGMENTS[section.type]) !== null && _a !== void 0 ? _a : false;
528
+ export function isEditableSectionType(type) {
529
+ return EDITABLE_SEGMENTS[type] ?? false;
465
530
  }
466
- export function toEditableSection(section, value, validSegments, position, previousEditableSection) {
467
- const isEditable = isEditableSection(section);
531
+ export function toEditableSection(section, value, placeholder) {
468
532
  let renderedValue = section.placeholder;
469
- if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {
470
- renderedValue = value.format(section.format);
533
+ let val = isEditableSectionType(section.type) ? value[section.type] : null;
534
+ if (section.type === 'timeZoneName') {
535
+ renderedValue = placeholder.format(section.format);
536
+ }
537
+ else if (isEditableSectionType(section.type) && val !== null) {
538
+ const sectionDate = placeholder.set({ month: 0, date: 1, hour: 0, minute: 0, second: 0 });
539
+ let sectionType = getDurationUnitFromSectionType(section.type);
540
+ if (section.type === 'month') {
541
+ val -= 1;
542
+ }
543
+ else if (section.type === 'quarter') {
544
+ sectionType = 'month';
545
+ val = (val - 1) * 3;
546
+ }
547
+ else if (section.type === 'dayPeriod') {
548
+ if (value.hour === null) {
549
+ val = val === 1 ? 12 : 0;
550
+ }
551
+ else {
552
+ val = value.hour;
553
+ }
554
+ }
555
+ renderedValue = sectionDate.set(sectionType, val).format(section.format);
471
556
  if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {
472
557
  renderedValue = renderedValue.padStart(section.placeholder.length, '0');
473
558
  }
474
559
  }
475
- // use bidirectional context to allow the browser autodetect text direction
476
- renderedValue = '\u2068' + renderedValue + '\u2069';
477
- const sectionLength = renderedValue.length;
478
- 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));
560
+ const newSection = {
561
+ ...section,
562
+ value: getSectionValue(section, value),
563
+ textValue: renderedValue,
564
+ ...getSectionLimits(section, value, placeholder),
565
+ };
479
566
  return newSection;
480
567
  }
481
- export function getCurrentEditableSectionIndex(sections, selectedSections) {
482
- const currentIndex = selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;
483
- const section = sections[currentIndex];
484
- if (section && !EDITABLE_SEGMENTS[section.type]) {
485
- return section.nextEditableSection;
486
- }
487
- return section ? currentIndex : -1;
488
- }
489
- export function formatSections(sections) {
490
- // use ltr direction context to get predictable navigation inside input
491
- return '\u2066' + sections.map((s) => s.textValue).join('') + '\u2069';
492
- }
493
568
  function parseDate(options) {
494
569
  let date = dateTime(options);
495
570
  if (!date.isValid()) {
496
- date = dateTime(Object.assign(Object.assign({}, options), { format: undefined }));
571
+ date = dateTime({ ...options, format: undefined });
497
572
  }
498
573
  return date;
499
574
  }
@@ -519,9 +594,6 @@ export function parseDateFromString(str, format, timeZone) {
519
594
  }
520
595
  return date;
521
596
  }
522
- export function isAllSegmentsValid(allSegments, validSegments) {
523
- return Object.keys(allSegments).every((key) => validSegments[key]);
524
- }
525
597
  export function useFormatSections(format) {
526
598
  const { t } = i18n.useTranslation();
527
599
  const { lang } = useLang();
@@ -536,21 +608,20 @@ export function useFormatSections(format) {
536
608
  const dateUnits = ['day', 'month', 'quarter', 'year'];
537
609
  const timeUnits = ['second', 'minute', 'hour'];
538
610
  export function getFormatInfo(sections) {
539
- var _a, _b;
540
611
  const availableUnits = {};
541
612
  let hasDate = false;
542
613
  let hasTime = false;
543
614
  let minDateUnitIndex = dateUnits.length - 1;
544
615
  let minTimeUnitIndex = timeUnits.length - 1;
545
616
  for (const s of sections) {
546
- if (!isEditableSection(s)) {
617
+ if (!isEditableSectionType(s.type)) {
547
618
  continue;
548
619
  }
549
620
  const dateUnitIndex = dateUnits.indexOf(s.type);
550
621
  const timeUnitIndex = timeUnits.indexOf(s.type);
551
622
  availableUnits[s.type] = true;
552
- hasDate || (hasDate = dateUnitIndex !== -1);
553
- hasTime || (hasTime = timeUnitIndex !== -1);
623
+ hasDate ||= dateUnitIndex !== -1;
624
+ hasTime ||= timeUnitIndex !== -1;
554
625
  minDateUnitIndex =
555
626
  dateUnitIndex === -1 ? minDateUnitIndex : Math.min(dateUnitIndex, minDateUnitIndex);
556
627
  minTimeUnitIndex =
@@ -560,8 +631,8 @@ export function getFormatInfo(sections) {
560
631
  availableUnits,
561
632
  hasDate,
562
633
  hasTime,
563
- minDateUnit: (_a = dateUnits[minDateUnitIndex]) !== null && _a !== void 0 ? _a : 'day',
564
- minTimeUnit: (_b = timeUnits[minTimeUnitIndex]) !== null && _b !== void 0 ? _b : 'second',
634
+ minDateUnit: dateUnits[minDateUnitIndex] ?? 'day',
635
+ minTimeUnit: timeUnits[minTimeUnitIndex] ?? 'second',
565
636
  };
566
637
  }
567
638
  export function adjustDateToFormat(date, formatInfo, method = 'startOf') {
@@ -577,21 +648,4 @@ export function adjustDateToFormat(date, formatInfo, method = 'startOf') {
577
648
  }
578
649
  return newDate;
579
650
  }
580
- export function markValidSection(allSections, editableSections, unit) {
581
- const validSections = Object.assign({}, editableSections);
582
- validSections[unit] = true;
583
- if (validSections.day && validSections.month && validSections.year && allSections.weekday) {
584
- validSections.weekday = true;
585
- }
586
- if (validSections.month && allSections.quarter) {
587
- validSections.quarter = true;
588
- }
589
- if (validSections.quarter && allSections.month) {
590
- validSections.month = true;
591
- }
592
- if (validSections.hour && allSections.dayPeriod) {
593
- validSections.dayPeriod = true;
594
- }
595
- return validSections;
596
- }
597
651
  //# sourceMappingURL=utils.js.map