@vkontakte/vkui 7.3.8 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts +1 -1
  2. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/AppRoot/ScrollContext.js +2 -2
  5. package/dist/components/AppRoot/ScrollContext.js.map +1 -1
  6. package/dist/components/Banner/Banner.d.ts +2 -2
  7. package/dist/components/Banner/Banner.d.ts.map +1 -1
  8. package/dist/components/Banner/Banner.js.map +1 -1
  9. package/dist/components/Button/Button.d.ts +2 -2
  10. package/dist/components/Button/Button.d.ts.map +1 -1
  11. package/dist/components/Button/Button.js.map +1 -1
  12. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  13. package/dist/components/Calendar/Calendar.js +9 -7
  14. package/dist/components/Calendar/Calendar.js.map +1 -1
  15. package/dist/components/CalendarRange/CalendarRange.d.ts +9 -2
  16. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  17. package/dist/components/CalendarRange/CalendarRange.js +48 -35
  18. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  19. package/dist/components/CalendarRange/types.d.ts +2 -0
  20. package/dist/components/CalendarRange/types.d.ts.map +1 -0
  21. package/dist/components/CalendarRange/types.js +3 -0
  22. package/dist/components/CalendarRange/types.js.map +1 -0
  23. package/dist/components/CalendarRange/utils.d.ts +29 -0
  24. package/dist/components/CalendarRange/utils.d.ts.map +1 -0
  25. package/dist/components/CalendarRange/utils.js +123 -0
  26. package/dist/components/CalendarRange/utils.js.map +1 -0
  27. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  28. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  29. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  30. package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
  31. package/dist/components/ChipsInput/useChipsInput.js +21 -2
  32. package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
  33. package/dist/components/ChipsInputBase/types.d.ts +5 -1
  34. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  35. package/dist/components/ChipsInputBase/types.js.map +1 -1
  36. package/dist/components/Clickable/Clickable.d.ts +4 -0
  37. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  38. package/dist/components/Clickable/Clickable.js +9 -5
  39. package/dist/components/Clickable/Clickable.js.map +1 -1
  40. package/dist/components/Clickable/RealClickable.d.ts +1 -1
  41. package/dist/components/Clickable/RealClickable.d.ts.map +1 -1
  42. package/dist/components/Clickable/RealClickable.js +3 -2
  43. package/dist/components/Clickable/RealClickable.js.map +1 -1
  44. package/dist/components/ContentCard/ContentCard.d.ts +2 -2
  45. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  46. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  47. package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
  48. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  49. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  50. package/dist/components/DateInput/DateInput.d.ts +1 -1
  51. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  52. package/dist/components/DateInput/DateInput.js +48 -50
  53. package/dist/components/DateInput/DateInput.js.map +1 -1
  54. package/dist/components/DateRangeInput/DateRangeInput.d.ts +22 -2
  55. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  56. package/dist/components/DateRangeInput/DateRangeInput.js +159 -66
  57. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  58. package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
  59. package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  60. package/dist/components/FocusTrap/FocusTrap.js +6 -3
  61. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  62. package/dist/components/HorizontalCell/HorizontalCell.d.ts +2 -2
  63. package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
  64. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  65. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts +2 -2
  66. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts.map +1 -1
  67. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
  68. package/dist/components/IconButton/IconButton.d.ts +2 -2
  69. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  70. package/dist/components/IconButton/IconButton.js.map +1 -1
  71. package/dist/components/InputLike/InputLike.d.ts +1 -1
  72. package/dist/components/InputLike/InputLike.d.ts.map +1 -1
  73. package/dist/components/InputLike/InputLike.js +7 -6
  74. package/dist/components/InputLike/InputLike.js.map +1 -1
  75. package/dist/components/Link/Link.d.ts +2 -2
  76. package/dist/components/Link/Link.d.ts.map +1 -1
  77. package/dist/components/Link/Link.js +2 -1
  78. package/dist/components/Link/Link.js.map +1 -1
  79. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  80. package/dist/components/MiniInfoCell/MiniInfoCell.js +1 -8
  81. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  82. package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts +2 -2
  83. package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts.map +1 -1
  84. package/dist/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
  85. package/dist/components/NumberInputLike/NumberInputLike.d.ts +8 -0
  86. package/dist/components/NumberInputLike/NumberInputLike.d.ts.map +1 -0
  87. package/dist/components/NumberInputLike/NumberInputLike.js +45 -0
  88. package/dist/components/NumberInputLike/NumberInputLike.js.map +1 -0
  89. package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts +2 -2
  90. package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts.map +1 -1
  91. package/dist/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
  92. package/dist/components/PanelHeader/PanelHeader.d.ts +3 -1
  93. package/dist/components/PanelHeader/PanelHeader.d.ts.map +1 -1
  94. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  95. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts +2 -2
  96. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  97. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  98. package/dist/components/Radio/Radio.d.ts +2 -2
  99. package/dist/components/Radio/Radio.d.ts.map +1 -1
  100. package/dist/components/Radio/Radio.js.map +1 -1
  101. package/dist/components/Removable/Removable.d.ts +1 -4
  102. package/dist/components/Removable/Removable.d.ts.map +1 -1
  103. package/dist/components/Removable/Removable.js +39 -116
  104. package/dist/components/Removable/Removable.js.map +1 -1
  105. package/dist/components/Removable/RemovableIos.d.ts +10 -0
  106. package/dist/components/Removable/RemovableIos.d.ts.map +1 -0
  107. package/dist/components/Removable/RemovableIos.js +124 -0
  108. package/dist/components/Removable/RemovableIos.js.map +1 -0
  109. package/dist/components/RichCell/RichCell.d.ts +2 -2
  110. package/dist/components/RichCell/RichCell.d.ts.map +1 -1
  111. package/dist/components/RichCell/RichCell.js.map +1 -1
  112. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  113. package/dist/components/ScreenSpinner/ScreenSpinner.js +4 -2
  114. package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  115. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +2 -2
  116. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
  117. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js +4 -3
  118. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  119. package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
  120. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  121. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  122. package/dist/components/SimpleCell/SimpleCell.d.ts +2 -2
  123. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  124. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  125. package/dist/components/Skeleton/Skeleton.d.ts +5 -1
  126. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  127. package/dist/components/Skeleton/Skeleton.js +7 -4
  128. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  129. package/dist/components/Spinner/Spinner.d.ts +5 -1
  130. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  131. package/dist/components/Spinner/Spinner.js +6 -3
  132. package/dist/components/Spinner/Spinner.js.map +1 -1
  133. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -2
  134. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts.map +1 -1
  135. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  136. package/dist/components/Tabs/Tabs.d.ts +13 -9
  137. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  138. package/dist/components/Tabs/Tabs.js +14 -10
  139. package/dist/components/Tabs/Tabs.js.map +1 -1
  140. package/dist/components/Tabs/TabsController.d.ts +7 -0
  141. package/dist/components/Tabs/TabsController.d.ts.map +1 -0
  142. package/dist/components/Tabs/TabsController.js +19 -0
  143. package/dist/components/Tabs/TabsController.js.map +1 -0
  144. package/dist/components/Tabs/TabsModeContext.d.ts +13 -0
  145. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -0
  146. package/dist/components/Tabs/TabsModeContext.js +11 -0
  147. package/dist/components/Tabs/TabsModeContext.js.map +1 -0
  148. package/dist/components/TabsItem/TabsItem.d.ts +3 -3
  149. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  150. package/dist/components/TabsItem/TabsItem.js +21 -6
  151. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  152. package/dist/components/Tappable/Tappable.d.ts +1 -0
  153. package/dist/components/Tappable/Tappable.d.ts.map +1 -1
  154. package/dist/components/Tappable/Tappable.js.map +1 -1
  155. package/dist/components/ToolButton/ToolButton.d.ts +2 -2
  156. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  157. package/dist/components/ToolButton/ToolButton.js.map +1 -1
  158. package/dist/components/View/ViewInfinite.js.map +1 -1
  159. package/dist/components.css +1 -1
  160. package/dist/components.css.map +1 -1
  161. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  162. package/dist/cssm/components/AppRoot/ScrollContext.js +2 -2
  163. package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
  164. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  165. package/dist/cssm/components/Button/Button.js.map +1 -1
  166. package/dist/cssm/components/Calendar/Calendar.js +9 -7
  167. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  168. package/dist/cssm/components/CalendarRange/CalendarRange.js +44 -31
  169. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  170. package/dist/cssm/components/CalendarRange/types.js +3 -0
  171. package/dist/cssm/components/CalendarRange/types.js.map +1 -0
  172. package/dist/cssm/components/CalendarRange/utils.js +122 -0
  173. package/dist/cssm/components/CalendarRange/utils.js.map +1 -0
  174. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  175. package/dist/cssm/components/ChipsInput/useChipsInput.js +21 -2
  176. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
  177. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  178. package/dist/cssm/components/Clickable/Clickable.js +4 -3
  179. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  180. package/dist/cssm/components/Clickable/RealClickable.js +1 -1
  181. package/dist/cssm/components/Clickable/RealClickable.js.map +1 -1
  182. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  183. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  184. package/dist/cssm/components/DateInput/DateInput.js +45 -46
  185. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  186. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +148 -58
  187. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  188. package/dist/cssm/components/FocusTrap/FocusTrap.js +4 -2
  189. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  190. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  191. package/dist/cssm/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
  192. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
  193. package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
  194. package/dist/cssm/components/ImageBase/ImageBase.module.css +2 -3
  195. package/dist/cssm/components/InputLike/InputLike.js +3 -3
  196. package/dist/cssm/components/InputLike/InputLike.js.map +1 -1
  197. package/dist/cssm/components/Link/Link.js +1 -0
  198. package/dist/cssm/components/Link/Link.js.map +1 -1
  199. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +1 -8
  200. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  201. package/dist/cssm/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
  202. package/dist/cssm/components/NumberInputLike/NumberInputLike.js +33 -0
  203. package/dist/cssm/components/NumberInputLike/NumberInputLike.js.map +1 -0
  204. package/dist/cssm/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
  205. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  206. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  207. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  208. package/dist/cssm/components/Removable/Removable.js +39 -115
  209. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  210. package/dist/cssm/components/Removable/Removable.module.css +9 -0
  211. package/dist/cssm/components/Removable/RemovableIos.js +118 -0
  212. package/dist/cssm/components/Removable/RemovableIos.js.map +1 -0
  213. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  214. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +2 -1
  215. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  216. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js +3 -2
  217. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  218. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  219. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  220. package/dist/cssm/components/Skeleton/Skeleton.js +6 -3
  221. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  222. package/dist/cssm/components/Spinner/Spinner.js +5 -2
  223. package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
  224. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  225. package/dist/cssm/components/Tabs/Tabs.js +10 -9
  226. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  227. package/dist/cssm/components/Tabs/TabsController.js +19 -0
  228. package/dist/cssm/components/Tabs/TabsController.js.map +1 -0
  229. package/dist/cssm/components/Tabs/TabsModeContext.js +11 -0
  230. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -0
  231. package/dist/cssm/components/TabsItem/TabsItem.js +17 -4
  232. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  233. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  234. package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
  235. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  236. package/dist/cssm/hooks/useCalendar.js +0 -10
  237. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  238. package/dist/cssm/hooks/useDateInput.js +28 -17
  239. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  240. package/dist/cssm/hooks/useEventListener.js.map +1 -1
  241. package/dist/cssm/hooks/useExternRef.js.map +1 -1
  242. package/dist/cssm/hooks/useFocusTrap.js +2 -2
  243. package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
  244. package/dist/cssm/hooks/useMutationObserver.js +6 -5
  245. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  246. package/dist/cssm/lib/dom.js +7 -1
  247. package/dist/cssm/lib/dom.js.map +1 -1
  248. package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
  249. package/dist/cssm/lib/floating/index.js.map +1 -1
  250. package/dist/cssm/lib/floating/types/common.js.map +1 -1
  251. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  252. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  253. package/dist/cssm/styles/animationVisibilityDelay.js +10 -0
  254. package/dist/cssm/styles/animationVisibilityDelay.js.map +1 -0
  255. package/dist/cssm/styles/animationVisibilityDelay.module.css +13 -0
  256. package/dist/cssm/styles/themes.css +4 -2
  257. package/dist/hooks/useCalendar.d.ts +0 -3
  258. package/dist/hooks/useCalendar.d.ts.map +1 -1
  259. package/dist/hooks/useCalendar.js +0 -10
  260. package/dist/hooks/useCalendar.js.map +1 -1
  261. package/dist/hooks/useDateInput.d.ts.map +1 -1
  262. package/dist/hooks/useDateInput.js +29 -18
  263. package/dist/hooks/useDateInput.js.map +1 -1
  264. package/dist/hooks/useEventListener.js.map +1 -1
  265. package/dist/hooks/useExternRef.js.map +1 -1
  266. package/dist/hooks/useFocusTrap.d.ts +5 -1
  267. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  268. package/dist/hooks/useFocusTrap.js +2 -2
  269. package/dist/hooks/useFocusTrap.js.map +1 -1
  270. package/dist/hooks/useMutationObserver.d.ts +2 -1
  271. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  272. package/dist/hooks/useMutationObserver.js +6 -5
  273. package/dist/hooks/useMutationObserver.js.map +1 -1
  274. package/dist/lib/dom.d.ts.map +1 -1
  275. package/dist/lib/dom.js +7 -1
  276. package/dist/lib/dom.js.map +1 -1
  277. package/dist/lib/floating/customResizeObserver.js.map +1 -1
  278. package/dist/lib/floating/index.d.ts +1 -1
  279. package/dist/lib/floating/index.d.ts.map +1 -1
  280. package/dist/lib/floating/index.js.map +1 -1
  281. package/dist/lib/floating/types/common.d.ts +1 -1
  282. package/dist/lib/floating/types/common.d.ts.map +1 -1
  283. package/dist/lib/floating/types/common.js.map +1 -1
  284. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  285. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  286. package/dist/styles/animationVisibilityDelay.d.ts +3 -0
  287. package/dist/styles/animationVisibilityDelay.d.ts.map +1 -0
  288. package/dist/styles/animationVisibilityDelay.js +10 -0
  289. package/dist/styles/animationVisibilityDelay.js.map +1 -0
  290. package/dist/vkui.css +1 -1
  291. package/dist/vkui.css.map +1 -1
  292. package/package.json +3 -6
  293. package/src/components/ActionSheet/ActionSheet.tsx +4 -1
  294. package/src/components/AppRoot/AppRoot.mdx +1 -1
  295. package/src/components/AppRoot/ScrollContext.tsx +2 -2
  296. package/src/components/Banner/Banner.tsx +2 -2
  297. package/src/components/Button/Button.tsx +2 -2
  298. package/src/components/Calendar/Calendar.tsx +8 -7
  299. package/src/components/CalendarRange/CalendarRange.tsx +65 -42
  300. package/src/components/CalendarRange/types.ts +1 -0
  301. package/src/components/CalendarRange/utils.ts +190 -0
  302. package/src/components/Checkbox/Checkbox.tsx +2 -2
  303. package/src/components/ChipsInput/useChipsInput.ts +23 -2
  304. package/src/components/ChipsInputBase/types.ts +5 -1
  305. package/src/components/Clickable/Clickable.tsx +12 -4
  306. package/src/components/Clickable/RealClickable.tsx +1 -0
  307. package/src/components/ContentCard/ContentCard.tsx +2 -2
  308. package/src/components/CustomSelect/CustomSelect.tsx +11 -7
  309. package/src/components/DateInput/DateInput.tsx +41 -43
  310. package/src/components/DateRangeInput/DateRangeInput.tsx +183 -65
  311. package/src/components/FocusTrap/FocusTrap.tsx +3 -0
  312. package/src/components/FormItem/FormItemTop/FormItemTop.mdx +1 -1
  313. package/src/components/HorizontalCell/HorizontalCell.tsx +2 -2
  314. package/src/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.tsx +2 -2
  315. package/src/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
  316. package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
  317. package/src/components/IconButton/IconButton.tsx +2 -2
  318. package/src/components/ImageBase/ImageBase.module.css +2 -3
  319. package/src/components/ImageBase/ImageBase.module.css.d.ts.map +1 -1
  320. package/src/components/InputLike/InputLike.tsx +4 -3
  321. package/src/components/Link/Link.tsx +3 -2
  322. package/src/components/MiniInfoCell/MiniInfoCell.tsx +2 -7
  323. package/src/components/ModalOutsideButton/ModalOutsideButton.tsx +2 -2
  324. package/src/components/NumberInputLike/NumberInputLike.tsx +56 -0
  325. package/src/components/Pagination/PaginationPage/PaginationPageButton.tsx +2 -2
  326. package/src/components/PanelHeader/PanelHeader.tsx +3 -1
  327. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +2 -2
  328. package/src/components/Radio/Radio.tsx +2 -2
  329. package/src/components/Removable/Removable.module.css +9 -0
  330. package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
  331. package/src/components/Removable/Removable.tsx +50 -120
  332. package/src/components/Removable/RemovableIos.tsx +135 -0
  333. package/src/components/RichCell/RichCell.tsx +2 -2
  334. package/src/components/ScreenSpinner/ScreenSpinner.tsx +8 -1
  335. package/src/components/ScreenSpinner/ScreenSpinnerContainer.tsx +4 -1
  336. package/src/components/SelectionControl/SelectionControl.tsx +2 -2
  337. package/src/components/SimpleCell/SimpleCell.tsx +2 -2
  338. package/src/components/Skeleton/Skeleton.tsx +15 -2
  339. package/src/components/Spinner/Spinner.tsx +13 -1
  340. package/src/components/SubnavigationButton/SubnavigationButton.tsx +2 -2
  341. package/src/components/Tabs/Tabs.tsx +23 -19
  342. package/src/components/Tabs/TabsController.ts +37 -0
  343. package/src/components/Tabs/TabsModeContext.ts +24 -0
  344. package/src/components/TabsItem/TabsItem.tsx +22 -5
  345. package/src/components/Tappable/Tappable.tsx +5 -0
  346. package/src/components/ToolButton/ToolButton.tsx +2 -2
  347. package/src/components/UnstyledTextField/UnstyledTextField.mdx +1 -1
  348. package/src/hooks/useCalendar.ts +0 -12
  349. package/src/hooks/useDateInput.ts +21 -12
  350. package/src/hooks/useFocusTrap.ts +10 -1
  351. package/src/hooks/useMutationObserver.ts +7 -4
  352. package/src/lib/dom.tsx +7 -1
  353. package/src/lib/floating/index.ts +2 -0
  354. package/src/lib/floating/types/common.ts +2 -0
  355. package/src/styles/animationVisibilityDelay.module.css +13 -0
  356. package/src/styles/animationVisibilityDelay.module.css.d.ts.map +1 -0
  357. package/src/styles/animationVisibilityDelay.ts +13 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { startOfDay, startOfMinute } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: (value?: Date) => void;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: (date: Date | undefined) => React.ReactNode;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n /**\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n accessible,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n 'aria-label': ariaLabel = '',\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n updateValue(\n parse(formattedValue, mask, value ?? (enableTime ? startOfMinute(now) : startOfDay(now))),\n );\n }\n },\n [enableTime, maxElement, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n if (!value) {\n return;\n }\n if (enableTime) {\n setInternalValue(value);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = value\n ? new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <React.Fragment>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n onClick={onClick}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={-1}\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <InputLike\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeDayLabel}\n data-testid={dayFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={31}\n aria-valuetext={internalValue[0]}\n aria-label={changeDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n value={internalValue[1]}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={12}\n aria-valuetext={internalValue[1]}\n aria-label={changeMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={275750}\n aria-valuetext={internalValue[2]}\n aria-label={changeYearLabel}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={24}\n aria-valuetext={internalValue[3]}\n aria-label={changeHoursLabel}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n role=\"spinbutton\"\n aria-valuemin={1}\n aria-valuemax={59}\n aria-valuetext={internalValue[4]}\n aria-label={changeMinutesLabel}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n captureEscapeKeyboardEvent={false}\n >\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","startOfDay","startOfMinute","useAdaptivity","useDateInput","useExternRef","format","isMatch","parse","useIsomorphicLayoutEffect","Calendar","useConfigProvider","FocusTrap","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","VisuallyHidden","useDateInputValue","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","disableCalendar","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","ariaLabel","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","sizeY","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","Intl","DateTimeFormat","weekday","year","month","day","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","Fragment","hoverMode","label","data-testid","div","Component","readOnly","aria-hidden","tabIndex","normalize","onKeyDown","onElementSelect","aria-valuemin","aria-valuemax","aria-valuetext","aria-label","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","onClose","Boolean","captureEscapeKeyboardEvent"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { startOfDay, startOfMinute } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: (value?: Date) => void;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: (date: Date | undefined) => React.ReactNode;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string;\n /**\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\nconst CALENDAR_MUTATION_OBSERVER_OPTIONS: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex'],\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n updateValue(\n parse(formattedValue, mask, value ?? (enableTime ? startOfMinute(now) : startOfDay(now))),\n );\n }\n },\n [enableTime, maxElement, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n if (!value) {\n return;\n }\n if (enableTime) {\n setInternalValue(value);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = value\n ? new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <React.Fragment>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value && !readOnly ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n captureEscapeKeyboardEvent={false}\n mutationObserverOptions={CALENDAR_MUTATION_OBSERVER_OPTIONS}\n >\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","startOfDay","startOfMinute","useAdaptivity","useDateInput","useExternRef","format","isMatch","parse","useIsomorphicLayoutEffect","Calendar","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","CALENDAR_MUTATION_OBSERVER_OPTIONS","childList","subtree","attributes","attributeFilter","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","sizeY","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","Intl","DateTimeFormat","weekday","year","month","day","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","onClose","Boolean","captureEscapeKeyboardEvent","mutationObserverOptions","aria-label"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
2
3
  import type { PlacementWithAuto } from '../../lib/floating';
3
4
  import type { HasRootRef } from '../../types';
4
5
  import { type CalendarRangeProps, type CalendarRangeTestsProps } from '../CalendarRange/CalendarRange';
@@ -35,7 +36,7 @@ export type DateRangeInputTestsProps = {
35
36
  */
