@vkontakte/vkui 7.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (649) hide show
  1. package/dist/components/ActionSheet/types.d.ts +1 -1
  2. package/dist/components/ActionSheet/types.d.ts.map +1 -1
  3. package/dist/components/ActionSheet/types.js.map +1 -1
  4. package/dist/components/Alert/Alert.d.ts +1 -1
  5. package/dist/components/Alert/Alert.js.map +1 -1
  6. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  7. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  8. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  9. package/dist/components/AppRoot/AppRootContext.d.ts +2 -2
  10. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  11. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  12. package/dist/components/AppRoot/AppRootPortal.d.ts +1 -1
  13. package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
  14. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  15. package/dist/components/AppRoot/ScrollContext.d.ts +1 -1
  16. package/dist/components/AppRoot/ScrollContext.d.ts.map +1 -1
  17. package/dist/components/AppRoot/ScrollContext.js.map +1 -1
  18. package/dist/components/AspectRatio/AspectRatio.d.ts +7 -3
  19. package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -1
  20. package/dist/components/AspectRatio/AspectRatio.js +1 -1
  21. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  22. package/dist/components/Calendar/Calendar.d.ts +3 -4
  23. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  24. package/dist/components/Calendar/Calendar.js +81 -64
  25. package/dist/components/Calendar/Calendar.js.map +1 -1
  26. package/dist/components/CalendarDay/CalendarDay.d.ts +3 -0
  27. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  28. package/dist/components/CalendarDay/CalendarDay.js +3 -1
  29. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  30. package/dist/components/CalendarDays/CalendarDays.d.ts +3 -0
  31. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  32. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  33. package/dist/components/CalendarHeader/CalendarHeader.d.ts +12 -0
  34. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  35. package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
  36. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  37. package/dist/components/CalendarRange/CalendarRange.d.ts +7 -1
  38. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  39. package/dist/components/CalendarRange/CalendarRange.js +108 -93
  40. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  41. package/dist/components/CalendarTime/CalendarTime.d.ts +20 -4
  42. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  43. package/dist/components/CalendarTime/CalendarTime.js +68 -9
  44. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  45. package/dist/components/CardScroll/CardScroll.d.ts +2 -3
  46. package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
  47. package/dist/components/CardScroll/CardScroll.js +6 -2
  48. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  49. package/dist/components/CarouselBase/Bullets.d.ts +16 -0
  50. package/dist/components/CarouselBase/Bullets.d.ts.map +1 -0
  51. package/dist/components/CarouselBase/Bullets.js +21 -0
  52. package/dist/components/CarouselBase/Bullets.js.map +1 -0
  53. package/dist/components/CarouselBase/CarouselBase.d.ts +4 -0
  54. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -0
  55. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +175 -98
  56. package/dist/components/CarouselBase/CarouselBase.js.map +1 -0
  57. package/dist/components/CarouselBase/CarouselViewPort.d.ts +14 -0
  58. package/dist/components/CarouselBase/CarouselViewPort.d.ts.map +1 -0
  59. package/dist/components/CarouselBase/CarouselViewPort.js +29 -0
  60. package/dist/components/CarouselBase/CarouselViewPort.js.map +1 -0
  61. package/dist/components/CarouselBase/ScrollArrows.d.ts +23 -0
  62. package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -0
  63. package/dist/components/CarouselBase/ScrollArrows.js +34 -0
  64. package/dist/components/CarouselBase/ScrollArrows.js.map +1 -0
  65. package/dist/components/CarouselBase/constants.d.ts.map +1 -0
  66. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  67. package/dist/components/CarouselBase/constants.js.map +1 -0
  68. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.d.ts +13 -4
  69. package/dist/components/CarouselBase/helpers.d.ts.map +1 -0
  70. package/dist/{cssm/components/BaseGallery → components}/CarouselBase/helpers.js +41 -5
  71. package/dist/components/CarouselBase/helpers.js.map +1 -0
  72. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.d.ts +1 -1
  73. package/dist/components/CarouselBase/hooks.d.ts.map +1 -0
  74. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  75. package/dist/components/CarouselBase/hooks.js.map +1 -0
  76. package/dist/components/CarouselBase/types.d.ts +125 -0
  77. package/dist/components/CarouselBase/types.d.ts.map +1 -0
  78. package/dist/components/CarouselBase/types.js.map +1 -0
  79. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  80. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  81. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  82. package/dist/components/ChipsInput/useChipsInput.d.ts +1 -1
  83. package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
  84. package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
  85. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  86. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  87. package/dist/components/ChipsSelect/useChipsSelect.d.ts +1 -1
  88. package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
  89. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  90. package/dist/components/Clickable/useState.js.map +1 -1
  91. package/dist/components/Clickable/useStateWithDelay.js +1 -1
  92. package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
  93. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  94. package/dist/components/ConfigProvider/ConfigProvider.js +8 -23
  95. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  96. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  97. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts.map +1 -1
  98. package/dist/components/ConfigProvider/ConfigProviderContext.js +22 -0
  99. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  100. package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
  101. package/dist/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  102. package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  103. package/dist/components/CustomScrollView/CustomScrollView.d.ts +5 -1
  104. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  105. package/dist/components/CustomScrollView/CustomScrollView.js +9 -4
  106. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  107. package/dist/components/CustomSelect/CustomSelect.d.ts +6 -2
  108. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  109. package/dist/components/CustomSelect/CustomSelect.js +8 -4
  110. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  111. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  112. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  113. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  114. package/dist/components/DateInput/DateInput.d.ts +24 -2
  115. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  116. package/dist/components/DateInput/DateInput.js +41 -6
  117. package/dist/components/DateInput/DateInput.js.map +1 -1
  118. package/dist/components/DateRangeInput/DateRangeInput.d.ts +19 -1
  119. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  120. package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
  121. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  122. package/dist/components/Epic/Epic.d.ts.map +1 -1
  123. package/dist/components/Epic/Epic.js.map +1 -1
  124. package/dist/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  125. package/dist/components/FixedLayout/FixedLayout.js +1 -2
  126. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  127. package/dist/components/Gallery/Gallery.d.ts +2 -3
  128. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  129. package/dist/components/Gallery/Gallery.js +3 -6
  130. package/dist/components/Gallery/Gallery.js.map +1 -1
  131. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +9 -1
  132. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  133. package/dist/components/HorizontalScroll/HorizontalScroll.js +6 -4
  134. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  135. package/dist/components/Image/Image.d.ts +1 -0
  136. package/dist/components/Image/Image.d.ts.map +1 -1
  137. package/dist/components/Image/Image.js +2 -0
  138. package/dist/components/Image/Image.js.map +1 -1
  139. package/dist/components/ImageBase/ImageBase.d.ts +8 -1
  140. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  141. package/dist/components/ImageBase/ImageBase.js +39 -11
  142. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  143. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts +29 -0
  144. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts.map +1 -0
  145. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +96 -0
  146. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  147. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts +4 -0
  148. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts.map +1 -0
  149. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  150. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  151. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +1 -1
  152. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -1
  153. package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  154. package/dist/components/ImageBase/context.d.ts.map +1 -1
  155. package/dist/components/ImageBase/context.js +3 -1
  156. package/dist/components/ImageBase/context.js.map +1 -1
  157. package/dist/components/ImageBase/types.d.ts +2 -0
  158. package/dist/components/ImageBase/types.d.ts.map +1 -1
  159. package/dist/components/ImageBase/types.js.map +1 -1
  160. package/dist/components/ImageBase/validators.d.ts +2 -1
  161. package/dist/components/ImageBase/validators.d.ts.map +1 -1
  162. package/dist/components/ImageBase/validators.js.map +1 -1
  163. package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  164. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  165. package/dist/components/ModalRoot/ModalRootContext.d.ts +1 -1
  166. package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
  167. package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
  168. package/dist/components/Pagination/Pagination.d.ts +14 -1
  169. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  170. package/dist/components/Pagination/Pagination.js +13 -4
  171. package/dist/components/Pagination/Pagination.js.map +1 -1
  172. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts +2 -0
  173. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts.map +1 -1
  174. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  175. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  176. package/dist/components/Popover/Popover.d.ts +2 -2
  177. package/dist/components/Popover/Popover.d.ts.map +1 -1
  178. package/dist/components/Popover/Popover.js +6 -126
  179. package/dist/components/Popover/Popover.js.map +1 -1
  180. package/dist/components/Popover/usePopover.d.ts +14 -0
  181. package/dist/components/Popover/usePopover.d.ts.map +1 -0
  182. package/dist/components/Popover/usePopover.js +138 -0
  183. package/dist/components/Popover/usePopover.js.map +1 -0
  184. package/dist/components/Popper/Popper.d.ts +1 -1
  185. package/dist/components/Popper/Popper.d.ts.map +1 -1
  186. package/dist/components/Popper/Popper.js.map +1 -1
  187. package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
  188. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  189. package/dist/components/Removable/Removable.d.ts +2 -2
  190. package/dist/components/Removable/Removable.js.map +1 -1
  191. package/dist/components/RichCell/RichCell.d.ts +11 -1
  192. package/dist/components/RichCell/RichCell.d.ts.map +1 -1
  193. package/dist/components/RichCell/RichCell.js +15 -8
  194. package/dist/components/RichCell/RichCell.js.map +1 -1
  195. package/dist/components/Root/Root.d.ts.map +1 -1
  196. package/dist/components/Root/Root.js +3 -1
  197. package/dist/components/Root/Root.js.map +1 -1
  198. package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -2
  199. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  200. package/dist/components/SegmentedControl/SegmentedControl.js +30 -10
  201. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  202. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts +5 -3
  203. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts.map +1 -1
  204. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +6 -17
  205. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  206. package/dist/components/Select/Select.d.ts.map +1 -1
  207. package/dist/components/Select/Select.js +3 -2
  208. package/dist/components/Select/Select.js.map +1 -1
  209. package/dist/components/Skeleton/Skeleton.js +2 -2
  210. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  211. package/dist/components/Slider/Slider.d.ts +9 -1
  212. package/dist/components/Slider/Slider.d.ts.map +1 -1
  213. package/dist/components/Slider/Slider.js +5 -1
  214. package/dist/components/Slider/Slider.js.map +1 -1
  215. package/dist/components/Snackbar/Snackbar.js +1 -1
  216. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  217. package/dist/components/SplitCol/SplitColContext.d.ts +1 -1
  218. package/dist/components/SplitCol/SplitColContext.d.ts.map +1 -1
  219. package/dist/components/SplitCol/SplitColContext.js.map +1 -1
  220. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  221. package/dist/components/Tabs/Tabs.js +2 -82
  222. package/dist/components/Tabs/Tabs.js.map +1 -1
  223. package/dist/components/Textarea/Textarea.js +2 -2
  224. package/dist/components/Textarea/Textarea.js.map +1 -1
  225. package/dist/components/Textarea/useResizeTextarea.d.ts +1 -1
  226. package/dist/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  227. package/dist/components/Textarea/useResizeTextarea.js +1 -1
  228. package/dist/components/Textarea/useResizeTextarea.js.map +1 -1
  229. package/dist/components/Tooltip/Tooltip.d.ts +2 -2
  230. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  231. package/dist/components/Tooltip/Tooltip.js +4 -2
  232. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  233. package/dist/components/UsersStack/UsersStack.d.ts +1 -1
  234. package/dist/components/UsersStack/UsersStack.d.ts.map +1 -1
  235. package/dist/components/UsersStack/UsersStack.js +16 -5
  236. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  237. package/dist/components/View/View.d.ts.map +1 -1
  238. package/dist/components/View/View.js +3 -1
  239. package/dist/components/View/View.js.map +1 -1
  240. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  241. package/dist/components/View/ViewInfinite.js +3 -1
  242. package/dist/components/View/ViewInfinite.js.map +1 -1
  243. package/dist/components.css +1 -1
  244. package/dist/components.css.map +1 -1
  245. package/dist/context/CalendarDirectionContext.d.ts +7 -0
  246. package/dist/context/CalendarDirectionContext.d.ts.map +1 -0
  247. package/dist/context/CalendarDirectionContext.js +7 -0
  248. package/dist/context/CalendarDirectionContext.js.map +1 -0
  249. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  250. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  251. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  252. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  253. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  254. package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
  255. package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
  256. package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
  257. package/dist/cssm/components/Calendar/Calendar.js +79 -64
  258. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  259. package/dist/cssm/components/CalendarDay/CalendarDay.js +3 -1
  260. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  261. package/dist/cssm/components/CalendarDay/CalendarDay.module.css +4 -0
  262. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  263. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
  264. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  265. package/dist/cssm/components/CalendarRange/CalendarRange.js +108 -94
  266. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  267. package/dist/cssm/components/CalendarTime/CalendarTime.js +67 -9
  268. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  269. package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
  270. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  271. package/dist/cssm/components/CarouselBase/Bullets.js +22 -0
  272. package/dist/cssm/components/CarouselBase/Bullets.js.map +1 -0
  273. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +164 -97
  274. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -0
  275. package/dist/cssm/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +21 -1
  276. package/dist/cssm/components/CarouselBase/CarouselViewPort.js +30 -0
  277. package/dist/cssm/components/CarouselBase/CarouselViewPort.js.map +1 -0
  278. package/dist/cssm/components/CarouselBase/ScrollArrows.js +35 -0
  279. package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -0
  280. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  281. package/dist/cssm/components/CarouselBase/constants.js.map +1 -0
  282. package/dist/{components/BaseGallery → cssm/components}/CarouselBase/helpers.js +39 -5
  283. package/dist/cssm/components/CarouselBase/helpers.js.map +1 -0
  284. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  285. package/dist/cssm/components/CarouselBase/hooks.js.map +1 -0
  286. package/dist/cssm/components/CarouselBase/types.js.map +1 -0
  287. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  288. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
  289. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  290. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  291. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  292. package/dist/cssm/components/Clickable/useStateWithDelay.js +1 -1
  293. package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
  294. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -23
  295. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  296. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +22 -0
  297. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  298. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  299. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  300. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +8 -4
  301. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  302. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +6 -2
  303. package/dist/cssm/components/CustomSelect/CustomSelect.js +6 -3
  304. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  305. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  306. package/dist/cssm/components/DateInput/DateInput.js +37 -5
  307. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  308. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
  309. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  310. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  311. package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -2
  312. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  313. package/dist/cssm/components/FormField/FormField.module.css +11 -11
  314. package/dist/cssm/components/Gallery/Gallery.js +3 -5
  315. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  316. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +3 -3
  317. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  318. package/dist/cssm/components/Image/Image.js +2 -0
  319. package/dist/cssm/components/Image/Image.js.map +1 -1
  320. package/dist/cssm/components/ImageBase/ImageBase.js +35 -9
  321. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  322. package/dist/cssm/components/ImageBase/ImageBase.module.css +9 -0
  323. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +91 -0
  324. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  325. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  326. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  327. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  328. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  329. package/dist/cssm/components/ImageBase/context.js +3 -1
  330. package/dist/cssm/components/ImageBase/context.js.map +1 -1
  331. package/dist/cssm/components/ImageBase/types.js.map +1 -1
  332. package/dist/cssm/components/ImageBase/validators.js.map +1 -1
  333. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  334. package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
  335. package/dist/cssm/components/Pagination/Pagination.js +10 -4
  336. package/dist/cssm/components/Pagination/Pagination.js.map +1 -1
  337. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  338. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  339. package/dist/cssm/components/Popover/Popover.js +5 -93
  340. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  341. package/dist/cssm/components/Popover/usePopover.js +102 -0
  342. package/dist/cssm/components/Popover/usePopover.js.map +1 -0
  343. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  344. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -1
  345. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  346. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  347. package/dist/cssm/components/RichCell/RichCell.js +13 -8
  348. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  349. package/dist/cssm/components/RichCell/RichCell.module.css +17 -3
  350. package/dist/cssm/components/Root/Root.js +3 -1
  351. package/dist/cssm/components/Root/Root.js.map +1 -1
  352. package/dist/cssm/components/SegmentedControl/SegmentedControl.js +27 -7
  353. package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
  354. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +5 -5
  355. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  356. package/dist/cssm/components/Select/Select.js +1 -1
  357. package/dist/cssm/components/Select/Select.js.map +1 -1
  358. package/dist/cssm/components/Skeleton/Skeleton.js +2 -2
  359. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  360. package/dist/cssm/components/Slider/Slider.js +3 -1
  361. package/dist/cssm/components/Slider/Slider.js.map +1 -1
  362. package/dist/cssm/components/Snackbar/Snackbar.js +1 -1
  363. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  364. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  365. package/dist/cssm/components/SplitCol/SplitColContext.js.map +1 -1
  366. package/dist/cssm/components/Tabs/Tabs.js +2 -82
  367. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  368. package/dist/cssm/components/Textarea/Textarea.js +2 -2
  369. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  370. package/dist/cssm/components/Textarea/useResizeTextarea.js +1 -1
  371. package/dist/cssm/components/Textarea/useResizeTextarea.js.map +1 -1
  372. package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
  373. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  374. package/dist/cssm/components/UsersStack/UsersStack.js +15 -4
  375. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  376. package/dist/cssm/components/UsersStack/UsersStack.module.css +27 -17
  377. package/dist/cssm/components/View/View.js +3 -1
  378. package/dist/cssm/components/View/View.js.map +1 -1
  379. package/dist/cssm/components/View/ViewInfinite.js +3 -1
  380. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  381. package/dist/cssm/context/CalendarDirectionContext.js +7 -0
  382. package/dist/cssm/context/CalendarDirectionContext.js.map +1 -0
  383. package/dist/cssm/helpers/getMergedSameEventsByProps.js.map +1 -1
  384. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  385. package/dist/cssm/hooks/useDirection.js.map +1 -1
  386. package/dist/cssm/hooks/useDraggableWithDomApi/types.js.map +1 -1
  387. package/dist/cssm/hooks/useEnsuredControl.js +1 -1
  388. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  389. package/dist/cssm/hooks/useExternRef.js.map +1 -1
  390. package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
  391. package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
  392. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  393. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  394. package/dist/cssm/hooks/useNativeFormResetListener.js.map +1 -1
  395. package/dist/cssm/hooks/usePatchChildren.js.map +1 -1
  396. package/dist/cssm/hooks/usePrevious.js +1 -1
  397. package/dist/cssm/hooks/usePrevious.js.map +1 -1
  398. package/dist/cssm/hooks/useResizeObserver.js +20 -4
  399. package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
  400. package/dist/cssm/hooks/useStateWithPrev.js.map +1 -1
  401. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  402. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
  403. package/dist/cssm/hooks/useTabsNavigation.js +90 -0
  404. package/dist/cssm/hooks/useTabsNavigation.js.map +1 -0
  405. package/dist/cssm/index.js +4 -0
  406. package/dist/cssm/index.js.map +1 -1
  407. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  408. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  409. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  410. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  411. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  412. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  413. package/dist/cssm/lib/utils.js.map +1 -1
  414. package/dist/cssm/styles/constants.css +1 -0
  415. package/dist/helpers/getMergedSameEventsByProps.d.ts +1 -1
  416. package/dist/helpers/getMergedSameEventsByProps.d.ts.map +1 -1
  417. package/dist/helpers/getMergedSameEventsByProps.js.map +1 -1
  418. package/dist/hooks/useDateInput.d.ts +3 -3
  419. package/dist/hooks/useDateInput.d.ts.map +1 -1
  420. package/dist/hooks/useDateInput.js.map +1 -1
  421. package/dist/hooks/useDirection.d.ts +2 -2
  422. package/dist/hooks/useDirection.d.ts.map +1 -1
  423. package/dist/hooks/useDirection.js.map +1 -1
  424. package/dist/hooks/useDraggableWithDomApi/types.d.ts +1 -1
  425. package/dist/hooks/useDraggableWithDomApi/types.d.ts.map +1 -1
  426. package/dist/hooks/useDraggableWithDomApi/types.js.map +1 -1
  427. package/dist/hooks/useEnsuredControl.js +1 -1
  428. package/dist/hooks/useEnsuredControl.js.map +1 -1
  429. package/dist/hooks/useExternRef.d.ts +1 -1
  430. package/dist/hooks/useExternRef.d.ts.map +1 -1
  431. package/dist/hooks/useExternRef.js.map +1 -1
  432. package/dist/hooks/useFocusTrap.d.ts +1 -1
  433. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  434. package/dist/hooks/useFocusTrap.js.map +1 -1
  435. package/dist/hooks/useGlobalOnClickOutside.d.ts +1 -1
  436. package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
  437. package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
  438. package/dist/hooks/useKeyboardInputTracker.d.ts +1 -1
  439. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  440. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  441. package/dist/hooks/useMutationObserver.d.ts +1 -1
  442. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  443. package/dist/hooks/useMutationObserver.js.map +1 -1
  444. package/dist/hooks/useNativeFormResetListener.d.ts +1 -1
  445. package/dist/hooks/useNativeFormResetListener.d.ts.map +1 -1
  446. package/dist/hooks/useNativeFormResetListener.js.map +1 -1
  447. package/dist/hooks/usePatchChildren.d.ts +2 -2
  448. package/dist/hooks/usePatchChildren.d.ts.map +1 -1
  449. package/dist/hooks/usePatchChildren.js.map +1 -1
  450. package/dist/hooks/usePrevious.js +1 -1
  451. package/dist/hooks/usePrevious.js.map +1 -1
  452. package/dist/hooks/useResizeObserver.d.ts +1 -1
  453. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  454. package/dist/hooks/useResizeObserver.js +20 -4
  455. package/dist/hooks/useResizeObserver.js.map +1 -1
  456. package/dist/hooks/useStateWithPrev.d.ts.map +1 -1
  457. package/dist/hooks/useStateWithPrev.js.map +1 -1
  458. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +1 -1
  459. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  460. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  461. package/dist/hooks/useSyncHTMLWithTokens.d.ts +1 -1
  462. package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -1
  463. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
  464. package/dist/hooks/useTabsNavigation.d.ts +5 -0
  465. package/dist/hooks/useTabsNavigation.d.ts.map +1 -0
  466. package/dist/hooks/useTabsNavigation.js +90 -0
  467. package/dist/hooks/useTabsNavigation.js.map +1 -0
  468. package/dist/index.d.ts +5 -1
  469. package/dist/index.d.ts.map +1 -1
  470. package/dist/index.js +4 -0
  471. package/dist/index.js.map +1 -1
  472. package/dist/lib/animation/useCSSTransition.d.ts +1 -1
  473. package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
  474. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  475. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
  476. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  477. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  478. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  479. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +10 -1
  480. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  481. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  482. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  483. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  484. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  485. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  486. package/dist/lib/utils.d.ts +1 -1
  487. package/dist/lib/utils.d.ts.map +1 -1
  488. package/dist/lib/utils.js.map +1 -1
  489. package/dist/vkui.css +1 -1
  490. package/dist/vkui.css.map +1 -1
  491. package/package.json +6 -6
  492. package/src/components/ActionSheet/types.ts +1 -1
  493. package/src/components/Alert/Alert.tsx +1 -1
  494. package/src/components/AppRoot/AppRoot.tsx +1 -1
  495. package/src/components/AppRoot/AppRootContext.ts +2 -2
  496. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  497. package/src/components/AppRoot/ScrollContext.tsx +1 -1
  498. package/src/components/AspectRatio/AspectRatio.tsx +11 -4
  499. package/src/components/Calendar/Calendar.tsx +90 -72
  500. package/src/components/CalendarDay/CalendarDay.module.css +4 -0
  501. package/src/components/CalendarDay/CalendarDay.tsx +10 -1
  502. package/src/components/CalendarDays/CalendarDays.tsx +3 -0
  503. package/src/components/CalendarHeader/CalendarHeader.tsx +17 -2
  504. package/src/components/CalendarRange/CalendarRange.tsx +110 -84
  505. package/src/components/CalendarTime/CalendarTime.tsx +104 -16
  506. package/src/components/CardScroll/CardScroll.tsx +8 -2
  507. package/src/components/CarouselBase/Bullets.tsx +36 -0
  508. package/src/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +19 -1
  509. package/src/components/CarouselBase/CarouselBase.tsx +502 -0
  510. package/src/components/CarouselBase/CarouselViewPort.tsx +54 -0
  511. package/src/components/CarouselBase/ScrollArrows.tsx +80 -0
  512. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/constants.ts +4 -0
  513. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.ts +67 -7
  514. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.ts +2 -2
  515. package/src/components/CarouselBase/types.ts +135 -0
  516. package/src/components/ChipsInput/ChipsInput.tsx +1 -1
  517. package/src/components/ChipsInput/useChipsInput.ts +2 -2
  518. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  519. package/src/components/ChipsSelect/useChipsSelect.ts +1 -1
  520. package/src/components/Clickable/useState.tsx +2 -2
  521. package/src/components/Clickable/useStateWithDelay.tsx +1 -1
  522. package/src/components/ConfigProvider/ConfigProvider.tsx +8 -35
  523. package/src/components/ConfigProvider/ConfigProviderContext.tsx +36 -0
  524. package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -5
  525. package/src/components/CustomScrollView/CustomScrollView.module.css +6 -2
  526. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  527. package/src/components/CustomSelect/CustomSelect.tsx +12 -4
  528. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -1
  529. package/src/components/DateInput/DateInput.tsx +62 -5
  530. package/src/components/DateRangeInput/DateRangeInput.tsx +22 -2
  531. package/src/components/Epic/Epic.tsx +5 -3
  532. package/src/components/FixedLayout/FixedLayout.tsx +1 -2
  533. package/src/components/FormField/FormField.module.css +11 -11
  534. package/src/components/Gallery/Gallery.tsx +4 -10
  535. package/src/components/HorizontalScroll/HorizontalScroll.tsx +12 -2
  536. package/src/components/Image/Image.tsx +4 -0
  537. package/src/components/ImageBase/ImageBase.module.css +9 -0
  538. package/src/components/ImageBase/ImageBase.tsx +69 -10
  539. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  540. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +168 -0
  541. package/src/components/ImageBase/ImageBaseFloatElement/helpers.ts +44 -0
  542. package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +1 -1
  543. package/src/components/ImageBase/context.ts +2 -0
  544. package/src/components/ImageBase/types.ts +2 -0
  545. package/src/components/ImageBase/validators.ts +5 -4
  546. package/src/components/ModalCardBase/ModalCardBase.tsx +1 -1
  547. package/src/components/ModalRoot/ModalRootContext.tsx +3 -1
  548. package/src/components/Pagination/Pagination.tsx +23 -4
  549. package/src/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.tsx +4 -2
  550. package/src/components/Popover/Popover.tsx +6 -166
  551. package/src/components/Popover/usePopover.tsx +183 -0
  552. package/src/components/Popper/Popper.tsx +1 -1
  553. package/src/components/PullToRefresh/PullToRefresh.tsx +1 -1
  554. package/src/components/Removable/Removable.tsx +2 -2
  555. package/src/components/RichCell/RichCell.module.css +17 -3
  556. package/src/components/RichCell/RichCell.tsx +28 -8
  557. package/src/components/Root/Root.tsx +4 -2
  558. package/src/components/SegmentedControl/SegmentedControl.tsx +46 -14
  559. package/src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx +14 -10
  560. package/src/components/Select/Select.tsx +1 -0
  561. package/src/components/Skeleton/Skeleton.tsx +3 -3
  562. package/src/components/Slider/Slider.tsx +12 -0
  563. package/src/components/Snackbar/Snackbar.tsx +1 -1
  564. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  565. package/src/components/SplitCol/SplitColContext.tsx +1 -1
  566. package/src/components/Tabs/Tabs.tsx +2 -99
  567. package/src/components/Textarea/Textarea.tsx +2 -2
  568. package/src/components/Textarea/useResizeTextarea.ts +3 -3
  569. package/src/components/Tooltip/Tooltip.tsx +3 -0
  570. package/src/components/UsersStack/UsersStack.module.css +27 -17
  571. package/src/components/UsersStack/UsersStack.tsx +24 -3
  572. package/src/components/View/View.tsx +9 -5
  573. package/src/components/View/ViewInfinite.tsx +5 -3
  574. package/src/context/CalendarDirectionContext.ts +12 -0
  575. package/src/helpers/getMergedSameEventsByProps.ts +1 -1
  576. package/src/hooks/useDateInput.ts +5 -5
  577. package/src/hooks/useDirection.ts +3 -3
  578. package/src/hooks/useDraggableWithDomApi/types.ts +1 -1
  579. package/src/hooks/useEnsuredControl.ts +1 -1
  580. package/src/hooks/useExternRef.ts +2 -2
  581. package/src/hooks/useFocusTrap.ts +1 -1
  582. package/src/hooks/useGlobalOnClickOutside.ts +1 -1
  583. package/src/hooks/useKeyboardInputTracker.ts +1 -1
  584. package/src/hooks/useMutationObserver.ts +1 -1
  585. package/src/hooks/useNativeFormResetListener.ts +1 -1
  586. package/src/hooks/usePatchChildren.ts +2 -9
  587. package/src/hooks/usePrevious.ts +1 -1
  588. package/src/hooks/useResizeObserver.ts +30 -6
  589. package/src/hooks/useStateWithPrev.ts +1 -5
  590. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
  591. package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
  592. package/src/hooks/useTabsNavigation.ts +104 -0
  593. package/src/index.ts +7 -0
  594. package/src/lib/animation/useCSSTransition.ts +1 -1
  595. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +9 -9
  596. package/src/lib/floating/useFloatingWithInteractions/types.ts +15 -5
  597. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +7 -2
  598. package/src/lib/utils.ts +2 -2
  599. package/src/styles/constants.css +1 -0
  600. package/dist/components/BaseGallery/BaseGallery.d.ts +0 -4
  601. package/dist/components/BaseGallery/BaseGallery.d.ts.map +0 -1
  602. package/dist/components/BaseGallery/BaseGallery.js +0 -321
  603. package/dist/components/BaseGallery/BaseGallery.js.map +0 -1
  604. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts +0 -4
  605. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +0 -1
  606. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  607. package/dist/components/BaseGallery/CarouselBase/constants.d.ts.map +0 -1
  608. package/dist/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  609. package/dist/components/BaseGallery/CarouselBase/helpers.d.ts.map +0 -1
  610. package/dist/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  611. package/dist/components/BaseGallery/CarouselBase/hooks.d.ts.map +0 -1
  612. package/dist/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  613. package/dist/components/BaseGallery/CarouselBase/types.d.ts +0 -54
  614. package/dist/components/BaseGallery/CarouselBase/types.d.ts.map +0 -1
  615. package/dist/components/BaseGallery/CarouselBase/types.js.map +0 -1
  616. package/dist/components/BaseGallery/helpers.d.ts +0 -13
  617. package/dist/components/BaseGallery/helpers.d.ts.map +0 -1
  618. package/dist/components/BaseGallery/helpers.js +0 -24
  619. package/dist/components/BaseGallery/helpers.js.map +0 -1
  620. package/dist/components/BaseGallery/types.d.ts +0 -55
  621. package/dist/components/BaseGallery/types.d.ts.map +0 -1
  622. package/dist/components/BaseGallery/types.js.map +0 -1
  623. package/dist/cssm/components/BaseGallery/BaseGallery.js +0 -293
  624. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +0 -1
  625. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  626. package/dist/cssm/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  627. package/dist/cssm/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  628. package/dist/cssm/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  629. package/dist/cssm/components/BaseGallery/CarouselBase/types.js +0 -3
  630. package/dist/cssm/components/BaseGallery/CarouselBase/types.js.map +0 -1
  631. package/dist/cssm/components/BaseGallery/helpers.js +0 -24
  632. package/dist/cssm/components/BaseGallery/helpers.js.map +0 -1
  633. package/dist/cssm/components/BaseGallery/types.js +0 -3
  634. package/dist/cssm/components/BaseGallery/types.js.map +0 -1
  635. package/dist/cssm/hooks/useObjectMemo.js +0 -15
  636. package/dist/cssm/hooks/useObjectMemo.js.map +0 -1
  637. package/dist/hooks/useObjectMemo.d.ts +0 -5
  638. package/dist/hooks/useObjectMemo.d.ts.map +0 -1
  639. package/dist/hooks/useObjectMemo.js +0 -15
  640. package/dist/hooks/useObjectMemo.js.map +0 -1
  641. package/src/components/BaseGallery/BaseGallery.tsx +0 -380
  642. package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +0 -399
  643. package/src/components/BaseGallery/CarouselBase/types.ts +0 -56
  644. package/src/components/BaseGallery/helpers.ts +0 -46
  645. package/src/components/BaseGallery/types.ts +0 -61
  646. package/src/hooks/useObjectMemo.ts +0 -16
  647. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.d.ts +0 -0
  648. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/types.js +0 -0
  649. /package/dist/{components/BaseGallery → cssm/components/CarouselBase}/types.js +0 -0
