@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
@@ -8,7 +8,7 @@ import { useAdaptivity } from '../../hooks/useAdaptivity';
8
8
  import { useDateInput } from '../../hooks/useDateInput';
9
9
  import { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';
10
10
  import { useExternRef } from '../../hooks/useExternRef';
11
- import { callMultiple } from '../../lib/callMultiple';
11
+ import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
12
12
  import { format, isMatch, parse } from '../../lib/date';
13
13
  import type { PlacementWithAuto } from '../../lib/floating';
14
14
  import type { HasRootRef } from '../../types';
@@ -18,10 +18,12 @@ import {
18
18
  type CalendarRangeTestsProps,
19
19
  type DateRangeType,
20
20
  } from '../CalendarRange/CalendarRange';
21
+ import { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';
22
+ import { FocusTrap } from '../FocusTrap/FocusTrap';
21
23
  import { FormField, type FormFieldProps } from '../FormField/FormField';
22
24
  import { IconButton } from '../IconButton/IconButton';
23
- import { InputLike } from '../InputLike/InputLike';
24
25
  import { InputLikeDivider } from '../InputLike/InputLikeDivider';
26
+ import { NumberInputLike } from '../NumberInputLike/NumberInputLike';
25
27
  import { Popper } from '../Popper/Popper';
26
28
  import { Text } from '../Typography/Text/Text';
27
29
  import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
@@ -88,6 +90,7 @@ export interface DateRangeInputProps
88
90
  | 'nextMonthIcon'
89
91
  | 'renderDayContent'
90
92
  >,
93
+ Pick<UseFocusTrapProps, 'restoreFocus'>,
91
94
  HasRootRef<HTMLDivElement>,
92
95
  Omit<FormFieldProps, 'maxHeight'>,
93
96
  DateRangeInputTestsProps {
@@ -107,6 +110,10 @@ export interface DateRangeInputProps
107
110
  * Обработчик изменения состояния открытия календаря.
108
111
  */
109
112
  onCalendarOpenChanged?: (opened: boolean) => void;
113
+ /**
114
+ * Label для календаря.
115
+ */
116
+ calendarLabel?: string;
110
117
  /**
111
118
  * Label для кнопки очистки. Делает доступным для ассистивных технологий.
112
119
  */
@@ -143,6 +150,21 @@ export interface DateRangeInputProps
143
150
  * Отключение открытия календаря.
144
151
  */
145
152
  disableCalendar?: boolean;
153
+ /**
154
+ * Позволяет отключить захват фокуса при появлении календаря.
155
+ */
156
+ disableFocusTrap?: UseFocusTrapProps['disabled'];
157
+ /**
158
+ * Включает режим в котором DateRangeInput доступен
159
+ * для ассистивных технологий.
160
+ * В этом режиме:
161
+ * - календарь больше не открывает при фокусе на DateRangeInput;
162
+ * - иконка календаря видна всегда, чтобы пользователи
163
+ * ассистивных технологий могли открыть календарь по клику на иконку;
164
+ * - календарь при открытии получает фокус, клавиатурный
165
+ * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.
166
+ */
167
+ accessible?: boolean; // TODO [>=8]: включить по умолчанию.
146
168
  }
147
169
 
148
170
  const elementsConfig = (index: number) => {
@@ -185,6 +207,13 @@ const getInternalValue = (value: CalendarRangeProps['value']) => {
185
207
  return newValue;
186
208
  };
187
209
 
210
+ const CALENDAR_MUTATION_OBSERVER_OPTIONS: MutationObserverInit = {
211
+ childList: true,
212
+ subtree: true,
213
+ attributes: true,
214
+ attributeFilter: ['tabindex'],
215
+ };
216
+
188
217
  /**
189
218
  * @see https://vkcom.github.io/VKUI/#/DateRangeInput
190
219
  */
@@ -192,10 +221,10 @@ export const DateRangeInput = ({
192
221
  shouldDisableDate,
193
222
  disableFuture,
194
223
  disablePast,
195
- value: valueProp,
224
+ 'value': valueProp,
196
225
  defaultValue,
197
226
  onChange,
198
- calendarPlacement: calendarPlacementProp = 'bottom-start',
227
+ 'calendarPlacement': calendarPlacementProp = 'bottom-start',
199
228
  style,
200
229
  className,
201
230
  closeOnChange = true,
@@ -204,24 +233,24 @@ export const DateRangeInput = ({
204
233
  name,
205
234
  autoFocus,
206
235
  disabled,
207
- onClick,
208
- onFocus,
236
+ disableFocusTrap,
237
+ restoreFocus,
238
+ calendarLabel = 'Календарь',
209
239
  prevMonthLabel = 'Предыдущий месяц',
210
240
  nextMonthLabel = 'Следующий месяц',
211
- changeDayLabel = 'Изменить день',
212
- changeMonthLabel = 'Изменить месяц',
213
- changeYearLabel = 'Изменить год',
214
- changeStartDayLabel = 'Изменить день начала',
215
- changeStartMonthLabel = 'Изменить месяц начала',
216
- changeStartYearLabel = 'Изменить год начала',
217
- changeEndDayLabel = 'Изменить день окончания',
218
- changeEndMonthLabel = 'Изменить месяц окончания',
219
- changeEndYearLabel = 'Изменить год окончания',
241
+ changeMonthLabel = 'Месяц',
242
+ changeYearLabel = 'Год',
243
+ changeStartDayLabel = 'День начала',
244
+ changeStartMonthLabel = 'Месяц начала',
245
+ changeStartYearLabel = 'Год начала',
246
+ changeEndDayLabel = 'День окончания',
247
+ changeEndMonthLabel = 'Месяц окончания',
248
+ changeEndYearLabel = 'Год окончания',
220
249
  clearFieldLabel = 'Очистить поле',
221
250
  showCalendarLabel = 'Показать календарь',
251
+ 'aria-label': ariaLabel = '',
222
252
  prevMonthIcon,
223
253
  nextMonthIcon,
224
- disableCalendar = false,
225
254
  onCalendarOpenChanged,
226
255
  renderDayContent,
227
256
  calendarTestsProps,
@@ -230,6 +259,9 @@ export const DateRangeInput = ({
230
259
  clearButtonTestId,
231
260
  showCalendarButtonTestId,
232
261
  id,
262
+ accessible,
263
+ readOnly,
264
+ 'disableCalendar': disableCalendarProp = false,
233
265
  ...props
234
266
  }: DateRangeInputProps): React.ReactNode => {
235
267
  const daysStartRef = React.useRef<HTMLSpanElement>(null);
@@ -239,6 +271,8 @@ export const DateRangeInput = ({
239
271
  const monthsEndRef = React.useRef<HTMLSpanElement>(null);
240
272
  const yearsEndRef = React.useRef<HTMLSpanElement>(null);
241
273
 
274
+ const disableCalendar = readOnly ? true : disableCalendarProp;
275
+
242
276
  const _onChange = React.useCallback(
243
277
  (newValue: DateRangeType | null | undefined) => onChange?.(newValue || undefined),
244
278
  [onChange],
@@ -307,6 +341,7 @@ export const DateRangeInput = ({
307
341
  open,
308
342
  openCalendar,
309
343
  closeCalendar,
344
+ toggleCalendar,
310
345
  internalValue,
311
346
  handleKeyDown,
312
347
  setFocusedElement,
@@ -317,13 +352,14 @@ export const DateRangeInput = ({
317
352
  maxElement: 5,
318
353
  refs,
319
354
  autoFocus,
320
- disabled,
355
+ disabled: disabled || readOnly,
321
356
  elementsConfig,
322
357
  onClear,
323
358
  onInternalValueChange,
324
359
  getInternalValue,
325
360
  value,
326
361
  onCalendarOpenChanged,
362
+ accessible,
327
363
  });
328
364
 
329
365
  const { sizeY = 'none' } = useAdaptivity();
@@ -347,38 +383,87 @@ export const DateRangeInput = ({
347
383
  const [calendarPlacement, setCalendarPlacement] =
348
384
  React.useState<PlacementWithAuto>(calendarPlacementProp);
349
385
 
386
+ const { locale } = useConfigProvider();
387
+ const currentDateLabel = React.useMemo(() => {
388
+ if (!value) {
389
+ return null;
390
+ }
391
+ const [startDate, endDate] = value;
392
+ if (!startDate || !endDate) {
393
+ return null;
394
+ }
395
+ return [
396
+ new Intl.DateTimeFormat(locale, {
397
+ weekday: 'long',
398
+ year: 'numeric',
399
+ month: 'long',
400
+ day: 'numeric',
401
+ }).format(startDate),
402
+ new Intl.DateTimeFormat(locale, {
403
+ weekday: 'long',
404
+ year: 'numeric',
405
+ month: 'long',
406
+ day: 'numeric',
407
+ }).format(endDate),
408
+ ].join(' - ');
409
+ }, [locale, value]);
410
+
411
+ const currentDateLabelId = React.useId();
412
+ const ariaLabelId = React.useId();
413
+
414
+ const showCalendarOnInputAreaClick = React.useCallback(() => {
415
+ handleFieldEnter();
416
+ if (accessible) {
417
+ openCalendar();
418
+ }
419
+ }, [handleFieldEnter, openCalendar, accessible]);
420
+
350
421
  return (
351
422
  <FormField
352
423
  style={style}
353
424
  className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}
354
425
  getRootRef={handleRootRef}
426
+ role="group"
427
+ aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}
355
428
  after={
356
- value ? (
357
- <IconButton hoverMode="opacity" onClick={clear} data-testid={clearButtonTestId}>
358
- <VisuallyHidden>{clearFieldLabel}</VisuallyHidden>
359
- <Icon16Clear />
360
- </IconButton>
361
- ) : (
362
- <IconButton
363
- hoverMode="opacity"
364
- onClick={openCalendar}
365
- data-testid={showCalendarButtonTestId}
366
- >
367
- <VisuallyHidden>{showCalendarLabel}</VisuallyHidden>
368
- <Icon20CalendarOutline />
369
- </IconButton>
370
- )
429
+ <>
430
+ {!disableCalendar && (accessible || (!accessible && !value)) ? (
431
+ <IconButton
432
+ hoverMode="opacity"
433
+ label={showCalendarLabel}
434
+ onClick={toggleCalendar}
435
+ data-testid={showCalendarButtonTestId}
436
+ >
437
+ <Icon20CalendarOutline />
438
+ </IconButton>
439
+ ) : null}
440
+ {value && !readOnly ? (
441
+ <IconButton
442
+ hoverMode="opacity"
443
+ label={clearFieldLabel}
444
+ onClick={clear}
445
+ data-testid={clearButtonTestId}
446
+ >
447
+ <Icon16Clear />
448
+ </IconButton>
449
+ ) : null}
450
+ </>
371
451
  }
372
452
  disabled={disabled}
373
- onClick={callMultiple(handleFieldEnter, onClick)}
374
- onFocus={callMultiple(handleFieldEnter, onFocus)}
375
453
  {...props}
376
454
  >
377
455
  <div className={dateInputStyles.wrapper}>
456
+ {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}
457
+ {currentDateLabel && (
458
+ <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>
459
+ )}
378
460
  <VisuallyHidden
379
461
  id={id}
380
462
  Component="input"
463
+ readOnly
464
+ aria-hidden
381
465
  name={name}
466
+ tabIndex={readOnly ? 0 : -1}
382
467
  value={
383
468
  value
384
469
  ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${
@@ -386,64 +471,89 @@ export const DateRangeInput = ({
386
471
  }`
387
472
  : ''
388
473
  }
474
+ onFocus={handleFieldEnter}
389
475
  />
390
- <Text className={dateInputStyles.input} onKeyDown={handleKeyDown}>
391
- <InputLike
476
+ <Text className={dateInputStyles.input} onClick={showCalendarOnInputAreaClick}>
477
+ <NumberInputLike
478
+ value={internalValue[0]}
479
+ minValue={1}
480
+ maxValue={31}
481
+ onKeyDown={readOnly ? undefined : handleKeyDown}
392
482
  length={2}
393
483
  getRootRef={daysStartRef}
394
484
  index={0}
485
+ readOnly={readOnly}
395
486
  onElementSelect={setFocusedElement}
396
- value={internalValue[0]}
397
487
  label={changeStartDayLabel}
398
488
  data-testid={startDateTestsProps?.day}
399
489
  />
400
490
  <InputLikeDivider>.</InputLikeDivider>
401
- <InputLike
491
+ <NumberInputLike
492
+ value={internalValue[1]}
493
+ minValue={1}
494
+ maxValue={12}
495
+ onKeyDown={handleKeyDown}
402
496
  length={2}
403
497
  getRootRef={monthsStartRef}
404
498
  index={1}
405
499
  onElementSelect={setFocusedElement}
406
- value={internalValue[1]}
500
+ readOnly={readOnly}
407
501
  label={changeStartMonthLabel}
408
502
  data-testid={startDateTestsProps?.month}
409
503
  />
410
504
  <InputLikeDivider>.</InputLikeDivider>
411
- <InputLike
505
+ <NumberInputLike
506
+ value={internalValue[2]}
507
+ minValue={1}
508
+ maxValue={275750}
509
+ onKeyDown={handleKeyDown}
412
510
  length={4}
413
511
  getRootRef={yearsStartRef}
414
512
  index={2}
415
513
  onElementSelect={setFocusedElement}
416
- value={internalValue[2]}
514
+ readOnly={readOnly}
417
515
  label={changeStartYearLabel}
418
516
  data-testid={startDateTestsProps?.year}
419
517
  />
420
518
  <InputLikeDivider>{' — '}</InputLikeDivider>
421
- <InputLike
519
+ <NumberInputLike
520
+ value={internalValue[3]}
521
+ minValue={1}
522
+ maxValue={31}
523
+ onKeyDown={handleKeyDown}
422
524
  length={2}
423
525
  getRootRef={daysEndRef}
424
526
  index={3}
425
527
  onElementSelect={setFocusedElement}
426
- value={internalValue[3]}
528
+ readOnly={readOnly}
427
529
  label={changeEndDayLabel}
428
530
  data-testid={endDateTestsProps?.day}
429
531
  />
430
532
  <InputLikeDivider>.</InputLikeDivider>
431
- <InputLike
533
+ <NumberInputLike
534
+ value={internalValue[4]}
535
+ minValue={1}
536
+ maxValue={12}
537
+ onKeyDown={handleKeyDown}
432
538
  length={2}
433
539
  getRootRef={monthsEndRef}
434
540
  index={4}
435
541
  onElementSelect={setFocusedElement}
436
- value={internalValue[4]}
542
+ readOnly={readOnly}
437
543
  label={changeEndMonthLabel}
438
544
  data-testid={endDateTestsProps?.month}
439
545
  />
440
546
  <InputLikeDivider>.</InputLikeDivider>
441
- <InputLike
547
+ <NumberInputLike
548
+ value={internalValue[5]}
549
+ minValue={1}
550
+ maxValue={275750}
551
+ onKeyDown={handleKeyDown}
442
552
  length={4}
443
553
  getRootRef={yearsEndRef}
444
554
  index={5}
445
555
  onElementSelect={setFocusedElement}
446
- value={internalValue[5]}
556
+ readOnly={readOnly}
447
557
  label={changeEndYearLabel}
448
558
  data-testid={endDateTestsProps?.year}
449
559
  />
@@ -456,25 +566,33 @@ export const DateRangeInput = ({
456
566
  placement={calendarPlacement}
457
567
  onPlacementChange={setCalendarPlacement}
458
568
  >
459
- <CalendarRange
460
- value={value}
461
- onChange={onCalendarChange}
462
- disablePast={disablePast}
463
- disableFuture={disableFuture}
464
- shouldDisableDate={shouldDisableDate}
569
+ <FocusTrap
465
570
  onClose={closeCalendar}
466
- getRootRef={calendarRef}
467
- disablePickers={disablePickers}
468
- prevMonthLabel={prevMonthLabel}
469
- nextMonthLabel={nextMonthLabel}
470
- changeMonthLabel={changeMonthLabel}
471
- changeYearLabel={changeYearLabel}
472
- changeDayLabel={changeDayLabel}
473
- prevMonthIcon={prevMonthIcon}
474
- nextMonthIcon={nextMonthIcon}
475
- renderDayContent={renderDayContent}
476
- {...calendarTestsProps}
477
- />
571
+ disabled={disableFocusTrap ?? !accessible}
572
+ restoreFocus={restoreFocus ?? Boolean(accessible)}
573
+ captureEscapeKeyboardEvent={false}
574
+ mutationObserverOptions={CALENDAR_MUTATION_OBSERVER_OPTIONS}
575
+ >
576
+ <CalendarRange
577
+ value={value}
578
+ role="dialog"
579
+ onChange={onCalendarChange}
580
+ aria-label={calendarLabel}
581
+ disablePast={disablePast}
582
+ disableFuture={disableFuture}
583
+ shouldDisableDate={shouldDisableDate}
584
+ getRootRef={calendarRef}
585
+ disablePickers={disablePickers}
586
+ prevMonthLabel={prevMonthLabel}
587
+ nextMonthLabel={nextMonthLabel}
588
+ changeMonthLabel={changeMonthLabel}
589
+ changeYearLabel={changeYearLabel}
590
+ prevMonthIcon={prevMonthIcon}
591
+ nextMonthIcon={nextMonthIcon}
592
+ renderDayContent={renderDayContent}
593
+ {...calendarTestsProps}
594
+ />
595
+ </FocusTrap>
478
596
  </Popper>
479
597
  )}
480
598
  </FormField>
@@ -3,6 +3,7 @@
3
3
  import { type AllHTMLAttributes } from 'react';
4
4
  import { useExternRef } from '../../hooks/useExternRef';
5
5
  import { useFocusTrap, type UseFocusTrapProps } from '../../hooks/useFocusTrap';
6
+ import { DEFAULT_MUTATION_OBSERVER_OPTIONS } from '../../hooks/useMutationObserver';
6
7
  import type { HasComponent, HasRootRef } from '../../types';
7
8
 
8
9
  export interface FocusTrapProps<T extends HTMLElement = HTMLElement>
@@ -25,6 +26,7 @@ export const FocusTrap = <T extends HTMLElement = HTMLElement>({
25
26
  getRootRef,
26
27
  children,
27
28
  captureEscapeKeyboardEvent = true,
29
+ mutationObserverOptions = DEFAULT_MUTATION_OBSERVER_OPTIONS,
28
30
  ...restProps
29
31
  }: FocusTrapProps<T>): React.ReactNode => {
30
32
  const ref = useExternRef<T>(getRootRef);
@@ -37,6 +39,7 @@ export const FocusTrap = <T extends HTMLElement = HTMLElement>({
37
39
  timeout,
38
40
  onClose,
39
41
  captureEscapeKeyboardEvent,
42
+ mutationObserverOptions,
40
43
  });
41
44
 
42
45
  return (
@@ -1,4 +1,4 @@
1
- import { Meta, Title, ArgTypes, Story, Stories, Description } from '@storybook/blocks';
1
+ import { Meta, Title, ArgTypes, Story, Stories, Description } from '@storybook/addon-docs/blocks';
2
2
  import { FormItemTop } from './FormItemTop';
3
3
  import { FormItemTopAside } from './FormItemTopAside';
4
4
  import { FormItemTopLabel } from './FormItemTopLabel';
@@ -3,7 +3,7 @@ import { classNames, hasReactNode } from '@vkontakte/vkjs';
3
3
  import { mergeStyle } from '../../helpers/mergeStyle';
4
4
  import type { CSSCustomProperties, HasRef, HasRootRef, LiteralUnion } from '../../types';
5
5
  import { Avatar } from '../Avatar/Avatar';
6
- import { Tappable, type TappableProps } from '../Tappable/Tappable';
6
+ import { Tappable, type TappableOmitProps } from '../Tappable/Tappable';
7
7
  import { Caption } from '../Typography/Caption/Caption';
8
8
  import { Footnote } from '../Typography/Footnote/Footnote';
9
9
  import { Subhead } from '../Typography/Subhead/Subhead';
@@ -27,7 +27,7 @@ const textAlignClassNames = {
27
27
  type HorizontalCellSizes = 's' | 'm' | 'l' | 'xl' | 'auto';
28
28
 
29
29
  export interface HorizontalCellProps
30
- extends Omit<TappableProps, 'size' | 'getRootRef' | 'title' | 'borderRadiusMode'>,
30
+ extends Omit<TappableOmitProps, 'size' | 'getRootRef' | 'title' | 'borderRadiusMode'>,
31
31
  HasRootRef<HTMLDivElement>,
32
32
  HasRef<HTMLDivElement> {
33
33
  /**
@@ -2,7 +2,7 @@ import { Icon28ChevronRightCircle } from '@vkontakte/icons';
2
2
  import { classNames } from '@vkontakte/vkjs';
3
3
  import type { HasRef, HasRootRef, LiteralUnion } from '../../../types';
4
4
  import type { ImageBaseSize } from '../../ImageBase/ImageBase';
5
- import { Tappable, type TappableProps } from '../../Tappable/Tappable';
5
+ import { Tappable, type TappableOmitProps } from '../../Tappable/Tappable';
6
6
  import { Subhead, type SubheadProps } from '../../Typography/Subhead/Subhead';
7
7
  import styles from './HorizontalCellShowMore.module.css';
8
8
 
@@ -12,7 +12,7 @@ const sizeClassNames = {
12
12
  };
13
13
 
14
14
  export interface HorizontalCellShowMoreProps
15
- extends Omit<TappableProps, 'getRootRef' | 'size' | 'borderRadiusMode'>,
15
+ extends Omit<TappableOmitProps, 'getRootRef' | 'size' | 'borderRadiusMode'>,
16
16
  HasRef<HTMLElement>,
17
17
  HasRootRef<HTMLDivElement> {
18
18
  /**
@@ -43,12 +43,11 @@
43
43
  opacity: 0;
44
44
  }
45
45
 
46
- .host:hover .arrow {
46
+ .host:hover .arrow,
47
+ .withConstArrows .arrow {
47
48
  opacity: var(--vkui--opacity_disable_accessibility);
48
49
  }
49
50
 
50
- .withConstArrows .arrow,
51
- .withConstArrows:hover .arrow,
52
51
  .host .arrow:hover {
53
52
  opacity: 1;
54
53
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["./HorizontalScroll.module.css"],"names":["host","rtl","in","inWrapper","arrow","withConstArrows","arrowLeft","arrowRight"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,K,WAbA;AAAA,E,aAiBAC,I,WAjBA;AAAA,E,aA4BAA,I,WA5BA;AAAA,E,aAgCAC,W,WAhCA;AAAA,E,aAsCAC,O,WAtCA;AAAA,E,aA6CAJ,M,WA7CA;AAAA,E,aA6CYI,O,WA7CZ;AAAA,E,aAiDAC,iB,WAjDA;AAAA,E,aAiDiBD,O,WAjDjB;AAAA,E,aAkDAC,iB,WAlDA;AAAA,E,aAkDuBD,O,WAlDvB;AAAA,E,aAmDAJ,M,WAnDA;AAAA,E,aAmDMI,O,WAnDN;AAAA,E,aAuDAE,W,WAvDA;AAAA,E,aAuDmBJ,I,WAvDnB;AAAA,E,aAuDuBC,W,WAvDvB;AAAA,E,aA2DAI,Y,WA3DA;AAAA,E,aA2DoBL,I,WA3DpB;AAAA,E,aA2DwBC,W,WA3DxB;AAAA,E,aAoE2BH,M,WApE3B;AAAA,E,aAyEqCG,W,WAzErC;AAAA,E,aA2EqCA,W,WA3ErC;AAAA;AAAA","file":"HorizontalScroll.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./HorizontalScroll.module.css"],"names":["host","rtl","in","inWrapper","arrow","withConstArrows","arrowLeft","arrowRight"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,K,WAbA;AAAA,E,aAiBAC,I,WAjBA;AAAA,E,aA4BAA,I,WA5BA;AAAA,E,aAgCAC,W,WAhCA;AAAA,E,aAsCAC,O,WAtCA;AAAA,E,aA6CAJ,M,WA7CA;AAAA,E,aA6CYI,O,WA7CZ;AAAA,E,aA8CAC,iB,WA9CA;AAAA,E,aA8CiBD,O,WA9CjB;AAAA,E,aAkDAJ,M,WAlDA;AAAA,E,aAkDMI,O,WAlDN;AAAA,E,aAsDAE,W,WAtDA;AAAA,E,aAsDmBJ,I,WAtDnB;AAAA,E,aAsDuBC,W,WAtDvB;AAAA,E,aA0DAI,Y,WA1DA;AAAA,E,aA0DoBL,I,WA1DpB;AAAA,E,aA0DwBC,W,WA1DxB;AAAA,E,aAmE2BH,M,WAnE3B;AAAA,E,aAwEqCG,W,WAxErC;AAAA,E,aA0EqCA,W,WA1ErC;AAAA;AAAA","file":"HorizontalScroll.module.css.d.ts","sourceRoot":""}
@@ -5,7 +5,7 @@ import { useAdaptivity } from '../../hooks/useAdaptivity';
5
5
  import { usePlatform } from '../../hooks/usePlatform';
6
6
  import { hasAccessibleName } from '../../lib/accessibility';
7
7
  import { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce';
8
- import { Tappable, type TappableProps } from '../Tappable/Tappable';
8
+ import { Tappable, type TappableOmitProps } from '../Tappable/Tappable';
9
9
  import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
10
10
  import styles from './IconButton.module.css';
11
11
 
@@ -14,7 +14,7 @@ const sizeYClassNames = {
14
14
  compact: styles.sizeYCompact,
15
15
  } as const;
16
16
 
17
- export interface IconButtonProps extends TappableProps {
17
+ export interface IconButtonProps extends TappableOmitProps {
18
18
  /**
19
19
  * Текст кнопки-иконки. Делает ее доступной для ассистивных технологий.
20
20
  */
@@ -43,7 +43,6 @@
43
43
 
44
44
  .img {
45
45
  display: block;
46
- visibility: hidden;
47
46
  inline-size: 100%;
48
47
  block-size: 100%;
49
48
  border: 0;
@@ -89,8 +88,8 @@
89
88
  );
90
89
  }
91
90
 
92
- .loaded .img {
93
- visibility: visible;
91
+ .host:not(.loaded) .img {
92
+ visibility: hidden;
94
93
  }
95
94
 
96
95
  .fallback {
@@ -1 +1 @@
1
- {"version":3,"sources":["./ImageBase.module.css"],"names":["host","loaded","transparentBackground","children","border","img","imgKeepRatio","imgObjectFitContain","imgObjectFitCover","imgObjectFitNone","imgObjectFitScaleDown","withObjectPosition","withFilter","fallback"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,Q,WAbA;AAAA,E,aAcAC,uB,WAdA;AAAA,E,aAkBAC,U,WAlBA;AAAA,E,aAmBAC,Q,WAnBA;AAAA,E,aA2BAD,U,WA3BA;AAAA,E,aAkCAC,Q,WAlCA;AAAA,E,aA2CAC,K,WA3CA;AAAA,E,aAoDAC,c,WApDA;AAAA,E,aAyDAC,qB,WAzDA;AAAA,E,aA6DAC,mB,WA7DA;AAAA,E,aAiEAC,kB,WAjEA;AAAA,E,aAqEAC,uB,WArEA;AAAA,E,aAyEAC,oB,WAzEA;AAAA,E,aAkFAC,Y,WAlFA;AAAA,E,aA2FAX,Q,WA3FA;AAAA,E,aA2FQI,K,WA3FR;AAAA,E,aA+FAQ,U,WA/FA;AAAA,E,aA4G4Cb,M,WA5G5C;AAAA,E,aAiH2CA,M,WAjH3C;AAAA;AAAA","file":"ImageBase.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ImageBase.module.css"],"names":["host","loaded","transparentBackground","children","border","img","imgKeepRatio","imgObjectFitContain","imgObjectFitCover","imgObjectFitNone","imgObjectFitScaleDown","withObjectPosition","withFilter","fallback"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAaAC,Q,WAbA;AAAA,E,aAcAC,uB,WAdA;AAAA,E,aAkBAC,U,WAlBA;AAAA,E,aAmBAC,Q,WAnBA;AAAA,E,aA2BAD,U,WA3BA;AAAA,E,aAkCAC,Q,WAlCA;AAAA,E,aA2CAC,K,WA3CA;AAAA,E,aAmDAC,c,WAnDA;AAAA,E,aAwDAC,qB,WAxDA;AAAA,E,aA4DAC,mB,WA5DA;AAAA,E,aAgEAC,kB,WAhEA;AAAA,E,aAoEAC,uB,WApEA;AAAA,E,aAwEAC,oB,WAxEA;AAAA,E,aAiFAC,Y,WAjFA;AAAA,E,aA0FAZ,M,WA1FA;AAAA,E,aA0FUC,Q,WA1FV;AAAA,E,aA0FmBI,K,WA1FnB;AAAA,E,aA8FAQ,U,WA9FA;AAAA,E,aA2G4Cb,M,WA3G5C;AAAA,E,aAgH2CA,M,WAhH3C;AAAA;AAAA","file":"ImageBase.module.css.d.ts","sourceRoot":""}
@@ -35,9 +35,10 @@ export const InputLike = ({
35
35
  length,
36
36
  index,
37
37
  onElementSelect,
38
- onClick,
39
38
  onFocus,
40
39
  label,
40
+ readOnly,
41
+ onKeyDown,
41
42
  ...restProps
42
43
  }: InputLikeProps) => {
43
44
  const handleElementSelect = React.useCallback(
@@ -52,9 +53,9 @@ export const InputLike = ({
52
53
  <RootComponent
53
54
  Component="span"
54
55
  baseClassName={value?.length === length ? styles.host : undefined}
55
- tabIndex={0}
56
- onClick={onClick}
56
+ tabIndex={readOnly ? -1 : 0}
57
57
  onFocus={callMultiple(onFocus, handleElementSelect)}
58
+ onKeyDown={readOnly ? undefined : onKeyDown}
58
59
  {...restProps}
59
60
  >
60
61
  {label && <VisuallyHidden>{label}</VisuallyHidden>}
@@ -1,9 +1,9 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import { classNames } from '@vkontakte/vkjs';
3
- import { Tappable, type TappableProps } from '../Tappable/Tappable';
3
+ import { Tappable, type TappableOmitProps } from '../Tappable/Tappable';
4
4
  import styles from './Link.module.css';
5
5
 
6
- export interface LinkProps extends TappableProps {
6
+ export interface LinkProps extends TappableOmitProps {
7
7
  /**
8
8
  * Иконка слева.
9
9
  */
@@ -41,6 +41,7 @@ export const Link = ({
41
41
  activeMode="opacity"
42
42
  hoverMode={styles.hover}
43
43
  focusVisibleMode="outside"
44
+ DefaultComponent="span"
44
45
  {...restProps}
45
46
  baseClassName={classNames(
46
47
  styles.host,
@@ -2,7 +2,6 @@ import * as React from 'react';
2
2
  import { Icon16Chevron } from '@vkontakte/icons';
3
3
  import { classNames, hasReactNode } from '@vkontakte/vkjs';
4
4
  import type { HTMLAttributesWithRootRef } from '../../types';
5
- import { RootComponent } from '../RootComponent/RootComponent';
6
5
  import { Tappable } from '../Tappable/Tappable';
7
6
  import { Paragraph } from '../Typography/Paragraph/Paragraph';
8
7
  import styles from './MiniInfoCell.module.css';
@@ -88,13 +87,9 @@ export const MiniInfoCell = ({
88
87
  </React.Fragment>
89
88
  );
90
89
 
91
- return restProps.onClick ? (
92
- <Tappable Component="div" role="button" {...restProps} baseClassName={cellClasses}>
90
+ return (
91
+ <Tappable {...restProps} baseClassName={cellClasses}>
93
92
  {cellContent}
94
93
  </Tappable>
95
- ) : (
96
- <RootComponent {...restProps} baseClassName={cellClasses}>
97
- {cellContent}
98
- </RootComponent>
99
94
  );
100
95
  };
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
3
  import * as React from 'react';
4
- import { Tappable, type TappableProps } from '../Tappable/Tappable';
4
+ import { Tappable, type TappableOmitProps } from '../Tappable/Tappable';
5
5
  import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
6
6
  import styles from './ModalOutsideButton.module.css';
7
7
 
8
- export interface ModalOutsideButtonProps extends TappableProps {
8
+ export interface ModalOutsideButtonProps extends TappableOmitProps {
9
9
  /**
10
10
  * Текст для скринридера.
11
11
  */