36
37
  clearButtonTestId?: string;
37
38
  };
38
- export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'defaultValue' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon' | 'renderDayContent'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'>, DateRangeInputTestsProps {
39
+ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'defaultValue' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon' | 'renderDayContent'>, Pick<UseFocusTrapProps, 'restoreFocus'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'>, DateRangeInputTestsProps {
39
40
  /**
40
41
  * Передает атрибуты `data-testid` для интерактивных элементов в календаре.
41
42
  */
@@ -52,6 +53,10 @@ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTML
52
53
  * Обработчик изменения состояния открытия календаря.
53
54
  */
54
55
  onCalendarOpenChanged?: (opened: boolean) => void;
56
+ /**
57
+ * Label для календаря.
58
+ */
59
+ calendarLabel?: string;
55
60
  /**
56
61
  * Label для кнопки очистки. Делает доступным для ассистивных технологий.
57
62
  */
@@ -88,10 +93,25 @@ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTML
88
93
  * Отключение открытия календаря.
89
94
  */
90
95
  disableCalendar?: boolean;
96
+ /**
97
+ * Позволяет отключить захват фокуса при появлении календаря.
98
+ */
99
+ disableFocusTrap?: UseFocusTrapProps['disabled'];
100
+ /**
101
+ * Включает режим в котором DateRangeInput доступен
102
+ * для ассистивных технологий.
103
+ * В этом режиме:
104
+ * - календарь больше не открывает при фокусе на DateRangeInput;
105
+ * - иконка календаря видна всегда, чтобы пользователи
106
+ * ассистивных технологий могли открыть календарь по клику на иконку;
107
+ * - календарь при открытии получает фокус, клавиатурный
108
+ * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.
109
+ */
110
+ accessible?: boolean;
91
111
  }
92
112
  /**
93
113
  * @see https://vkcom.github.io/VKUI/#/DateRangeInput
94
114
  */
95
- export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, value: valueProp, defaultValue, onChange, calendarPlacement: calendarPlacementProp, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel, nextMonthLabel, changeDayLabel, changeMonthLabel, changeYearLabel, changeStartDayLabel, changeStartMonthLabel, changeStartYearLabel, changeEndDayLabel, changeEndMonthLabel, changeEndYearLabel, clearFieldLabel, showCalendarLabel, prevMonthIcon, nextMonthIcon, disableCalendar, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id, ...props }: DateRangeInputProps) => React.ReactNode;
115
+ export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, "value": valueProp, defaultValue, onChange, "calendarPlacement": calendarPlacementProp, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled, disableFocusTrap, restoreFocus, calendarLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, changeStartDayLabel, changeStartMonthLabel, changeStartYearLabel, changeEndDayLabel, changeEndMonthLabel, changeEndYearLabel, clearFieldLabel, showCalendarLabel, "aria-label": ariaLabel, prevMonthIcon, nextMonthIcon, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id, accessible, readOnly, "disableCalendar": disableCalendarProp, ...props }: DateRangeInputProps) => React.ReactNode;
96
116
  export {};