@@ -0,0 +1,502 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { classNames } from '@vkontakte/vkjs';
5
+ import { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';
6
+ import { useExternRef } from '../../hooks/useExternRef';
7
+ import { useMutationObserver } from '../../hooks/useMutationObserver';
8
+ import { useResizeObserver } from '../../hooks/useResizeObserver';
9
+ import { useDOM } from '../../lib/dom';
10
+ import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
11
+ import { warnOnce } from '../../lib/warnOnce';
12
+ import { RootComponent } from '../RootComponent/RootComponent';
13
+ import { type CustomTouchEvent } from '../Touch/Touch';
14
+ import { Bullets } from './Bullets';
15
+ import { CarouselViewPort } from './CarouselViewPort';
16
+ import { ScrollArrows } from './ScrollArrows';
17
+ import {
18
+ ANIMATION_DURATION,
19
+ CONTROL_ELEMENTS_STATE,
20
+ SLIDE_THRESHOLD,
21
+ SLIDES_MANAGER_STATE,
22
+ } from './constants';
23
+ import { calcMax, calcMin, calculateIndent, getLoopPoints, getTargetIndex } from './helpers';
24
+ import { useSlideAnimation } from './hooks';
25
+ import {
26
+ type BaseGalleryProps,
27
+ type ControlElementsState,
28
+ type GallerySlidesState,
29
+ type SlidesManagerState,
30
+ } from './types';
31
+ import styles from './CarouselBase.module.css';
32
+
33
+ const warn = warnOnce('Gallery');
34
+
35
+ export const CarouselBase = ({
36
+ bullets = false,
37
+ getRootRef,
38
+ children,
39
+ slideWidth = '100%',
40
+ slideIndex = 0,
41
+ dragDisabled = false,
42
+ resizeSource = 'window',
43
+ onDragStart,
44
+ onDragEnd,
45
+ onChange,
46
+ onPrevClick,
47
+ onNextClick,
48
+ align = 'left',
49
+ showArrows,
50
+ getRef,
51
+ arrowSize,
52
+ arrowAreaHeight,
53
+ slideTestId,
54
+ bulletTestId,
55
+ nextArrowTestId,
56
+ prevArrowTestId,
57
+ looped = false,
58
+ ...restProps
59
+ }: BaseGalleryProps): React.ReactNode => {
60
+ const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});
61
+ const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);
62
+
63
+ const rootRef = useExternRef(getRootRef);
64
+ const viewportRef = useExternRef(getRef);
65
+ const layerRef = React.useRef<HTMLDivElement>(null);
66
+ const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);
67
+ const shiftXCurrentRef = React.useRef<number>(0);
68
+ const shiftXDeltaRef = React.useRef<number>(0);
69
+ const initialized = React.useRef<boolean>(false);
70
+ const { addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();
71
+ const isDragging = React.useRef(false);
72
+
73
+ const [controlElementsState, setControlElementsState] =
74
+ React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);
75
+
76
+ const hasPointer = useAdaptivityHasPointer();
77
+
78
+ const isCenterAlign = align === 'center';
79
+
80
+ /*
81
+ * Считает отступ слоя галереи во время драга
82
+ * Используется только для looped=false галереи
83
+ * так как только у нее есть пределы по краям
84
+ */
85
+ const calculateDragIndent = () => {
86
+ const localMax = slidesManager.current.max ?? 0;
87
+ const localMin = slidesManager.current.min ?? 0;
88
+ const indent = shiftXCurrentRef.current + shiftXDeltaRef.current;
89
+
90
+ if (indent > localMax) {
91
+ return localMax + Number((indent - localMax) / 3);
92
+ } else if (indent < localMin) {
93
+ return localMin + Number((indent - localMin) / 3);
94
+ }
95
+
96
+ return indent;
97
+ };
98
+
99
+ const calculateCanSlideLeft = () => {
100
+ if (looped) {
101
+ return !slidesManager.current.isFullyVisible;
102
+ }
103
+ return !slidesManager.current.isFullyVisible && shiftXCurrentRef.current < 0;
104
+ };
105
+
106
+ const calculateCanSlideRight = () => {
107
+ if (looped) {
108
+ return !slidesManager.current.isFullyVisible;
109
+ }
110
+ return (
111
+ !slidesManager.current.isFullyVisible &&
112
+ // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side
113
+ ((align === 'left' &&
114
+ slidesManager.current.containerWidth - shiftXCurrentRef.current <
115
+ (slidesManager.current.layerWidth ?? 0)) ||
116
+ // otherwise we need to check current slide index (align = right or align = center)
117
+ (align !== 'left' && slideIndex < slidesManager.current.slides.length - 1))
118
+ );
119
+ };
120
+
121
+ const transformCssStyles = (shiftX: number, animation = false) => {
122
+ shiftX = Math.round(shiftX);
123
+ if (looped) {
124
+ slidesManager.current.loopPoints.forEach((loopPoint) => {
125
+ const { target, index } = loopPoint;
126
+ const slide = slidesStore.current[index];
127
+ if (slide) {
128
+ slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;
129
+ }
130
+ });
131
+ } else {
132
+ Object.values(slidesStore.current).forEach((slide) => {
133
+ if (slide) {
134
+ slide.style.transform = '';
135
+ }
136
+ });
137
+ }
138
+
139
+ if (layerRef.current) {
140
+ const indent = isDragging.current && !looped ? calculateDragIndent() : shiftX;
141
+
142
+ layerRef.current.style.transform = `translate3d(${indent}px, 0, 0)`;
143
+ layerRef.current.style.transition = animation
144
+ ? `transform ${ANIMATION_DURATION}ms cubic-bezier(.1, 0, .25, 1)`
145
+ : '';
146
+ }
147
+ };
148
+
149
+ const requestTransform = (shiftX: number, animation = false) => {
150
+ const { snaps, contentSize, slides } = slidesManager.current;
151
+
152
+ if (animationFrameRef.current !== null) {
153
+ cancelAnimationFrame(animationFrameRef.current);
154
+ }
155
+ animationFrameRef.current = requestAnimationFrame(() => {
156
+ if (looped && shiftX > snaps[0]) {
157
+ shiftXCurrentRef.current = -contentSize + snaps[0];
158
+ shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;
159
+ }
160
+ const lastPoint = slides[slides.length - 1].width + slides[slides.length - 1].coordX;
161
+
162
+ if (looped && shiftX <= -lastPoint) {
163
+ shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];
164
+ }
165
+ transformCssStyles(shiftX, animation);
166
+ });
167
+ };
168
+
169
+ const initializeSlides = () => {
170
+ if (!rootRef.current || !viewportRef.current) {
171
+ return;
172
+ }
173
+ let localSlides =
174
+ React.Children.map(children, (_item, i): GallerySlidesState => {
175
+ const elem = slidesStore.current[i] || { offsetLeft: 0, offsetWidth: 0 };
176
+ return { coordX: elem.offsetLeft, width: elem.offsetWidth };
177
+ }) || [];
178
+
179
+ if (localSlides.length === 0) {
180
+ initialized.current = false;
181
+ return;
182
+ }
183
+
184
+ const containerWidth = rootRef.current.offsetWidth;
185
+ const viewportOffsetWidth = viewportRef.current.offsetWidth;
186
+ const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);
187
+
188
+ if (process.env.NODE_ENV === 'development' && looped) {
189
+ let remainingWidth = containerWidth;
190
+ let slideIndex = 0;
191
+
192
+ while (remainingWidth > 0 && slideIndex < localSlides.length) {
193
+ remainingWidth -= localSlides[slideIndex].width;
194
+ slideIndex++;
195
+ }
196
+ if (remainingWidth <= 0 && slideIndex === localSlides.length) {
197
+ warn(
198
+ 'Ширины слайдов недостаточно для корректной работы свойства "looped". Пожалуйста, сделайте её больше.',
199
+ );
200
+ }
201
+ }
202
+
203
+ const currentSlideOffsetOnCenterAlignment =
204
+ (containerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;
205
+ const isFullyVisible =
206
+ align === 'center'
207
+ ? layerWidth + currentSlideOffsetOnCenterAlignment <= containerWidth
208
+ : layerWidth <= containerWidth;
209
+
210
+ slidesManager.current = {
211
+ ...slidesManager.current,
212
+ layerWidth,
213
+ containerWidth,
214
+ viewportOffsetWidth,
215
+ slides: localSlides,
216
+ isFullyVisible,
217
+ max: looped
218
+ ? null
219
+ : calcMax({
220
+ slides: localSlides,
221
+ containerWidth,
222
+ isCenterAlign,
223
+ }),
224
+ min: looped
225
+ ? null
226
+ : calcMin({
227
+ containerWidth,
228
+ layerWidth,
229
+ slides: localSlides,
230
+ viewportOffsetWidth,
231
+ align,
232
+ }),
233
+ };
234
+ const snaps = localSlides.map((_, index) =>
235
+ calculateIndent(index, slidesManager.current, isCenterAlign, looped),
236
+ );
237
+
238
+ let contentSize = -snaps[snaps.length - 1] + localSlides[localSlides.length - 1].width;
239
+ if (align === 'center') {
240
+ contentSize += snaps[0];
241
+ }
242
+
243
+ slidesManager.current.snaps = snaps;
244
+ slidesManager.current.contentSize = contentSize;
245
+ if (looped) {
246
+ slidesManager.current.loopPoints = getLoopPoints(slidesManager.current, containerWidth);
247
+ }
248
+
249
+ shiftXCurrentRef.current = snaps[slideIndex];
250
+ initialized.current = true;
251
+
252
+ setControlElementsState({
253
+ canSlideLeft: calculateCanSlideLeft(),
254
+ canSlideRight: calculateCanSlideRight(),
255
+ isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),
256
+ });
257
+ requestTransform(shiftXCurrentRef.current);
258
+ };
259
+
260
+ const onResize = () => {
261
+ if (initialized.current) {
262
+ initializeSlides();
263
+ }
264
+ };
265
+ const { window } = useDOM();
266
+ useResizeObserver(resizeSource === 'element' ? rootRef : window, onResize);
267
+
268
+ const loopedSlideChangePerform = () => {
269
+ const { snaps, slides } = slidesManager.current;
270
+ const indent = snaps[slideIndex];
271
+ let startPoint = shiftXCurrentRef.current;
272
+
273
+ /**
274
+ * Переключаемся с последнего элемента на первый
275
+ * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) "вперед"
276
+ * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения
277
+ */
278
+ if (indent === snaps[0] && shiftXCurrentRef.current <= snaps[snaps.length - 1]) {
279
+ const distance =
280
+ Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width + startPoint;
281
+
282
+ addToAnimationQueue(
283
+ getAnimateFunction((progress) => {
284
+ const shiftX = startPoint + progress * distance * -1;
285
+
286
+ transformCssStyles(shiftX);
287
+
288
+ if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {
289
+ requestAnimationFrame(() => {
290
+ shiftXCurrentRef.current = indent;
291
+ transformCssStyles(snaps[0]);
292
+ });
293
+ }
294
+ }),
295
+ );
296
+ /**
297
+ * Переключаемся с первого слайда на последний
298
+ * Для корректной анимации сначала задаем первым видимым слайдам смещение
299
+ * В следующем кадре начинаем анимация прокрутки "назад"
300
+ */
301
+ } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {
302
+ startPoint = indent - slides[slides.length - 1].width;
303
+
304
+ addToAnimationQueue(() => {
305
+ requestAnimationFrame(() => {
306
+ const shiftX = indent - slides[slides.length - 1].width;
307
+ transformCssStyles(shiftX);
308
+
309
+ getAnimateFunction((progress) => {
310
+ transformCssStyles(startPoint + progress * slides[slides.length - 1].width);
311
+ })();
312
+ });
313
+ });
314
+ /**
315
+ * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения
316
+ */
317
+ } else {
318
+ addToAnimationQueue(() => {
319
+ const distance = Math.abs(indent - startPoint);
320
+ let direction = startPoint <= indent ? 1 : -1;
321
+
322
+ getAnimateFunction((progress) => {
323
+ const shiftX = startPoint + progress * distance * direction;
324
+ transformCssStyles(shiftX);
325
+ })();
326
+ });
327
+ }
328
+ };
329
+
330
+ const simpleSlideChangePerform = () => {
331
+ const { snaps } = slidesManager.current;
332
+ const startPoint = shiftXCurrentRef.current;
333
+ const endPoint = snaps[slideIndex];
334
+ const distance = endPoint - startPoint;
335
+ addToAnimationQueue(
336
+ getAnimateFunction((progress) => transformCssStyles(startPoint + distance * progress)),
337
+ );
338
+ };
339
+
340
+ useIsomorphicLayoutEffect(
341
+ function performSlideChange() {
342
+ if (!initialized.current) {
343
+ return;
344
+ }
345
+ const { snaps } = slidesManager.current;
346
+ const indent = snaps[slideIndex];
347
+
348
+ if (looped) {
349
+ loopedSlideChangePerform();
350
+ } else {
351
+ simpleSlideChangePerform();
352
+ }
353
+
354
+ startAnimation();
355
+
356
+ shiftXCurrentRef.current = indent;
357
+
358
+ setControlElementsState((v) => ({
359
+ ...v,
360
+ canSlideLeft: calculateCanSlideLeft(),
361
+ canSlideRight: calculateCanSlideRight(),
362
+ }));
363
+ },
364
+ [slideIndex],
365
+ );
366
+
367
+ useIsomorphicLayoutEffect(
368
+ function updateIsDraggable() {
369
+ setControlElementsState((v) => ({
370
+ ...v,
371
+ isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),
372
+ }));
373
+ },
374
+ [dragDisabled],
375
+ );
376
+
377
+ useMutationObserver(layerRef, initializeSlides);
378
+
379
+ useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth, looped]);
380
+
381
+ const calculateMinDeltaXToSlide = () => {
382
+ return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;
383
+ };
384
+
385
+ const slideLeft = (event: React.MouseEvent) => {
386
+ if (slideIndex > 0) {
387
+ shiftXCurrentRef.current += calculateMinDeltaXToSlide();
388
+ }
389
+ onChange?.(
390
+ (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,
391
+ );
392
+ onPrevClick?.(event);
393
+ };
394
+
395
+ const slideRight = (event: React.MouseEvent) => {
396
+ if (slideIndex < slidesManager.current.slides.length - 1) {
397
+ shiftXCurrentRef.current -= calculateMinDeltaXToSlide();
398
+ }
399
+ onChange?.((slideIndex + 1) % slidesManager.current.slides.length);
400
+ onNextClick?.(event);
401
+ };
402
+
403
+ const onStart = (e: CustomTouchEvent) => {
404
+ e.originalEvent.stopPropagation();
405
+ if (controlElementsState.isDraggable) {
406
+ onDragStart?.(e);
407
+ shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];
408
+ shiftXDeltaRef.current = 0;
409
+ }
410
+ };
411
+
412
+ const onMoveX = (e: CustomTouchEvent) => {
413
+ if (controlElementsState.isDraggable) {
414
+ e.originalEvent.preventDefault();
415
+
416
+ if (e.isSlideX) {
417
+ isDragging.current = true;
418
+ if (shiftXDeltaRef.current !== e.shiftX) {
419
+ shiftXDeltaRef.current = e.shiftX;
420
+ requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);
421
+ }
422
+ }
423
+ }
424
+ };
425
+
426
+ const onEnd = (e: CustomTouchEvent) => {
427
+ if (controlElementsState.isDraggable) {
428
+ isDragging.current = false;
429
+ let targetIndex = slideIndex;
430
+ if (e.isSlide) {
431
+ targetIndex = getTargetIndex(
432
+ slidesManager.current.slides,
433
+ slideIndex,
434
+ shiftXCurrentRef.current,
435
+ shiftXDeltaRef.current,
436
+ looped,
437
+ );
438
+ }
439
+ onDragEnd?.(e, targetIndex);
440
+
441
+ if (targetIndex !== slideIndex) {
442
+ shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;
443
+ onChange?.(targetIndex);
444
+ } else {
445
+ const initialShiftX = slidesManager.current.snaps[targetIndex];
446
+ requestTransform(initialShiftX, true);
447
+ }
448
+ }
449
+ };
450
+
451
+ const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {
452
+ slidesStore.current[slideIndex] = slideRef;
453
+ };
454
+
455
+ const { isDraggable, canSlideRight, canSlideLeft } = controlElementsState;
456
+
457
+ return (
458
+ <RootComponent
459
+ {...restProps}
460
+ baseClassName={classNames(
461
+ styles.host,
462
+ slideWidth === 'custom' && styles.customWidth,
463
+ isDraggable && styles.draggable,
464
+ )}
465
+ getRootRef={rootRef}
466
+ >
467
+ <CarouselViewPort
468
+ slideWidth={slideWidth}
469
+ slideTestId={slideTestId}
470
+ onStart={onStart}
471
+ onMoveX={onMoveX}
472
+ onEnd={onEnd}
473
+ getRootRef={viewportRef}
474
+ layerRef={layerRef}
475
+ setSlideRef={setSlideRef}
476
+ >
477
+ {children}
478
+ </CarouselViewPort>
479
+
480
+ {bullets && (
481
+ <Bullets
482
+ bullets={bullets}
483
+ slideIndex={slideIndex}
484
+ count={React.Children.count(children)}
485
+ bulletTestId={bulletTestId}
486
+ />
487
+ )}
488
+ <ScrollArrows
489
+ hasPointer={hasPointer}
490
+ canSlideLeft={canSlideLeft}
491
+ canSlideRight={canSlideRight}
492
+ onSlideRight={slideRight}
493
+ onSlideLeft={slideLeft}
494
+ showArrows={showArrows}
495
+ arrowSize={arrowSize}
496
+ arrowAreaHeight={arrowAreaHeight}
497
+ prevArrowTestId={prevArrowTestId}
498
+ nextArrowTestId={nextArrowTestId}
499
+ />
500
+ </RootComponent>
501
+ );
502
+ };
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { type HasChildren, type HasRootRef } from '../../types';
5
+ import { type CustomTouchEvent, Touch } from '../Touch/Touch';
6
+ import { type BaseGalleryProps } from './types';
7
+ import styles from './CarouselBase.module.css';
8
+
9
+ type GalleryViewPortProps = Pick<BaseGalleryProps, 'slideWidth' | 'slideTestId'> &
10
+ HasRootRef<HTMLElement> &
11
+ HasChildren & {
12
+ onStart: (e: CustomTouchEvent) => void;
13
+ onMoveX: (e: CustomTouchEvent) => void;
14
+ onEnd: (e: CustomTouchEvent) => void;
15
+ setSlideRef: (slideRef: HTMLDivElement | null, slideIndex: number) => void;
16
+ layerRef?: React.Ref<HTMLDivElement>;
17
+ };
18
+
19
+ export const CarouselViewPort: React.FC<GalleryViewPortProps> = ({
20
+ slideTestId,
21
+ slideWidth,
22
+ onStart,
23
+ onMoveX,
24
+ onEnd,
25
+ getRootRef,
26
+ layerRef,
27
+ children,
28
+ setSlideRef,
29
+ }) => {
30
+ return (
31
+ <Touch
32
+ className={styles.viewport}
33
+ onStartX={onStart}
34
+ onMoveX={onMoveX}
35
+ onEnd={onEnd}
36
+ style={{ width: slideWidth === 'custom' ? '100%' : slideWidth }}
37
+ noSlideClick
38
+ getRootRef={getRootRef}
39
+ >
40
+ <div className={styles.layer} ref={layerRef}>
41
+ {React.Children.map(children, (item: React.ReactNode, i: number) => (
42
+ <div
43
+ className={styles.slide}
44
+ key={`slide-${i}`}
45
+ data-testid={slideTestId?.(i)}
46
+ ref={(el) => setSlideRef(el, i)}
47
+ >
48
+ {item}
49
+ </div>
50
+ ))}
51
+ </div>
52
+ </Touch>
53
+ );
54
+ };
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { classNames } from '@vkontakte/vkjs';
5
+ import { ScrollArrow } from '../ScrollArrow/ScrollArrow';
6
+ import { type BaseGalleryProps } from './types';
7
+ import styles from './CarouselBase.module.css';
8
+
9
+ const stylesArrowAreaHeight = {
10
+ stretch: styles.arrowAreaStretch,
11
+ fit: styles.arrowAreaFit,
12
+ };
13
+
14
+ export const getArrowClassName = (
15
+ side: 'start' | 'end',
16
+ arrowAreaHeight: Exclude<BaseGalleryProps['arrowAreaHeight'], undefined>,
17
+ ) => {
18
+ return classNames(
19
+ styles.arrow,
20
+ side === 'start' ? styles.arrowStart : styles.arrowEnd,
21
+ stylesArrowAreaHeight[arrowAreaHeight],
22
+ );
23
+ };
24
+
25
+ export interface ScrollArrowsTestIds {
26
+ /**
27
+ * Передает атрибут `data-testid` для кнопки перехода к следующему слайду
28
+ */
29
+ nextArrowTestId?: string;
30
+ /**
31
+ * Передает атрибут `data-testid` для кнопки перехода к предыдущему слайду
32
+ */
33
+ prevArrowTestId?: string;
34
+ }
35
+
36
+ interface ScrollArrowsProps
37
+ extends Pick<BaseGalleryProps, 'showArrows' | 'arrowSize' | 'arrowAreaHeight'>,
38
+ ScrollArrowsTestIds {
39
+ hasPointer?: boolean;
40
+ canSlideLeft: boolean;
41
+ canSlideRight: boolean;
42
+ onSlideLeft: (e: React.MouseEvent) => void;
43
+ onSlideRight: (e: React.MouseEvent) => void;
44
+ }
45
+
46
+ export const ScrollArrows: React.FC<ScrollArrowsProps> = ({
47
+ hasPointer,
48
+ canSlideLeft,
49
+ canSlideRight,
50
+ onSlideRight,
51
+ onSlideLeft,
52
+ showArrows = false,
53
+ arrowSize = 'm',
54
+ arrowAreaHeight = 'stretch',
55
+ nextArrowTestId,
56
+ prevArrowTestId,
57
+ }) => {
58
+ return showArrows && hasPointer ? (
59
+ <>
60
+ {canSlideLeft && (
61
+ <ScrollArrow
62
+ className={getArrowClassName('start', arrowAreaHeight)}
63
+ direction="left"
64
+ onClick={onSlideLeft}
65
+ size={arrowSize}
66
+ data-testid={prevArrowTestId}
67
+ />
68
+ )}
69
+ {canSlideRight && (
70
+ <ScrollArrow
71
+ className={getArrowClassName('end', arrowAreaHeight)}
72
+ direction="right"
73
+ onClick={onSlideRight}
74
+ size={arrowSize}
75
+ data-testid={nextArrowTestId}
76
+ />
77
+ )}
78
+ </>
79
+ ) : null;
80
+ };
@@ -17,4 +17,8 @@ export const SLIDES_MANAGER_STATE: SlidesManagerState = {
17
17
  loopPoints: [],
18
18
  contentSize: 0,
19
19
  snaps: [],
20
+ containerWidth: 0,
21
+ layerWidth: 0,
22
+ min: 0,
23
+ max: 0,
20
24
  };