97
117
  //# sourceMappingURL=DateRangeInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,KAAK,cAAc,GAAG;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,EAC5F,IAAI,CACF,kBAAkB,EAChB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,UAAU,GACV,OAAO,GACP,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,kBAAkB,CACrB,EACD,UAAU,CAAC,cAAc,CAAC,EAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACjC,wBAAwB;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC7C;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,qrBA2C5B,mBAAmB,KAAG,KAAK,CAAC,SAwP9B,CAAC"}
1
+ {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,KAAK,cAAc,GAAG;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC;;OAEG;IACH,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,CAAC,EAC5F,IAAI,CACF,kBAAkB,EAChB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,UAAU,GACV,OAAO,GACP,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,kBAAkB,CACrB,EACD,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EACvC,UAAU,CAAC,cAAc,CAAC,EAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EACjC,wBAAwB;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC7C;;OAEG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAiDD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,4wBA8C5B,mBAAmB,KAAG,KAAK,CAAC,SA8U9B,CAAC"}
@@ -2,7 +2,7 @@
2
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
3
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { Icon16Clear, Icon20CalendarOutline } from "@vkontakte/icons";
8
8
  import { classNames } from "@vkontakte/vkjs";
@@ -11,13 +11,14 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
11
11
  import { useDateInput } from "../../hooks/useDateInput.js";
12
12
  import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
13
13
  import { useExternRef } from "../../hooks/useExternRef.js";
14
- import { callMultiple } from "../../lib/callMultiple.js";
15
14
  import { format, isMatch, parse } from "../../lib/date.js";
16
15
  import { CalendarRange } from "../CalendarRange/CalendarRange.js";
16
+ import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
17
+ import { FocusTrap } from "../FocusTrap/FocusTrap.js";
17
18
  import { FormField } from "../FormField/FormField.js";
18
19
  import { IconButton } from "../IconButton/IconButton.js";
19
- import { InputLike } from "../InputLike/InputLike.js";
20
20
  import { InputLikeDivider } from "../InputLike/InputLikeDivider.js";
21
+ import { NumberInputLike } from "../NumberInputLike/NumberInputLike.js";
21
22
  import { Popper } from "../Popper/Popper.js";
22
23
  import { Text } from "../Typography/Text/Text.js";
23
24
  import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
@@ -72,17 +73,25 @@ const getInternalValue = (value)=>{
72
73
  }
73
74
  return newValue;
74
75
  };
76
+ const CALENDAR_MUTATION_OBSERVER_OPTIONS = {
77
+ childList: true,
78
+ subtree: true,
79
+ attributes: true,
80
+ attributeFilter: [
81
+ 'tabindex'
82
+ ]
83
+ };
75
84
  /**
76
85
  * @see https://vkcom.github.io/VKUI/#/DateRangeInput
77
86
  */ export const DateRangeInput = (_param)=>{
78
- var { shouldDisableDate, disableFuture, disablePast, value: valueProp, defaultValue, onChange, calendarPlacement: calendarPlacementProp = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel = 'Предыдущий месяц', nextMonthLabel = 'Следующий месяц', changeDayLabel = 'Изменить день', changeMonthLabel = 'Изменить месяц', changeYearLabel = 'Изменить год', changeStartDayLabel = 'Изменить день начала', changeStartMonthLabel = 'Изменить месяц начала', changeStartYearLabel = 'Изменить год начала', changeEndDayLabel = 'Изменить день окончания', changeEndMonthLabel = 'Изменить месяц окончания', changeEndYearLabel = 'Изменить год окончания', clearFieldLabel = 'Очистить поле', showCalendarLabel = 'Показать календарь', prevMonthIcon, nextMonthIcon, disableCalendar = false, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id } = _param, props = _object_without_properties(_param, [
87
+ var { shouldDisableDate, disableFuture, disablePast, 'value': valueProp, defaultValue, onChange, 'calendarPlacement': calendarPlacementProp = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled, disableFocusTrap, restoreFocus, calendarLabel = 'Календарь', prevMonthLabel = 'Предыдущий месяц', nextMonthLabel = 'Следующий месяц', changeMonthLabel = 'Месяц', changeYearLabel = 'Год', changeStartDayLabel = 'День начала', changeStartMonthLabel = 'Месяц начала', changeStartYearLabel = 'Год начала', changeEndDayLabel = 'День окончания', changeEndMonthLabel = 'Месяц окончания', changeEndYearLabel = 'Год окончания', clearFieldLabel = 'Очистить поле', showCalendarLabel = 'Показать календарь', 'aria-label': ariaLabel = '', prevMonthIcon, nextMonthIcon, onCalendarOpenChanged, renderDayContent, calendarTestsProps, startDateTestsProps, endDateTestsProps, clearButtonTestId, showCalendarButtonTestId, id, accessible, readOnly, 'disableCalendar': disableCalendarProp = false } = _param, props = _object_without_properties(_param, [
79
88
  "shouldDisableDate",
80
89
  "disableFuture",
81
90
  "disablePast",
82
- "value",
91
+ 'value',
83
92
  "defaultValue",
84
93
  "onChange",
85
- "calendarPlacement",
94
+ 'calendarPlacement',
86
95
  "style",
87
96
  "className",
88
97
  "closeOnChange",
@@ -91,11 +100,11 @@ const getInternalValue = (value)=>{
91
100
  "name",
92
101
  "autoFocus",
93
102
  "disabled",
94
- "onClick",
95
- "onFocus",
103
+ "disableFocusTrap",
104
+ "restoreFocus",
105
+ "calendarLabel",
96
106
  "prevMonthLabel",
97
107
  "nextMonthLabel",
98
- "changeDayLabel",
99
108
  "changeMonthLabel",
100
109
  "changeYearLabel",
101
110
  "changeStartDayLabel",
@@ -106,9 +115,9 @@ const getInternalValue = (value)=>{
106
115
  "changeEndYearLabel",
107
116
  "clearFieldLabel",
108
117
  "showCalendarLabel",
118
+ 'aria-label',
109
119
  "prevMonthIcon",
110
120
  "nextMonthIcon",
111
- "disableCalendar",
112
121
  "onCalendarOpenChanged",
113
122
  "renderDayContent",
114
123
  "calendarTestsProps",
@@ -116,7 +125,10 @@ const getInternalValue = (value)=>{
116
125
  "endDateTestsProps",
117
126
  "clearButtonTestId",
118
127
  "showCalendarButtonTestId",
119
- "id"
128
+ "id",
129
+ "accessible",
130
+ "readOnly",
131
+ 'disableCalendar'
120
132
  ]);
121
133
  const daysStartRef = React.useRef(null);
122
134
  const monthsStartRef = React.useRef(null);
@@ -124,6 +136,7 @@ const getInternalValue = (value)=>{
124
136
  const daysEndRef = React.useRef(null);
125
137
  const monthsEndRef = React.useRef(null);
126
138
  const yearsEndRef = React.useRef(null);
139
+ const disableCalendar = readOnly ? true : disableCalendarProp;
127
140
  const _onChange = React.useCallback((newValue)=>onChange === null || onChange === void 0 ? void 0 : onChange(newValue || undefined), [
128
141
  onChange
129
142
  ]);
@@ -189,17 +202,18 @@ const getInternalValue = (value)=>{
189
202
  const onClear = React.useCallback(()=>updateValue(undefined), [
190
203
  updateValue
191
204
  ]);
192
- const { rootRef, calendarRef, open, openCalendar, closeCalendar, internalValue, handleKeyDown, setFocusedElement, handleFieldEnter, clear, removeFocusFromField } = useDateInput({
205
+ const { rootRef, calendarRef, open, openCalendar, closeCalendar, toggleCalendar, internalValue, handleKeyDown, setFocusedElement, handleFieldEnter, clear, removeFocusFromField } = useDateInput({
193
206
  maxElement: 5,
194
207
  refs,
195
208
  autoFocus,
196
- disabled,
209
+ disabled: disabled || readOnly,
197
210
  elementsConfig,
198
211
  onClear,
199
212
  onInternalValueChange,
200
213
  getInternalValue,
201
214
  value,
202
- onCalendarOpenChanged
215
+ onCalendarOpenChanged,
216
+ accessible
203
217
  });
204
218
  const { sizeY = 'none' } = useAdaptivity();
205
219
  const handleRootRef = useExternRef(rootRef, getRootRef);
@@ -219,115 +233,187 @@ const getInternalValue = (value)=>{
219
233
  // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался
220
234
  // на ней, пока помещается.
221
235
  const [calendarPlacement, setCalendarPlacement] = React.useState(calendarPlacementProp);
236
+ const { locale } = useConfigProvider();
237
+ const currentDateLabel = React.useMemo(()=>{
238
+ if (!value) {
239
+ return null;
240
+ }
241
+ const [startDate, endDate] = value;
242
+ if (!startDate || !endDate) {
243
+ return null;
244
+ }
245
+ return [
246
+ new Intl.DateTimeFormat(locale, {
247
+ weekday: 'long',
248
+ year: 'numeric',
249
+ month: 'long',
250
+ day: 'numeric'
251
+ }).format(startDate),
252
+ new Intl.DateTimeFormat(locale, {
253
+ weekday: 'long',
254
+ year: 'numeric',
255
+ month: 'long',
256
+ day: 'numeric'
257
+ }).format(endDate)
258
+ ].join(' - ');
259
+ }, [
260
+ locale,
261
+ value
262
+ ]);
263
+ const currentDateLabelId = React.useId();
264
+ const ariaLabelId = React.useId();
265
+ const showCalendarOnInputAreaClick = React.useCallback(()=>{
266
+ handleFieldEnter();
267
+ if (accessible) {
268
+ openCalendar();
269
+ }
270
+ }, [
271
+ handleFieldEnter,
272
+ openCalendar,
273
+ accessible
274
+ ]);
222
275
  return /*#__PURE__*/ _jsxs(FormField, _object_spread_props(_object_spread({
223
276
  style: style,
224
277
  className: classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className),
225
278
  getRootRef: handleRootRef,
226
- after: value ? /*#__PURE__*/ _jsxs(IconButton, {
227
- hoverMode: "opacity",
228
- onClick: clear,
229
- "data-testid": clearButtonTestId,
230
- children: [
231
- /*#__PURE__*/ _jsx(VisuallyHidden, {
232
- children: clearFieldLabel
233
- }),
234
- /*#__PURE__*/ _jsx(Icon16Clear, {})
235
- ]
236
- }) : /*#__PURE__*/ _jsxs(IconButton, {
237
- hoverMode: "opacity",
238
- onClick: openCalendar,
239
- "data-testid": showCalendarButtonTestId,
279
+ role: "group",
280
+ "aria-labelledby": `${ariaLabelId} ${currentDateLabelId}`,
281
+ after: /*#__PURE__*/ _jsxs(_Fragment, {
240
282
  children: [
241
- /*#__PURE__*/ _jsx(VisuallyHidden, {
242
- children: showCalendarLabel
243
- }),
244
- /*#__PURE__*/ _jsx(Icon20CalendarOutline, {})
283
+ !disableCalendar && (accessible || !accessible && !value) ? /*#__PURE__*/ _jsx(IconButton, {
284
+ hoverMode: "opacity",
285
+ label: showCalendarLabel,
286
+ onClick: toggleCalendar,
287
+ "data-testid": showCalendarButtonTestId,
288
+ children: /*#__PURE__*/ _jsx(Icon20CalendarOutline, {})
289
+ }) : null,
290
+ value && !readOnly ? /*#__PURE__*/ _jsx(IconButton, {
291
+ hoverMode: "opacity",
292
+ label: clearFieldLabel,
293
+ onClick: clear,
294
+ "data-testid": clearButtonTestId,
295
+ children: /*#__PURE__*/ _jsx(Icon16Clear, {})
296
+ }) : null
245
297
  ]
246
298
  }),
247
- disabled: disabled,
248
- onClick: callMultiple(handleFieldEnter, onClick),
249
- onFocus: callMultiple(handleFieldEnter, onFocus)
299
+ disabled: disabled
250
300
  }, props), {
251
301
  children: [
252
302
  /*#__PURE__*/ _jsxs("div", {
253
303
  className: "vkuiDateInput__wrapper",
254
304
  children: [
305
+ ariaLabel && /*#__PURE__*/ _jsx(VisuallyHidden, {
306
+ id: ariaLabelId,
307
+ children: ariaLabel
308
+ }),
309
+ currentDateLabel && /*#__PURE__*/ _jsx(VisuallyHidden, {
310
+ id: currentDateLabelId,
311
+ children: currentDateLabel
312
+ }),
255
313
  /*#__PURE__*/ _jsx(VisuallyHidden, {
256
314
  id: id,
257
315
  Component: "input",
316
+ readOnly: true,
317
+ "aria-hidden": true,
258
318
  name: name,
259
- value: value ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${value[1] ? format(value[1], 'dd.MM.yyyy') : ''}` : ''
319
+ tabIndex: readOnly ? 0 : -1,
320
+ value: value ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${value[1] ? format(value[1], 'dd.MM.yyyy') : ''}` : '',
321
+ onFocus: handleFieldEnter
260
322
  }),
261
323
  /*#__PURE__*/ _jsxs(Text, {
262
324
  className: "vkuiDateInput__input",
263
- onKeyDown: handleKeyDown,
325
+ onClick: showCalendarOnInputAreaClick,
264
326
  children: [
265
- /*#__PURE__*/ _jsx(InputLike, {
327
+ /*#__PURE__*/ _jsx(NumberInputLike, {
328
+ value: internalValue[0],
329
+ minValue: 1,
330
+ maxValue: 31,
331
+ onKeyDown: readOnly ? undefined : handleKeyDown,
266
332
  length: 2,
267
333
  getRootRef: daysStartRef,
268
334
  index: 0,
335
+ readOnly: readOnly,
269
336
  onElementSelect: setFocusedElement,
270
- value: internalValue[0],
271
337
  label: changeStartDayLabel,
272
338
  "data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.day
273
339
  }),
274
340
  /*#__PURE__*/ _jsx(InputLikeDivider, {
275
341
  children: "."
276
342
  }),
277
- /*#__PURE__*/ _jsx(InputLike, {
343
+ /*#__PURE__*/ _jsx(NumberInputLike, {
344
+ value: internalValue[1],
345
+ minValue: 1,
346
+ maxValue: 12,
347
+ onKeyDown: handleKeyDown,
278
348
  length: 2,
279
349
  getRootRef: monthsStartRef,
280
350
  index: 1,
281
351
  onElementSelect: setFocusedElement,
282
- value: internalValue[1],
352
+ readOnly: readOnly,
283
353
  label: changeStartMonthLabel,
284
354
  "data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.month
285
355
  }),
286
356
  /*#__PURE__*/ _jsx(InputLikeDivider, {
287
357
  children: "."
288
358
  }),
289
- /*#__PURE__*/ _jsx(InputLike, {
359
+ /*#__PURE__*/ _jsx(NumberInputLike, {
360
+ value: internalValue[2],
361
+ minValue: 1,
362
+ maxValue: 275750,
363
+ onKeyDown: handleKeyDown,
290
364
  length: 4,
291
365
  getRootRef: yearsStartRef,
292
366
  index: 2,
293
367
  onElementSelect: setFocusedElement,
294
- value: internalValue[2],
368
+ readOnly: readOnly,
295
369
  label: changeStartYearLabel,
296
370
  "data-testid": startDateTestsProps === null || startDateTestsProps === void 0 ? void 0 : startDateTestsProps.year
297
371
  }),
298
372
  /*#__PURE__*/ _jsx(InputLikeDivider, {
299
373
  children: ' — '
300
374
  }),
301
- /*#__PURE__*/ _jsx(InputLike, {
375
+ /*#__PURE__*/ _jsx(NumberInputLike, {
376
+ value: internalValue[3],
377
+ minValue: 1,
378
+ maxValue: 31,
379
+ onKeyDown: handleKeyDown,
302
380
  length: 2,
303
381
  getRootRef: daysEndRef,
304
382
  index: 3,
305
383
  onElementSelect: setFocusedElement,
306
- value: internalValue[3],
384
+ readOnly: readOnly,
307
385
  label: changeEndDayLabel,
308
386
  "data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.day
309
387
  }),
310
388
  /*#__PURE__*/ _jsx(InputLikeDivider, {
311
389
  children: "."
312
390
  }),
313
- /*#__PURE__*/ _jsx(InputLike, {
391
+ /*#__PURE__*/ _jsx(NumberInputLike, {
392
+ value: internalValue[4],
393
+ minValue: 1,
394
+ maxValue: 12,
395
+ onKeyDown: handleKeyDown,
314
396
  length: 2,
315
397
  getRootRef: monthsEndRef,
316
398
  index: 4,
317
399
  onElementSelect: setFocusedElement,
318
- value: internalValue[4],
400
+ readOnly: readOnly,
319
401
  label: changeEndMonthLabel,
320
402
  "data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.month
321
403
  }),
322
404
  /*#__PURE__*/ _jsx(InputLikeDivider, {
323
405
  children: "."
324
406
  }),
325
- /*#__PURE__*/ _jsx(InputLike, {
407
+ /*#__PURE__*/ _jsx(NumberInputLike, {
408
+ value: internalValue[5],
409
+ minValue: 1,
410
+ maxValue: 275750,
411
+ onKeyDown: handleKeyDown,
326
412
  length: 4,
327
413
  getRootRef: yearsEndRef,
328
414
  index: 5,
329
415
  onElementSelect: setFocusedElement,
330
- value: internalValue[5],
416
+ readOnly: readOnly,
331
417
  label: changeEndYearLabel,
332
418
  "data-testid": endDateTestsProps === null || endDateTestsProps === void 0 ? void 0 : endDateTestsProps.year
333
419
  })
@@ -340,24 +426,31 @@ const getInternalValue = (value)=>{
340
426
  offsetByMainAxis: 8,
341
427
  placement: calendarPlacement,
342
428
  onPlacementChange: setCalendarPlacement,
343
- children: /*#__PURE__*/ _jsx(CalendarRange, _object_spread({
344
- value: value,
345
- onChange: onCalendarChange,
346
- disablePast: disablePast,
347
- disableFuture: disableFuture,
348
- shouldDisableDate: shouldDisableDate,
429
+ children: /*#__PURE__*/ _jsx(FocusTrap, {
349
430
  onClose: closeCalendar,
350
- getRootRef: calendarRef,
351
- disablePickers: disablePickers,
352
- prevMonthLabel: prevMonthLabel,
353
- nextMonthLabel: nextMonthLabel,
354
- changeMonthLabel: changeMonthLabel,
355
- changeYearLabel: changeYearLabel,
356
- changeDayLabel: changeDayLabel,
357
- prevMonthIcon: prevMonthIcon,
358
- nextMonthIcon: nextMonthIcon,
359
- renderDayContent: renderDayContent
360
- }, calendarTestsProps))
431
+ disabled: disableFocusTrap !== null && disableFocusTrap !== void 0 ? disableFocusTrap : !accessible,
432
+ restoreFocus: restoreFocus !== null && restoreFocus !== void 0 ? restoreFocus : Boolean(accessible),
433
+ captureEscapeKeyboardEvent: false,
434
+ mutationObserverOptions: CALENDAR_MUTATION_OBSERVER_OPTIONS,
435
+ children: /*#__PURE__*/ _jsx(CalendarRange, _object_spread({
436
+ value: value,
437
+ role: "dialog",
438
+ onChange: onCalendarChange,
439
+ "aria-label": calendarLabel,
440
+ disablePast: disablePast,
441
+ disableFuture: disableFuture,
442
+ shouldDisableDate: shouldDisableDate,
443
+ getRootRef: calendarRef,
444
+ disablePickers: disablePickers,
445
+ prevMonthLabel: prevMonthLabel,
446
+ nextMonthLabel: nextMonthLabel,
447
+ changeMonthLabel: changeMonthLabel,
448
+ changeYearLabel: changeYearLabel,
449
+ prevMonthIcon: prevMonthIcon,
450
+ nextMonthIcon: nextMonthIcon,
451
+ renderDayContent: renderDayContent
452
+ }, calendarTestsProps))
453
+ })
361
454
  })
362
455
  ]
363
456
  }));