@vkontakte/vkui 7.0.0 → 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 (683) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts +2 -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/ActionSheet/types.d.ts +1 -1
  5. package/dist/components/ActionSheet/types.d.ts.map +1 -1
  6. package/dist/components/ActionSheet/types.js.map +1 -1
  7. package/dist/components/Alert/Alert.d.ts +1 -1
  8. package/dist/components/Alert/Alert.js.map +1 -1
  9. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  10. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  11. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  12. package/dist/components/AppRoot/AppRootContext.d.ts +2 -2
  13. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  14. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  15. package/dist/components/AppRoot/AppRootPortal.d.ts +1 -1
  16. package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
  17. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  18. package/dist/components/AppRoot/ScrollContext.d.ts +1 -1
  19. package/dist/components/AppRoot/ScrollContext.d.ts.map +1 -1
  20. package/dist/components/AppRoot/ScrollContext.js.map +1 -1
  21. package/dist/components/AspectRatio/AspectRatio.d.ts +7 -3
  22. package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -1
  23. package/dist/components/AspectRatio/AspectRatio.js +1 -1
  24. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  25. package/dist/components/Calendar/Calendar.d.ts +3 -4
  26. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/components/Calendar/Calendar.js +81 -64
  28. package/dist/components/Calendar/Calendar.js.map +1 -1
  29. package/dist/components/CalendarDay/CalendarDay.d.ts +3 -0
  30. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  31. package/dist/components/CalendarDay/CalendarDay.js +3 -1
  32. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  33. package/dist/components/CalendarDays/CalendarDays.d.ts +3 -0
  34. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  35. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  36. package/dist/components/CalendarHeader/CalendarHeader.d.ts +12 -0
  37. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  38. package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
  39. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  40. package/dist/components/CalendarRange/CalendarRange.d.ts +7 -1
  41. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  42. package/dist/components/CalendarRange/CalendarRange.js +108 -93
  43. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  44. package/dist/components/CalendarTime/CalendarTime.d.ts +20 -4
  45. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  46. package/dist/components/CalendarTime/CalendarTime.js +68 -9
  47. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  48. package/dist/components/CardScroll/CardScroll.d.ts +2 -3
  49. package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
  50. package/dist/components/CardScroll/CardScroll.js +6 -2
  51. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  52. package/dist/components/CarouselBase/Bullets.d.ts +16 -0
  53. package/dist/components/CarouselBase/Bullets.d.ts.map +1 -0
  54. package/dist/components/CarouselBase/Bullets.js +21 -0
  55. package/dist/components/CarouselBase/Bullets.js.map +1 -0
  56. package/dist/components/CarouselBase/CarouselBase.d.ts +4 -0
  57. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -0
  58. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +175 -98
  59. package/dist/components/CarouselBase/CarouselBase.js.map +1 -0
  60. package/dist/components/CarouselBase/CarouselViewPort.d.ts +14 -0
  61. package/dist/components/CarouselBase/CarouselViewPort.d.ts.map +1 -0
  62. package/dist/components/CarouselBase/CarouselViewPort.js +29 -0
  63. package/dist/components/CarouselBase/CarouselViewPort.js.map +1 -0
  64. package/dist/components/CarouselBase/ScrollArrows.d.ts +23 -0
  65. package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -0
  66. package/dist/components/CarouselBase/ScrollArrows.js +34 -0
  67. package/dist/components/CarouselBase/ScrollArrows.js.map +1 -0
  68. package/dist/components/CarouselBase/constants.d.ts.map +1 -0
  69. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  70. package/dist/components/CarouselBase/constants.js.map +1 -0
  71. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.d.ts +13 -4
  72. package/dist/components/CarouselBase/helpers.d.ts.map +1 -0
  73. package/dist/{cssm/components/BaseGallery → components}/CarouselBase/helpers.js +41 -5
  74. package/dist/components/CarouselBase/helpers.js.map +1 -0
  75. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.d.ts +1 -1
  76. package/dist/components/CarouselBase/hooks.d.ts.map +1 -0
  77. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  78. package/dist/components/CarouselBase/hooks.js.map +1 -0
  79. package/dist/components/CarouselBase/types.d.ts +125 -0
  80. package/dist/components/CarouselBase/types.d.ts.map +1 -0
  81. package/dist/components/CarouselBase/types.js.map +1 -0
  82. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  83. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  84. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  85. package/dist/components/ChipsInput/useChipsInput.d.ts +1 -1
  86. package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
  87. package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
  88. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  89. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  90. package/dist/components/ChipsSelect/useChipsSelect.d.ts +1 -1
  91. package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
  92. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  93. package/dist/components/Clickable/useState.js.map +1 -1
  94. package/dist/components/Clickable/useStateWithDelay.js +1 -1
  95. package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
  96. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  97. package/dist/components/ConfigProvider/ConfigProvider.js +8 -23
  98. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  99. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  100. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts.map +1 -1
  101. package/dist/components/ConfigProvider/ConfigProviderContext.js +22 -0
  102. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  103. package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
  104. package/dist/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  105. package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  106. package/dist/components/CustomScrollView/CustomScrollView.d.ts +5 -1
  107. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  108. package/dist/components/CustomScrollView/CustomScrollView.js +9 -4
  109. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  110. package/dist/components/CustomSelect/CustomSelect.d.ts +6 -2
  111. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  112. package/dist/components/CustomSelect/CustomSelect.js +8 -4
  113. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  114. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  115. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  116. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  117. package/dist/components/DateInput/DateInput.d.ts +24 -2
  118. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  119. package/dist/components/DateInput/DateInput.js +41 -6
  120. package/dist/components/DateInput/DateInput.js.map +1 -1
  121. package/dist/components/DateRangeInput/DateRangeInput.d.ts +19 -1
  122. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  123. package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
  124. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  125. package/dist/components/Epic/Epic.d.ts.map +1 -1
  126. package/dist/components/Epic/Epic.js.map +1 -1
  127. package/dist/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  128. package/dist/components/FixedLayout/FixedLayout.js +1 -2
  129. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  130. package/dist/components/Gallery/Gallery.d.ts +2 -3
  131. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  132. package/dist/components/Gallery/Gallery.js +3 -6
  133. package/dist/components/Gallery/Gallery.js.map +1 -1
  134. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +9 -1
  135. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  136. package/dist/components/HorizontalScroll/HorizontalScroll.js +6 -4
  137. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  138. package/dist/components/Image/Image.d.ts +1 -0
  139. package/dist/components/Image/Image.d.ts.map +1 -1
  140. package/dist/components/Image/Image.js +2 -0
  141. package/dist/components/Image/Image.js.map +1 -1
  142. package/dist/components/ImageBase/ImageBase.d.ts +8 -1
  143. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  144. package/dist/components/ImageBase/ImageBase.js +39 -11
  145. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  146. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts +29 -0
  147. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts.map +1 -0
  148. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +96 -0
  149. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  150. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts +4 -0
  151. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts.map +1 -0
  152. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  153. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  154. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +1 -1
  155. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -1
  156. package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  157. package/dist/components/ImageBase/context.d.ts.map +1 -1
  158. package/dist/components/ImageBase/context.js +3 -1
  159. package/dist/components/ImageBase/context.js.map +1 -1
  160. package/dist/components/ImageBase/types.d.ts +2 -0
  161. package/dist/components/ImageBase/types.d.ts.map +1 -1
  162. package/dist/components/ImageBase/types.js.map +1 -1
  163. package/dist/components/ImageBase/validators.d.ts +2 -1
  164. package/dist/components/ImageBase/validators.d.ts.map +1 -1
  165. package/dist/components/ImageBase/validators.js.map +1 -1
  166. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  167. package/dist/components/ModalCard/ModalCard.js +3 -2
  168. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  169. package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  170. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  171. package/dist/components/ModalRoot/ModalRootContext.d.ts +1 -1
  172. package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
  173. package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
  174. package/dist/components/NativeSelect/NativeSelect.d.ts +4 -2
  175. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  176. package/dist/components/NativeSelect/NativeSelect.js +4 -3
  177. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  178. package/dist/components/Pagination/Pagination.d.ts +14 -1
  179. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  180. package/dist/components/Pagination/Pagination.js +13 -4
  181. package/dist/components/Pagination/Pagination.js.map +1 -1
  182. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts +2 -0
  183. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts.map +1 -1
  184. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  185. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  186. package/dist/components/Popover/Popover.d.ts +2 -2
  187. package/dist/components/Popover/Popover.d.ts.map +1 -1
  188. package/dist/components/Popover/Popover.js +6 -126
  189. package/dist/components/Popover/Popover.js.map +1 -1
  190. package/dist/components/Popover/usePopover.d.ts +14 -0
  191. package/dist/components/Popover/usePopover.d.ts.map +1 -0
  192. package/dist/components/Popover/usePopover.js +138 -0
  193. package/dist/components/Popover/usePopover.js.map +1 -0
  194. package/dist/components/Popper/Popper.d.ts +2 -2
  195. package/dist/components/Popper/Popper.d.ts.map +1 -1
  196. package/dist/components/Popper/Popper.js +9 -2
  197. package/dist/components/Popper/Popper.js.map +1 -1
  198. package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
  199. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  200. package/dist/components/Removable/Removable.d.ts +2 -2
  201. package/dist/components/Removable/Removable.js.map +1 -1
  202. package/dist/components/RichCell/RichCell.d.ts +11 -1
  203. package/dist/components/RichCell/RichCell.d.ts.map +1 -1
  204. package/dist/components/RichCell/RichCell.js +15 -8
  205. package/dist/components/RichCell/RichCell.js.map +1 -1
  206. package/dist/components/Root/Root.d.ts.map +1 -1
  207. package/dist/components/Root/Root.js +3 -1
  208. package/dist/components/Root/Root.js.map +1 -1
  209. package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -2
  210. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  211. package/dist/components/SegmentedControl/SegmentedControl.js +30 -10
  212. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  213. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts +5 -3
  214. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts.map +1 -1
  215. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +6 -17
  216. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  217. package/dist/components/Select/Select.d.ts.map +1 -1
  218. package/dist/components/Select/Select.js +3 -2
  219. package/dist/components/Select/Select.js.map +1 -1
  220. package/dist/components/Skeleton/Skeleton.js +2 -2
  221. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  222. package/dist/components/Slider/Slider.d.ts +9 -1
  223. package/dist/components/Slider/Slider.d.ts.map +1 -1
  224. package/dist/components/Slider/Slider.js +5 -1
  225. package/dist/components/Slider/Slider.js.map +1 -1
  226. package/dist/components/Snackbar/Snackbar.js +1 -1
  227. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  228. package/dist/components/SplitCol/SplitColContext.d.ts +1 -1
  229. package/dist/components/SplitCol/SplitColContext.d.ts.map +1 -1
  230. package/dist/components/SplitCol/SplitColContext.js.map +1 -1
  231. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  232. package/dist/components/Tabs/Tabs.js +2 -82
  233. package/dist/components/Tabs/Tabs.js.map +1 -1
  234. package/dist/components/Textarea/Textarea.js +2 -2
  235. package/dist/components/Textarea/Textarea.js.map +1 -1
  236. package/dist/components/Textarea/useResizeTextarea.d.ts +1 -1
  237. package/dist/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  238. package/dist/components/Textarea/useResizeTextarea.js +1 -1
  239. package/dist/components/Textarea/useResizeTextarea.js.map +1 -1
  240. package/dist/components/Tooltip/Tooltip.d.ts +3 -3
  241. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  242. package/dist/components/Tooltip/Tooltip.js +4 -2
  243. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  244. package/dist/components/TooltipBase/TooltipBase.d.ts.map +1 -1
  245. package/dist/components/TooltipBase/TooltipBase.js +2 -0
  246. package/dist/components/TooltipBase/TooltipBase.js.map +1 -1
  247. package/dist/components/UsersStack/UsersStack.d.ts +1 -1
  248. package/dist/components/UsersStack/UsersStack.d.ts.map +1 -1
  249. package/dist/components/UsersStack/UsersStack.js +16 -5
  250. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  251. package/dist/components/View/View.d.ts.map +1 -1
  252. package/dist/components/View/View.js +3 -1
  253. package/dist/components/View/View.js.map +1 -1
  254. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  255. package/dist/components/View/ViewInfinite.js +3 -1
  256. package/dist/components/View/ViewInfinite.js.map +1 -1
  257. package/dist/components.css +1 -1
  258. package/dist/components.css.map +1 -1
  259. package/dist/context/CalendarDirectionContext.d.ts +7 -0
  260. package/dist/context/CalendarDirectionContext.d.ts.map +1 -0
  261. package/dist/context/CalendarDirectionContext.js +7 -0
  262. package/dist/context/CalendarDirectionContext.js.map +1 -0
  263. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  264. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  265. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  266. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  267. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  268. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  269. package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
  270. package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
  271. package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
  272. package/dist/cssm/components/Calendar/Calendar.js +79 -64
  273. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  274. package/dist/cssm/components/CalendarDay/CalendarDay.js +3 -1
  275. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  276. package/dist/cssm/components/CalendarDay/CalendarDay.module.css +4 -0
  277. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  278. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
  279. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  280. package/dist/cssm/components/CalendarRange/CalendarRange.js +108 -94
  281. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  282. package/dist/cssm/components/CalendarTime/CalendarTime.js +67 -9
  283. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  284. package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
  285. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  286. package/dist/cssm/components/CarouselBase/Bullets.js +22 -0
  287. package/dist/cssm/components/CarouselBase/Bullets.js.map +1 -0
  288. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +164 -97
  289. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -0
  290. package/dist/cssm/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +21 -1
  291. package/dist/cssm/components/CarouselBase/CarouselViewPort.js +30 -0
  292. package/dist/cssm/components/CarouselBase/CarouselViewPort.js.map +1 -0
  293. package/dist/cssm/components/CarouselBase/ScrollArrows.js +35 -0
  294. package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -0
  295. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  296. package/dist/cssm/components/CarouselBase/constants.js.map +1 -0
  297. package/dist/{components/BaseGallery → cssm/components}/CarouselBase/helpers.js +39 -5
  298. package/dist/cssm/components/CarouselBase/helpers.js.map +1 -0
  299. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  300. package/dist/cssm/components/CarouselBase/hooks.js.map +1 -0
  301. package/dist/cssm/components/CarouselBase/types.js.map +1 -0
  302. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  303. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
  304. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  305. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  306. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  307. package/dist/cssm/components/Clickable/useStateWithDelay.js +1 -1
  308. package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
  309. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -23
  310. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  311. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +22 -0
  312. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  313. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  314. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  315. package/dist/cssm/components/ContentCard/ContentCard.module.css +1 -0
  316. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +8 -4
  317. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  318. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +6 -2
  319. package/dist/cssm/components/CustomSelect/CustomSelect.js +6 -3
  320. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  321. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  322. package/dist/cssm/components/DateInput/DateInput.js +37 -5
  323. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  324. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
  325. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  326. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  327. package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -2
  328. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  329. package/dist/cssm/components/FormField/FormField.module.css +11 -11
  330. package/dist/cssm/components/Gallery/Gallery.js +3 -5
  331. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  332. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +3 -3
  333. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  334. package/dist/cssm/components/Image/Image.js +2 -0
  335. package/dist/cssm/components/Image/Image.js.map +1 -1
  336. package/dist/cssm/components/ImageBase/ImageBase.js +35 -9
  337. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  338. package/dist/cssm/components/ImageBase/ImageBase.module.css +11 -2
  339. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +91 -0
  340. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  341. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  342. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  343. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  344. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  345. package/dist/cssm/components/ImageBase/context.js +3 -1
  346. package/dist/cssm/components/ImageBase/context.js.map +1 -1
  347. package/dist/cssm/components/ImageBase/types.js.map +1 -1
  348. package/dist/cssm/components/ImageBase/validators.js.map +1 -1
  349. package/dist/cssm/components/ModalCard/ModalCard.js +1 -1
  350. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  351. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  352. package/dist/cssm/components/ModalPage/ModalPage.module.css +5 -4
  353. package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
  354. package/dist/cssm/components/NativeSelect/NativeSelect.js +4 -3
  355. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  356. package/dist/cssm/components/Pagination/Pagination.js +10 -4
  357. package/dist/cssm/components/Pagination/Pagination.js.map +1 -1
  358. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  359. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  360. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +5 -4
  361. package/dist/cssm/components/Popover/Popover.js +5 -93
  362. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  363. package/dist/cssm/components/Popover/usePopover.js +102 -0
  364. package/dist/cssm/components/Popover/usePopover.js.map +1 -0
  365. package/dist/cssm/components/Popper/Popper.js +6 -1
  366. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  367. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -1
  368. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  369. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  370. package/dist/cssm/components/RichCell/RichCell.js +13 -8
  371. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  372. package/dist/cssm/components/RichCell/RichCell.module.css +17 -3
  373. package/dist/cssm/components/Root/Root.js +3 -1
  374. package/dist/cssm/components/Root/Root.js.map +1 -1
  375. package/dist/cssm/components/SegmentedControl/SegmentedControl.js +27 -7
  376. package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
  377. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +5 -5
  378. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  379. package/dist/cssm/components/Select/Select.js +1 -1
  380. package/dist/cssm/components/Select/Select.js.map +1 -1
  381. package/dist/cssm/components/Skeleton/Skeleton.js +2 -2
  382. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  383. package/dist/cssm/components/Slider/Slider.js +3 -1
  384. package/dist/cssm/components/Slider/Slider.js.map +1 -1
  385. package/dist/cssm/components/Snackbar/Snackbar.js +1 -1
  386. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  387. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  388. package/dist/cssm/components/SplitCol/SplitColContext.js.map +1 -1
  389. package/dist/cssm/components/Tabs/Tabs.js +2 -82
  390. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  391. package/dist/cssm/components/Textarea/Textarea.js +2 -2
  392. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  393. package/dist/cssm/components/Textarea/useResizeTextarea.js +1 -1
  394. package/dist/cssm/components/Textarea/useResizeTextarea.js.map +1 -1
  395. package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
  396. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  397. package/dist/cssm/components/TooltipBase/TooltipBase.js +2 -0
  398. package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -1
  399. package/dist/cssm/components/TooltipBase/TooltipBase.module.css +5 -0
  400. package/dist/cssm/components/UsersStack/UsersStack.js +15 -4
  401. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  402. package/dist/cssm/components/UsersStack/UsersStack.module.css +27 -17
  403. package/dist/cssm/components/View/View.js +3 -1
  404. package/dist/cssm/components/View/View.js.map +1 -1
  405. package/dist/cssm/components/View/ViewInfinite.js +3 -1
  406. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  407. package/dist/cssm/context/CalendarDirectionContext.js +7 -0
  408. package/dist/cssm/context/CalendarDirectionContext.js.map +1 -0
  409. package/dist/cssm/helpers/getMergedSameEventsByProps.js.map +1 -1
  410. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  411. package/dist/cssm/hooks/useDirection.js.map +1 -1
  412. package/dist/cssm/hooks/useDraggableWithDomApi/types.js.map +1 -1
  413. package/dist/cssm/hooks/useEnsuredControl.js +1 -1
  414. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  415. package/dist/cssm/hooks/useExternRef.js.map +1 -1
  416. package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
  417. package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
  418. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  419. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  420. package/dist/cssm/hooks/useNativeFormResetListener.js.map +1 -1
  421. package/dist/cssm/hooks/usePatchChildren.js.map +1 -1
  422. package/dist/cssm/hooks/usePrevious.js +1 -1
  423. package/dist/cssm/hooks/usePrevious.js.map +1 -1
  424. package/dist/cssm/hooks/useResizeObserver.js +20 -4
  425. package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
  426. package/dist/cssm/hooks/useStateWithPrev.js.map +1 -1
  427. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  428. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
  429. package/dist/cssm/hooks/useTabsNavigation.js +90 -0
  430. package/dist/cssm/hooks/useTabsNavigation.js.map +1 -0
  431. package/dist/cssm/index.js +4 -0
  432. package/dist/cssm/index.js.map +1 -1
  433. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  434. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  435. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  436. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  437. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  438. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  439. package/dist/cssm/lib/utils.js.map +1 -1
  440. package/dist/cssm/styles/constants.css +1 -0
  441. package/dist/helpers/getMergedSameEventsByProps.d.ts +1 -1
  442. package/dist/helpers/getMergedSameEventsByProps.d.ts.map +1 -1
  443. package/dist/helpers/getMergedSameEventsByProps.js.map +1 -1
  444. package/dist/hooks/useDateInput.d.ts +3 -3
  445. package/dist/hooks/useDateInput.d.ts.map +1 -1
  446. package/dist/hooks/useDateInput.js.map +1 -1
  447. package/dist/hooks/useDirection.d.ts +2 -2
  448. package/dist/hooks/useDirection.d.ts.map +1 -1
  449. package/dist/hooks/useDirection.js.map +1 -1
  450. package/dist/hooks/useDraggableWithDomApi/types.d.ts +1 -1
  451. package/dist/hooks/useDraggableWithDomApi/types.d.ts.map +1 -1
  452. package/dist/hooks/useDraggableWithDomApi/types.js.map +1 -1
  453. package/dist/hooks/useEnsuredControl.js +1 -1
  454. package/dist/hooks/useEnsuredControl.js.map +1 -1
  455. package/dist/hooks/useExternRef.d.ts +1 -1
  456. package/dist/hooks/useExternRef.d.ts.map +1 -1
  457. package/dist/hooks/useExternRef.js.map +1 -1
  458. package/dist/hooks/useFocusTrap.d.ts +1 -1
  459. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  460. package/dist/hooks/useFocusTrap.js.map +1 -1
  461. package/dist/hooks/useGlobalOnClickOutside.d.ts +1 -1
  462. package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
  463. package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
  464. package/dist/hooks/useKeyboardInputTracker.d.ts +1 -1
  465. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  466. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  467. package/dist/hooks/useMutationObserver.d.ts +1 -1
  468. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  469. package/dist/hooks/useMutationObserver.js.map +1 -1
  470. package/dist/hooks/useNativeFormResetListener.d.ts +1 -1
  471. package/dist/hooks/useNativeFormResetListener.d.ts.map +1 -1
  472. package/dist/hooks/useNativeFormResetListener.js.map +1 -1
  473. package/dist/hooks/usePatchChildren.d.ts +2 -2
  474. package/dist/hooks/usePatchChildren.d.ts.map +1 -1
  475. package/dist/hooks/usePatchChildren.js.map +1 -1
  476. package/dist/hooks/usePrevious.js +1 -1
  477. package/dist/hooks/usePrevious.js.map +1 -1
  478. package/dist/hooks/useResizeObserver.d.ts +1 -1
  479. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  480. package/dist/hooks/useResizeObserver.js +20 -4
  481. package/dist/hooks/useResizeObserver.js.map +1 -1
  482. package/dist/hooks/useStateWithPrev.d.ts.map +1 -1
  483. package/dist/hooks/useStateWithPrev.js.map +1 -1
  484. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +1 -1
  485. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  486. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  487. package/dist/hooks/useSyncHTMLWithTokens.d.ts +1 -1
  488. package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -1
  489. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
  490. package/dist/hooks/useTabsNavigation.d.ts +5 -0
  491. package/dist/hooks/useTabsNavigation.d.ts.map +1 -0
  492. package/dist/hooks/useTabsNavigation.js +90 -0
  493. package/dist/hooks/useTabsNavigation.js.map +1 -0
  494. package/dist/index.d.ts +5 -1
  495. package/dist/index.d.ts.map +1 -1
  496. package/dist/index.js +4 -0
  497. package/dist/index.js.map +1 -1
  498. package/dist/lib/animation/useCSSTransition.d.ts +1 -1
  499. package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
  500. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  501. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
  502. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  503. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  504. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  505. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +10 -1
  506. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  507. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  508. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  509. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  510. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  511. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  512. package/dist/lib/utils.d.ts +1 -1
  513. package/dist/lib/utils.d.ts.map +1 -1
  514. package/dist/lib/utils.js.map +1 -1
  515. package/dist/vkui.css +1 -1
  516. package/dist/vkui.css.map +1 -1
  517. package/package.json +6 -6
  518. package/src/components/ActionSheet/ActionSheet.tsx +3 -4
  519. package/src/components/ActionSheet/types.ts +1 -1
  520. package/src/components/Alert/Alert.tsx +1 -1
  521. package/src/components/AppRoot/AppRoot.tsx +1 -1
  522. package/src/components/AppRoot/AppRootContext.ts +2 -2
  523. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  524. package/src/components/AppRoot/ScrollContext.tsx +1 -1
  525. package/src/components/AspectRatio/AspectRatio.tsx +11 -4
  526. package/src/components/Calendar/Calendar.tsx +90 -72
  527. package/src/components/CalendarDay/CalendarDay.module.css +4 -0
  528. package/src/components/CalendarDay/CalendarDay.tsx +10 -1
  529. package/src/components/CalendarDays/CalendarDays.tsx +3 -0
  530. package/src/components/CalendarHeader/CalendarHeader.tsx +17 -2
  531. package/src/components/CalendarRange/CalendarRange.tsx +110 -84
  532. package/src/components/CalendarTime/CalendarTime.tsx +104 -16
  533. package/src/components/CardScroll/CardScroll.tsx +8 -2
  534. package/src/components/CarouselBase/Bullets.tsx +36 -0
  535. package/src/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +19 -1
  536. package/src/components/CarouselBase/CarouselBase.tsx +502 -0
  537. package/src/components/CarouselBase/CarouselViewPort.tsx +54 -0
  538. package/src/components/CarouselBase/ScrollArrows.tsx +80 -0
  539. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/constants.ts +4 -0
  540. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.ts +67 -7
  541. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.ts +2 -2
  542. package/src/components/CarouselBase/types.ts +135 -0
  543. package/src/components/ChipsInput/ChipsInput.tsx +1 -1
  544. package/src/components/ChipsInput/useChipsInput.ts +2 -2
  545. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  546. package/src/components/ChipsSelect/useChipsSelect.ts +1 -1
  547. package/src/components/Clickable/useState.tsx +2 -2
  548. package/src/components/Clickable/useStateWithDelay.tsx +1 -1
  549. package/src/components/ConfigProvider/ConfigProvider.tsx +8 -35
  550. package/src/components/ConfigProvider/ConfigProviderContext.tsx +36 -0
  551. package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -5
  552. package/src/components/ContentCard/ContentCard.module.css +1 -0
  553. package/src/components/CustomScrollView/CustomScrollView.module.css +6 -2
  554. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  555. package/src/components/CustomSelect/CustomSelect.tsx +12 -4
  556. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -1
  557. package/src/components/DateInput/DateInput.tsx +62 -5
  558. package/src/components/DateRangeInput/DateRangeInput.tsx +22 -2
  559. package/src/components/Epic/Epic.tsx +5 -3
  560. package/src/components/FixedLayout/FixedLayout.tsx +1 -2
  561. package/src/components/FormField/FormField.module.css +11 -11
  562. package/src/components/Gallery/Gallery.tsx +4 -10
  563. package/src/components/HorizontalScroll/HorizontalScroll.tsx +12 -2
  564. package/src/components/Image/Image.tsx +4 -0
  565. package/src/components/ImageBase/ImageBase.module.css +11 -2
  566. package/src/components/ImageBase/ImageBase.tsx +69 -10
  567. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  568. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +168 -0
  569. package/src/components/ImageBase/ImageBaseFloatElement/helpers.ts +44 -0
  570. package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +1 -1
  571. package/src/components/ImageBase/context.ts +2 -0
  572. package/src/components/ImageBase/types.ts +2 -0
  573. package/src/components/ImageBase/validators.ts +5 -4
  574. package/src/components/ModalCard/ModalCard.tsx +5 -1
  575. package/src/components/ModalCardBase/ModalCardBase.tsx +1 -1
  576. package/src/components/ModalPage/ModalPage.module.css +5 -4
  577. package/src/components/ModalRoot/ModalRootContext.tsx +3 -1
  578. package/src/components/NativeSelect/NativeSelect.tsx +4 -3
  579. package/src/components/Pagination/Pagination.tsx +23 -4
  580. package/src/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.tsx +4 -2
  581. package/src/components/PanelHeader/PanelHeader.module.css +5 -4
  582. package/src/components/Popover/Popover.tsx +6 -166
  583. package/src/components/Popover/usePopover.tsx +183 -0
  584. package/src/components/Popper/Popper.tsx +12 -1
  585. package/src/components/PullToRefresh/PullToRefresh.tsx +1 -1
  586. package/src/components/Removable/Removable.tsx +2 -2
  587. package/src/components/RichCell/RichCell.module.css +17 -3
  588. package/src/components/RichCell/RichCell.tsx +28 -8
  589. package/src/components/Root/Root.tsx +4 -2
  590. package/src/components/SegmentedControl/SegmentedControl.tsx +46 -14
  591. package/src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx +14 -10
  592. package/src/components/Select/Select.tsx +1 -0
  593. package/src/components/Skeleton/Skeleton.tsx +3 -3
  594. package/src/components/Slider/Slider.tsx +12 -0
  595. package/src/components/Snackbar/Snackbar.tsx +1 -1
  596. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  597. package/src/components/SplitCol/SplitColContext.tsx +1 -1
  598. package/src/components/Tabs/Tabs.tsx +2 -99
  599. package/src/components/Textarea/Textarea.tsx +2 -2
  600. package/src/components/Textarea/useResizeTextarea.ts +3 -3
  601. package/src/components/Tooltip/Tooltip.tsx +4 -1
  602. package/src/components/TooltipBase/TooltipBase.module.css +5 -0
  603. package/src/components/TooltipBase/TooltipBase.tsx +8 -2
  604. package/src/components/UsersStack/UsersStack.module.css +27 -17
  605. package/src/components/UsersStack/UsersStack.tsx +24 -3
  606. package/src/components/View/View.tsx +9 -5
  607. package/src/components/View/ViewInfinite.tsx +5 -3
  608. package/src/context/CalendarDirectionContext.ts +12 -0
  609. package/src/helpers/getMergedSameEventsByProps.ts +1 -1
  610. package/src/hooks/useDateInput.ts +5 -5
  611. package/src/hooks/useDirection.ts +3 -3
  612. package/src/hooks/useDraggableWithDomApi/types.ts +1 -1
  613. package/src/hooks/useEnsuredControl.ts +1 -1
  614. package/src/hooks/useExternRef.ts +2 -2
  615. package/src/hooks/useFocusTrap.ts +1 -1
  616. package/src/hooks/useGlobalOnClickOutside.ts +1 -1
  617. package/src/hooks/useKeyboardInputTracker.ts +1 -1
  618. package/src/hooks/useMutationObserver.ts +1 -1
  619. package/src/hooks/useNativeFormResetListener.ts +1 -1
  620. package/src/hooks/usePatchChildren.ts +2 -9
  621. package/src/hooks/usePrevious.ts +1 -1
  622. package/src/hooks/useResizeObserver.ts +30 -6
  623. package/src/hooks/useStateWithPrev.ts +1 -5
  624. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
  625. package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
  626. package/src/hooks/useTabsNavigation.ts +104 -0
  627. package/src/index.ts +7 -0
  628. package/src/lib/animation/useCSSTransition.ts +1 -1
  629. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +9 -9
  630. package/src/lib/floating/useFloatingWithInteractions/types.ts +15 -5
  631. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +7 -2
  632. package/src/lib/utils.ts +2 -2
  633. package/src/styles/constants.css +1 -0
  634. package/dist/components/BaseGallery/BaseGallery.d.ts +0 -4
  635. package/dist/components/BaseGallery/BaseGallery.d.ts.map +0 -1
  636. package/dist/components/BaseGallery/BaseGallery.js +0 -321
  637. package/dist/components/BaseGallery/BaseGallery.js.map +0 -1
  638. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts +0 -4
  639. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +0 -1
  640. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  641. package/dist/components/BaseGallery/CarouselBase/constants.d.ts.map +0 -1
  642. package/dist/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  643. package/dist/components/BaseGallery/CarouselBase/helpers.d.ts.map +0 -1
  644. package/dist/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  645. package/dist/components/BaseGallery/CarouselBase/hooks.d.ts.map +0 -1
  646. package/dist/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  647. package/dist/components/BaseGallery/CarouselBase/types.d.ts +0 -54
  648. package/dist/components/BaseGallery/CarouselBase/types.d.ts.map +0 -1
  649. package/dist/components/BaseGallery/CarouselBase/types.js.map +0 -1
  650. package/dist/components/BaseGallery/helpers.d.ts +0 -13
  651. package/dist/components/BaseGallery/helpers.d.ts.map +0 -1
  652. package/dist/components/BaseGallery/helpers.js +0 -24
  653. package/dist/components/BaseGallery/helpers.js.map +0 -1
  654. package/dist/components/BaseGallery/types.d.ts +0 -55
  655. package/dist/components/BaseGallery/types.d.ts.map +0 -1
  656. package/dist/components/BaseGallery/types.js.map +0 -1
  657. package/dist/cssm/components/BaseGallery/BaseGallery.js +0 -293
  658. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +0 -1
  659. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  660. package/dist/cssm/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  661. package/dist/cssm/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  662. package/dist/cssm/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  663. package/dist/cssm/components/BaseGallery/CarouselBase/types.js +0 -3
  664. package/dist/cssm/components/BaseGallery/CarouselBase/types.js.map +0 -1
  665. package/dist/cssm/components/BaseGallery/helpers.js +0 -24
  666. package/dist/cssm/components/BaseGallery/helpers.js.map +0 -1
  667. package/dist/cssm/components/BaseGallery/types.js +0 -3
  668. package/dist/cssm/components/BaseGallery/types.js.map +0 -1
  669. package/dist/cssm/hooks/useObjectMemo.js +0 -15
  670. package/dist/cssm/hooks/useObjectMemo.js.map +0 -1
  671. package/dist/hooks/useObjectMemo.d.ts +0 -5
  672. package/dist/hooks/useObjectMemo.d.ts.map +0 -1
  673. package/dist/hooks/useObjectMemo.js +0 -15
  674. package/dist/hooks/useObjectMemo.js.map +0 -1
  675. package/src/components/BaseGallery/BaseGallery.tsx +0 -380
  676. package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +0 -399
  677. package/src/components/BaseGallery/CarouselBase/types.ts +0 -56
  678. package/src/components/BaseGallery/helpers.ts +0 -46
  679. package/src/components/BaseGallery/types.ts +0 -61
  680. package/src/hooks/useObjectMemo.ts +0 -16
  681. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.d.ts +0 -0
  682. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/types.js +0 -0
  683. /package/dist/{components/BaseGallery → cssm/components/CarouselBase}/types.js +0 -0
@@ -23,9 +23,17 @@ export interface HorizontalScrollProps extends HTMLAttributesWithRootRef<HTMLDiv
23
23
  * По умолчанию прокручивается как любой горизонтальный контент через shift.
24
24
  */
25
25
  scrollOnAnyWheel?: boolean;
26
+ /**
27
+ * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении предыдущего элемента
28
+ */
29
+ prevButtonTestId?: string;
30
+ /**
31
+ * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении следующего элемента
32
+ */
33
+ nextButtonTestId?: string;
26
34
  }
27
35
  /**
28
36
  * @see https://vkcom.github.io/VKUI/#/HorizontalScroll
29
37
  */
30
- export declare const HorizontalScroll: ({ children, getScrollToLeft, getScrollToRight, showArrows, arrowSize, arrowOffsetY, scrollAnimationDuration, getRef, scrollOnAnyWheel, ...restProps }: HorizontalScrollProps) => React.ReactNode;
38
+ export declare const HorizontalScroll: ({ children, getScrollToLeft, getScrollToRight, showArrows, arrowSize, arrowOffsetY, scrollAnimationDuration, getRef, scrollOnAnyWheel, prevButtonTestId, nextButtonTestId, ...restProps }: HorizontalScrollProps) => React.ReactNode;
31
39
  //# sourceMappingURL=HorizontalScroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HorizontalScroll.d.ts","sourceRoot":"","sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAmBhF,MAAM,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;AAExE,MAAM,WAAW,qBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAsGD;;GAEG;AACH,eAAO,MAAM,gBAAgB,0JAW1B,qBAAqB,KAAG,KAAK,CAAC,SA2IhC,CAAC"}
1
+ {"version":3,"file":"HorizontalScroll.d.ts","sourceRoot":"","sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAmBhF,MAAM,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;AAExE,MAAM,WAAW,qBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsGD;;GAEG;AACH,eAAO,MAAM,gBAAgB,8LAa1B,qBAAqB,KAAG,KAAK,CAAC,SA2IhC,CAAC"}
@@ -80,7 +80,7 @@ function doScroll({ scrollElement, getScrollPosition, animationQueue, onScrollTo
80
80
  /**
81
81
  * @see https://vkcom.github.io/VKUI/#/HorizontalScroll
82
82
  */ export const HorizontalScroll = (_param)=>{
83
- var { children, getScrollToLeft, getScrollToRight, showArrows = true, arrowSize = 'm', arrowOffsetY, scrollAnimationDuration = SCROLL_ONE_FRAME_TIME, getRef, scrollOnAnyWheel = false } = _param, restProps = _object_without_properties(_param, [
83
+ var { children, getScrollToLeft, getScrollToRight, showArrows = true, arrowSize = 'm', arrowOffsetY, scrollAnimationDuration = SCROLL_ONE_FRAME_TIME, getRef, scrollOnAnyWheel = false, prevButtonTestId, nextButtonTestId } = _param, restProps = _object_without_properties(_param, [
84
84
  "children",
85
85
  "getScrollToLeft",
86
86
  "getScrollToRight",
@@ -89,7 +89,9 @@ function doScroll({ scrollElement, getScrollPosition, animationQueue, onScrollTo
89
89
  "arrowOffsetY",
90
90
  "scrollAnimationDuration",
91
91
  "getRef",
92
- "scrollOnAnyWheel"
92
+ "scrollOnAnyWheel",
93
+ "prevButtonTestId",
94
+ "nextButtonTestId"
93
95
  ]);
94
96
  const [canScrollLeft, setCanScrollLeft] = React.useState(false);
95
97
  const [canScrollRight, setCanScrollRight] = React.useState(false);
@@ -188,7 +190,7 @@ function doScroll({ scrollElement, getScrollPosition, animationQueue, onScrollTo
188
190
  onMouseEnter: calculateArrowsVisibility,
189
191
  children: [
190
192
  showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && /*#__PURE__*/ _jsx(ScrollArrow, {
191
- "data-testid": process.env.NODE_ENV === 'test' ? 'ScrollArrowLeft' : undefined,
193
+ "data-testid": prevButtonTestId,
192
194
  size: arrowSize,
193
195
  offsetY: arrowOffsetY,
194
196
  direction: "left",
@@ -199,7 +201,7 @@ function doScroll({ scrollElement, getScrollPosition, animationQueue, onScrollTo
199
201
  onWheel: onArrowWheel
200
202
  }),
201
203
  showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && /*#__PURE__*/ _jsx(ScrollArrow, {
202
- "data-testid": process.env.NODE_ENV === 'test' ? 'ScrollArrowRight' : undefined,
204
+ "data-testid": nextButtonTestId,
203
205
  size: arrowSize,
204
206
  offsetY: arrowOffsetY,
205
207
  direction: "right",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport type { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow, type ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'm',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps): React.ReactNode => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection] = useDirection<HTMLDivElement>();\n const direction = textDirection || 'ltr';\n const setCanScrollStart = direction === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = direction === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection: direction,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, direction, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n const _onWheel = React.useCallback(\n (e: React.WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n },\n [scrollerRef],\n );\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onScrollWheel = React.useCallback(\n (e: React.WheelEvent) => {\n _onWheel(e);\n e.preventDefault();\n },\n [_onWheel],\n );\n\n const onArrowWheel = React.useCallback(\n (e: React.WheelEvent) => {\n if (e.deltaX || (e.deltaY && scrollOnAnyWheel)) {\n _onWheel(e);\n }\n },\n [_onWheel, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles.withConstArrows,\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n data-testid={process.env.NODE_ENV === 'test' ? 'ScrollArrowLeft' : undefined}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowLeft)}\n onClick={scrollToLeft}\n onWheel={onArrowWheel}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n data-testid={process.env.NODE_ENV === 'test' ? 'ScrollArrowRight' : undefined}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowRight)}\n onClick={scrollToRight}\n onWheel={onArrowWheel}\n />\n )}\n <div\n className={styles.in}\n ref={scrollerRef}\n onScroll={calculateArrowsVisibility}\n onWheel={scrollOnAnyWheel ? onScrollWheel : undefined}\n >\n <div className={styles.inWrapper}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useDirection","useExternRef","easeInOutSine","RootComponent","ScrollArrow","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","directionRef","direction","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","hasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","useEffect","_onWheel","e","scrollBy","left","deltaX","deltaY","behavior","onScrollWheel","preventDefault","onArrowWheel","baseClassName","onMouseEnter","undefined","data-testid","process","env","NODE_ENV","size","offsetY","aria-hidden","tabIndex","className","onClick","onWheel","div","ref","onScroll"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport type { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow, type ScrollArrowProps } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: ScrollArrowProps['size'];\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении предыдущего элемента\n */\n prevButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки прокрутки горизонтального скролла в направлении следующего элемента\n */\n nextButtonTestId?: string;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'm',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n prevButtonTestId,\n nextButtonTestId,\n ...restProps\n}: HorizontalScrollProps): React.ReactNode => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection] = useDirection<HTMLDivElement>();\n const direction = textDirection || 'ltr';\n const setCanScrollStart = direction === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = direction === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection: direction,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, direction, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n const _onWheel = React.useCallback(\n (e: React.WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n },\n [scrollerRef],\n );\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onScrollWheel = React.useCallback(\n (e: React.WheelEvent) => {\n _onWheel(e);\n e.preventDefault();\n },\n [_onWheel],\n );\n\n const onArrowWheel = React.useCallback(\n (e: React.WheelEvent) => {\n if (e.deltaX || (e.deltaY && scrollOnAnyWheel)) {\n _onWheel(e);\n }\n },\n [_onWheel, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles.withConstArrows,\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n data-testid={prevButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowLeft)}\n onClick={scrollToLeft}\n onWheel={onArrowWheel}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n data-testid={nextButtonTestId}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n aria-hidden\n tabIndex={-1}\n className={classNames(styles.arrow, styles.arrowRight)}\n onClick={scrollToRight}\n onWheel={onArrowWheel}\n />\n )}\n <div\n className={styles.in}\n ref={scrollerRef}\n onScroll={calculateArrowsVisibility}\n onWheel={scrollOnAnyWheel ? onScrollWheel : undefined}\n >\n <div className={styles.inWrapper}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useDirection","useExternRef","easeInOutSine","RootComponent","ScrollArrow","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","prevButtonTestId","nextButtonTestId","restProps","canScrollLeft","setCanScrollLeft","useState","canScrollRight","setCanScrollRight","directionRef","direction","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","hasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","useEffect","_onWheel","e","scrollBy","left","deltaX","deltaY","behavior","onScrollWheel","preventDefault","onArrowWheel","baseClassName","onMouseEnter","undefined","data-testid","size","offsetY","aria-hidden","tabIndex","className","onClick","onWheel","div","ref","onScroll"],"mappings":"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"}
@@ -30,5 +30,6 @@ export interface ImageProps extends Omit<ImageBaseProps, 'badge'> {
30
30
  export declare const Image: React.FC<ImageProps> & {
31
31
  Badge: typeof ImageBadge;
32
32
  Overlay: typeof ImageBase.Overlay;
33
+ FloatElement: typeof ImageBase.FloatElement;
33
34
  };
34
35
  //# sourceMappingURL=Image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EAAE,eAAe,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;AAI5E,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC/D;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC/B;;OAEG;IACH,sBAAsB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACzC;;OAEG;IACH,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvC;;OAEG;IACH,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvC;;OAEG;IACH,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACtC;AAqED;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG;IACzC,KAAK,EAAE,OAAO,UAAU,CAAC;IACzB,OAAO,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC;CA2DnC,CAAC"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,YAAY,EAAE,eAAe,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;AAI5E,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC/D;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC/B;;OAEG;IACH,sBAAsB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACzC;;OAEG;IACH,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvC;;OAEG;IACH,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvC;;OAEG;IACH,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACtC;AAqED;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG;IACzC,KAAK,EAAE,OAAO,UAAU,CAAC;IACzB,OAAO,EAAE,OAAO,SAAS,CAAC,OAAO,CAAC;IAClC,YAAY,EAAE,OAAO,SAAS,CAAC,YAAY,CAAC;CA2D7C,CAAC"}
@@ -110,5 +110,7 @@ Image.Badge = ImageBadge;
110
110
  Image.Badge.displayName = 'Image.Badge';
111
111
  Image.Overlay = ImageBase.Overlay;
112
112
  Image.Overlay.displayName = 'Image.Overlay';
113
+ Image.FloatElement = ImageBase.FloatElement;
114
+ Image.FloatElement.displayName = 'Image.FloatElement';
113
115
 
114
116
  //# sourceMappingURL=Image.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { type CSSCustomProperties } from '../../types';\nimport { ImageBase, type ImageBaseOverlayProps, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { ImageBadge, type ImageBadgeProps } from './ImageBadge/ImageBadge';\nimport styles from './Image.module.css';\n\nexport type { ImageBadgeProps, ImageBaseOverlayProps as ImageOverlayProps };\n\nconst IMAGE_DEFAULT_SIZE = 48;\n\nexport interface ImageProps extends Omit<ImageBaseProps, 'badge'> {\n /**\n * Размер закругления.\n */\n borderRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между сторонами начала блока и строки\n */\n borderStartStartRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между стороной начала блока и стороной конца строки\n */\n borderStartEndRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между стороной конца блока и стороной начала строки\n */\n borderEndStartRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между сторонами конца блока и строки\n */\n borderEndEndRadius?: 's' | 'l' | 'm';\n}\n\nconst getBorderRadiusBySize = (\n size: Exclude<ImageBaseProps['size'], undefined>,\n borderRadius: Exclude<ImageProps['borderRadius'], undefined>,\n) => {\n switch (borderRadius) {\n case 's': {\n if (size <= 32) {\n return 2;\n }\n if (size <= 56) {\n return 3;\n }\n return 4;\n }\n case 'm': {\n if (size <= 32) {\n return 3;\n }\n if (size <= 48) {\n return 4;\n }\n if (size <= 72) {\n return 6;\n }\n if (size <= 80) {\n return 8;\n }\n return 10;\n }\n case 'l': {\n if (size <= 16) {\n return 4;\n }\n if (size <= 20) {\n return 5;\n }\n if (size <= 32) {\n return 6;\n }\n if (size <= 40) {\n return 8;\n }\n if (size <= 48) {\n return 10;\n }\n if (size <= 56) {\n return 12;\n }\n if (size <= 64) {\n return 14;\n }\n return 16;\n }\n }\n};\n\nconst getBorderRadiusBySizeInPx = (\n size: Exclude<ImageBaseProps['size'], undefined>,\n borderRadius: ImageProps['borderRadius'],\n) => {\n if (!borderRadius) {\n return undefined;\n }\n\n return `${getBorderRadiusBySize(size, borderRadius)}px`;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Image\n */\nexport const Image: React.FC<ImageProps> & {\n Badge: typeof ImageBadge;\n Overlay: typeof ImageBase.Overlay;\n} = ({\n size = IMAGE_DEFAULT_SIZE,\n borderRadius = 'm',\n borderStartStartRadius,\n borderStartEndRadius,\n borderEndStartRadius,\n borderEndEndRadius,\n style,\n className,\n objectFit = 'cover',\n ...restProps\n}: ImageProps) => {\n const borderStyles: CSSCustomProperties<string | undefined> = React.useMemo(\n () => ({\n '--vkui_internal--Image_border_radius': getBorderRadiusBySizeInPx(size, borderRadius),\n '--vkui_internal--Image_border_start_start_radius': getBorderRadiusBySizeInPx(\n size,\n borderStartStartRadius,\n ),\n '--vkui_internal--Image_border_start_end_radius': getBorderRadiusBySizeInPx(\n size,\n borderStartEndRadius,\n ),\n '--vkui_internal--Image_border_end_start_radius': getBorderRadiusBySizeInPx(\n size,\n borderEndStartRadius,\n ),\n '--vkui_internal--Image_border_end_end_radius': getBorderRadiusBySizeInPx(\n size,\n borderEndEndRadius,\n ),\n }),\n [\n borderRadius,\n borderStartStartRadius,\n borderStartEndRadius,\n borderEndStartRadius,\n borderEndEndRadius,\n size,\n ],\n );\n\n return (\n <ImageBase\n {...restProps}\n objectFit={objectFit}\n size={size}\n style={mergeStyle(borderStyles, style)}\n className={classNames(\n className,\n styles.host,\n borderStartStartRadius && styles.borderStartStartRadius,\n borderStartEndRadius && styles.borderStartEndRadius,\n borderEndStartRadius && styles.borderEndStartRadius,\n borderEndEndRadius && styles.borderEndEndRadius,\n )}\n />\n );\n};\n\nImage.displayName = 'Image';\n\nImage.Badge = ImageBadge;\nImage.Badge.displayName = 'Image.Badge';\n\nImage.Overlay = ImageBase.Overlay;\nImage.Overlay.displayName = 'Image.Overlay';\n"],"names":["React","classNames","mergeStyle","ImageBase","ImageBadge","IMAGE_DEFAULT_SIZE","getBorderRadiusBySize","size","borderRadius","getBorderRadiusBySizeInPx","undefined","Image","borderStartStartRadius","borderStartEndRadius","borderEndStartRadius","borderEndEndRadius","style","className","objectFit","restProps","borderStyles","useMemo","displayName","Badge","Overlay"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAAQ,8BAA2B;AAEtD,SAASC,SAAS,QAAyD,4BAAyB;AACpG,SAASC,UAAU,QAA8B,6BAA0B;AAK3E,MAAMC,qBAAqB;AAyB3B,MAAMC,wBAAwB,CAC5BC,MACAC;IAEA,OAAQA;QACN,KAAK;YAAK;gBACR,IAAID,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;IACF;AACF;AAEA,MAAME,4BAA4B,CAChCF,MACAC;IAEA,IAAI,CAACA,cAAc;QACjB,OAAOE;IACT;IAEA,OAAO,GAAGJ,sBAAsBC,MAAMC,cAAc,EAAE,CAAC;AACzD;AAEA;;CAEC,GACD,OAAO,MAAMG,QAGT;QAAC,EACHJ,OAAOF,kBAAkB,EACzBG,eAAe,GAAG,EAClBI,sBAAsB,EACtBC,oBAAoB,EACpBC,oBAAoB,EACpBC,kBAAkB,EAClBC,KAAK,EACLC,SAAS,EACTC,YAAY,OAAO,EAER,WADRC;QATHZ;QACAC;QACAI;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,eAAwDpB,MAAMqB,OAAO,CACzE,IAAO,CAAA;YACL,wCAAwCZ,0BAA0BF,MAAMC;YACxE,oDAAoDC,0BAClDF,MACAK;YAEF,kDAAkDH,0BAChDF,MACAM;YAEF,kDAAkDJ,0BAChDF,MACAO;YAEF,gDAAgDL,0BAC9CF,MACAQ;QAEJ,CAAA,GACA;QACEP;QACAI;QACAC;QACAC;QACAC;QACAR;KACD;IAGH,qBACE,KAACJ,mDACKgB;QACJD,WAAWA;QACXX,MAAMA;QACNS,OAAOd,WAAWkB,cAAcJ;QAChCC,WAAWhB,WACTgB,8BAEAL,+DACAC,2DACAC,2DACAC;;AAIR,EAAE;AAEFJ,MAAMW,WAAW,GAAG;AAEpBX,MAAMY,KAAK,GAAGnB;AACdO,MAAMY,KAAK,CAACD,WAAW,GAAG;AAE1BX,MAAMa,OAAO,GAAGrB,UAAUqB,OAAO;AACjCb,MAAMa,OAAO,CAACF,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { type CSSCustomProperties } from '../../types';\nimport { ImageBase, type ImageBaseOverlayProps, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { ImageBadge, type ImageBadgeProps } from './ImageBadge/ImageBadge';\nimport styles from './Image.module.css';\n\nexport type { ImageBadgeProps, ImageBaseOverlayProps as ImageOverlayProps };\n\nconst IMAGE_DEFAULT_SIZE = 48;\n\nexport interface ImageProps extends Omit<ImageBaseProps, 'badge'> {\n /**\n * Размер закругления.\n */\n borderRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между сторонами начала блока и строки\n */\n borderStartStartRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между стороной начала блока и стороной конца строки\n */\n borderStartEndRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между стороной конца блока и стороной начала строки\n */\n borderEndStartRadius?: 's' | 'l' | 'm';\n /**\n * Размер закругления угла между сторонами конца блока и строки\n */\n borderEndEndRadius?: 's' | 'l' | 'm';\n}\n\nconst getBorderRadiusBySize = (\n size: Exclude<ImageBaseProps['size'], undefined>,\n borderRadius: Exclude<ImageProps['borderRadius'], undefined>,\n) => {\n switch (borderRadius) {\n case 's': {\n if (size <= 32) {\n return 2;\n }\n if (size <= 56) {\n return 3;\n }\n return 4;\n }\n case 'm': {\n if (size <= 32) {\n return 3;\n }\n if (size <= 48) {\n return 4;\n }\n if (size <= 72) {\n return 6;\n }\n if (size <= 80) {\n return 8;\n }\n return 10;\n }\n case 'l': {\n if (size <= 16) {\n return 4;\n }\n if (size <= 20) {\n return 5;\n }\n if (size <= 32) {\n return 6;\n }\n if (size <= 40) {\n return 8;\n }\n if (size <= 48) {\n return 10;\n }\n if (size <= 56) {\n return 12;\n }\n if (size <= 64) {\n return 14;\n }\n return 16;\n }\n }\n};\n\nconst getBorderRadiusBySizeInPx = (\n size: Exclude<ImageBaseProps['size'], undefined>,\n borderRadius: ImageProps['borderRadius'],\n) => {\n if (!borderRadius) {\n return undefined;\n }\n\n return `${getBorderRadiusBySize(size, borderRadius)}px`;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Image\n */\nexport const Image: React.FC<ImageProps> & {\n Badge: typeof ImageBadge;\n Overlay: typeof ImageBase.Overlay;\n FloatElement: typeof ImageBase.FloatElement;\n} = ({\n size = IMAGE_DEFAULT_SIZE,\n borderRadius = 'm',\n borderStartStartRadius,\n borderStartEndRadius,\n borderEndStartRadius,\n borderEndEndRadius,\n style,\n className,\n objectFit = 'cover',\n ...restProps\n}: ImageProps) => {\n const borderStyles: CSSCustomProperties<string | undefined> = React.useMemo(\n () => ({\n '--vkui_internal--Image_border_radius': getBorderRadiusBySizeInPx(size, borderRadius),\n '--vkui_internal--Image_border_start_start_radius': getBorderRadiusBySizeInPx(\n size,\n borderStartStartRadius,\n ),\n '--vkui_internal--Image_border_start_end_radius': getBorderRadiusBySizeInPx(\n size,\n borderStartEndRadius,\n ),\n '--vkui_internal--Image_border_end_start_radius': getBorderRadiusBySizeInPx(\n size,\n borderEndStartRadius,\n ),\n '--vkui_internal--Image_border_end_end_radius': getBorderRadiusBySizeInPx(\n size,\n borderEndEndRadius,\n ),\n }),\n [\n borderRadius,\n borderStartStartRadius,\n borderStartEndRadius,\n borderEndStartRadius,\n borderEndEndRadius,\n size,\n ],\n );\n\n return (\n <ImageBase\n {...restProps}\n objectFit={objectFit}\n size={size}\n style={mergeStyle(borderStyles, style)}\n className={classNames(\n className,\n styles.host,\n borderStartStartRadius && styles.borderStartStartRadius,\n borderStartEndRadius && styles.borderStartEndRadius,\n borderEndStartRadius && styles.borderEndStartRadius,\n borderEndEndRadius && styles.borderEndEndRadius,\n )}\n />\n );\n};\n\nImage.displayName = 'Image';\n\nImage.Badge = ImageBadge;\nImage.Badge.displayName = 'Image.Badge';\n\nImage.Overlay = ImageBase.Overlay;\nImage.Overlay.displayName = 'Image.Overlay';\n\nImage.FloatElement = ImageBase.FloatElement;\nImage.FloatElement.displayName = 'Image.FloatElement';\n"],"names":["React","classNames","mergeStyle","ImageBase","ImageBadge","IMAGE_DEFAULT_SIZE","getBorderRadiusBySize","size","borderRadius","getBorderRadiusBySizeInPx","undefined","Image","borderStartStartRadius","borderStartEndRadius","borderEndStartRadius","borderEndEndRadius","style","className","objectFit","restProps","borderStyles","useMemo","displayName","Badge","Overlay","FloatElement"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAAQ,8BAA2B;AAEtD,SAASC,SAAS,QAAyD,4BAAyB;AACpG,SAASC,UAAU,QAA8B,6BAA0B;AAK3E,MAAMC,qBAAqB;AAyB3B,MAAMC,wBAAwB,CAC5BC,MACAC;IAEA,OAAQA;QACN,KAAK;YAAK;gBACR,IAAID,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;QACA,KAAK;YAAK;gBACR,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,IAAIA,QAAQ,IAAI;oBACd,OAAO;gBACT;gBACA,OAAO;YACT;IACF;AACF;AAEA,MAAME,4BAA4B,CAChCF,MACAC;IAEA,IAAI,CAACA,cAAc;QACjB,OAAOE;IACT;IAEA,OAAO,GAAGJ,sBAAsBC,MAAMC,cAAc,EAAE,CAAC;AACzD;AAEA;;CAEC,GACD,OAAO,MAAMG,QAIT;QAAC,EACHJ,OAAOF,kBAAkB,EACzBG,eAAe,GAAG,EAClBI,sBAAsB,EACtBC,oBAAoB,EACpBC,oBAAoB,EACpBC,kBAAkB,EAClBC,KAAK,EACLC,SAAS,EACTC,YAAY,OAAO,EAER,WADRC;QATHZ;QACAC;QACAI;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,eAAwDpB,MAAMqB,OAAO,CACzE,IAAO,CAAA;YACL,wCAAwCZ,0BAA0BF,MAAMC;YACxE,oDAAoDC,0BAClDF,MACAK;YAEF,kDAAkDH,0BAChDF,MACAM;YAEF,kDAAkDJ,0BAChDF,MACAO;YAEF,gDAAgDL,0BAC9CF,MACAQ;QAEJ,CAAA,GACA;QACEP;QACAI;QACAC;QACAC;QACAC;QACAR;KACD;IAGH,qBACE,KAACJ,mDACKgB;QACJD,WAAWA;QACXX,MAAMA;QACNS,OAAOd,WAAWkB,cAAcJ;QAChCC,WAAWhB,WACTgB,8BAEAL,+DACAC,2DACAC,2DACAC;;AAIR,EAAE;AAEFJ,MAAMW,WAAW,GAAG;AAEpBX,MAAMY,KAAK,GAAGnB;AACdO,MAAMY,KAAK,CAACD,WAAW,GAAG;AAE1BX,MAAMa,OAAO,GAAGrB,UAAUqB,OAAO;AACjCb,MAAMa,OAAO,CAACF,WAAW,GAAG;AAE5BX,MAAMc,YAAY,GAAGtB,UAAUsB,YAAY;AAC3Cd,MAAMc,YAAY,CAACH,WAAW,GAAG"}
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import type { AnchorHTMLAttributesOnly, HasRef, HasRootRef, LiteralUnion } from '../../types';
3
3
  import { ImageBaseBadge, type ImageBaseBadgeProps } from './ImageBaseBadge/ImageBaseBadge';
4
+ import { type FloatElementIndentation, type FloatElementPlacement, ImageBaseFloatElement, type ImageBaseFloatElementProps } from './ImageBaseFloatElement/ImageBaseFloatElement';
4
5
  import { ImageBaseOverlay, type ImageBaseOverlayProps } from './ImageBaseOverlay/ImageBaseOverlay';
5
6
  import { ImageBaseContext } from './context';
6
7
  import type { ImageBaseContextProps, ImageBaseExpectedIconProps, ImageBaseSize } from './types';
7
- export type { ImageBaseSize, ImageBaseExpectedIconProps, ImageBaseBadgeProps, ImageBaseOverlayProps, ImageBaseContextProps, };
8
+ export type { ImageBaseSize, ImageBaseExpectedIconProps, ImageBaseBadgeProps, ImageBaseOverlayProps, ImageBaseContextProps, ImageBaseFloatElementProps, FloatElementPlacement, FloatElementIndentation, };
8
9
  export { getBadgeIconSizeByImageBaseSize, getFallbackIconSizeByImageBaseSize, getOverlayIconSizeByImageBaseSize, } from './helpers';
9
10
  export { ImageBaseContext };
10
11
  export interface ImageBaseProps extends React.ImgHTMLAttributes<HTMLElement>, AnchorHTMLAttributesOnly, HasRootRef<HTMLDivElement>, HasRef<HTMLImageElement> {
@@ -52,6 +53,11 @@ export interface ImageBaseProps extends React.ImgHTMLAttributes<HTMLElement>, An
52
53
  * Подробнее можно почитать в [документации](https://developer.mozilla.org/ru/docs/Web/CSS/object-fit)
53
54
  */
54
55
  objectFit?: React.CSSProperties['objectFit'];
56
+ /**
57
+ * Пользовательское значения стиля object-position
58
+ * Подробнее можно почитать в [документации](https://developer.mozilla.org/ru/docs/Web/CSS/object-position)
59
+ */
60
+ objectPosition?: React.CSSProperties['objectPosition'];
55
61
  /**
56
62
  * Флаг для сохранения пропорций картинки.
57
63
  * Для корректной работы необходимо задать размеры хотя бы одной стороны картинки
@@ -64,5 +70,6 @@ export interface ImageBaseProps extends React.ImgHTMLAttributes<HTMLElement>, An
64
70
  export declare const ImageBase: React.FC<ImageBaseProps> & {
65
71
  Badge: typeof ImageBaseBadge;
66
72
  Overlay: typeof ImageBaseOverlay;
73
+ FloatElement: typeof ImageBaseFloatElement;
67
74
  };
68
75
  //# sourceMappingURL=ImageBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageBase.d.ts","sourceRoot":"","sources":["../../../src/components/ImageBase/ImageBase.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAO5B,MAAM,WAAW,cACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,wBAAwB,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,MAAM,CAAC,gBAAgB,CAAC;IAC1B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC9D;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8BD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG;IACjD,KAAK,EAAE,OAAO,cAAc,CAAC;IAC7B,OAAO,EAAE,OAAO,gBAAgB,CAAC;CAkIlC,CAAC"}
1
+ {"version":3,"file":"ImageBase.d.ts","sourceRoot":"","sources":["../../../src/components/ImageBase/ImageBase.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EACV,wBAAwB,EAExB,MAAM,EACN,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,0BAA0B,EAChC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,uBAAuB,GACxB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAO5B,MAAM,WAAW,cACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,wBAAwB,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,MAAM,CAAC,gBAAgB,CAAC;IAC1B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC9D;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC7C;;;OAGG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACvD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8BD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG;IACjD,KAAK,EAAE,OAAO,cAAc,CAAC;IAC7B,OAAO,EAAE,OAAO,gBAAgB,CAAC;IACjC,YAAY,EAAE,OAAO,qBAAqB,CAAC;CAmK5C,CAAC"}
@@ -3,13 +3,16 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
3
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { useRef } from "react";
6
7
  import * as React from "react";
7
8
  import { classNames } from "@vkontakte/vkjs";
9
+ import { mergeStyle } from "../../helpers/mergeStyle.js";
8
10
  import { useExternRef } from "../../hooks/useExternRef.js";
9
11
  import { minOr } from "../../lib/comparing.js";
10
12
  import { getFetchPriorityProp } from "../../lib/utils.js";
11
13
  import { Clickable } from "../Clickable/Clickable.js";
12
14
  import { ImageBaseBadge } from "./ImageBaseBadge/ImageBaseBadge.js";
15
+ import { ImageBaseFloatElement } from "./ImageBaseFloatElement/ImageBaseFloatElement.js";
13
16
  import { ImageBaseOverlay } from "./ImageBaseOverlay/ImageBaseOverlay.js";
14
17
  import { ImageBaseContext } from "./context.js";
15
18
  import { validateFallbackIcon, validateSize } from "./validators.js";
@@ -46,7 +49,7 @@ const sizeToNumber = (size)=>{
46
49
  /**
47
50
  * @see https://vkcom.github.io/VKUI/#/ImageBase
48
51
  */ export const ImageBase = (_param)=>{
49
- var { alt, crossOrigin, decoding, loading, referrerPolicy, sizes, src, srcSet, useMap, fetchPriority, getRef, size: sizeProp, width: widthImg, height: heightImg, widthSize, heightSize, noBorder = false, fallbackIcon: fallbackIconProp, children, onLoad, onError, withTransparentBackground, objectFit = 'cover', keepAspectRatio = false } = _param, restProps = _object_without_properties(_param, [
52
+ var { alt, crossOrigin, decoding, loading, referrerPolicy, sizes, src, srcSet, useMap, fetchPriority, getRef, size: sizeProp, width: widthImg, height: heightImg, widthSize, heightSize, noBorder = false, fallbackIcon: fallbackIconProp, children, onLoad, onError, withTransparentBackground, objectFit = 'cover', objectPosition, keepAspectRatio = false, getRootRef } = _param, restProps = _object_without_properties(_param, [
50
53
  "alt",
51
54
  "crossOrigin",
52
55
  "decoding",
@@ -70,16 +73,21 @@ const sizeToNumber = (size)=>{
70
73
  "onError",
71
74
  "withTransparentBackground",
72
75
  "objectFit",
73
- "keepAspectRatio"
76
+ "objectPosition",
77
+ "keepAspectRatio",
78
+ "getRootRef"
74
79
  ]);
75
80
  const size = sizeProp !== null && sizeProp !== void 0 ? sizeProp : minOr([
76
81
  sizeToNumber(widthSize),
77
82
  sizeToNumber(heightSize)
78
83
  ], defaultSize);
84
+ const wrapperRef = useExternRef(getRootRef);
79
85
  const width = widthSize !== null && widthSize !== void 0 ? widthSize : keepAspectRatio ? undefined : size;
80
86
  const height = heightSize !== null && heightSize !== void 0 ? heightSize : keepAspectRatio ? undefined : size;
81
87
  const [loaded, setLoaded] = React.useState(false);
82
88
  const [failed, setFailed] = React.useState(false);
89
+ const mouseOverHandlersRef = useRef([]);
90
+ const mouseOutHandlersRef = useRef([]);
83
91
  const hasSrc = src || srcSet;
84
92
  const needShowFallbackIcon = (failed || !hasSrc) && /*#__PURE__*/ React.isValidElement(fallbackIconProp);
85
93
  const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;
@@ -120,30 +128,48 @@ const sizeToNumber = (size)=>{
120
128
  imgRef,
121
129
  loaded
122
130
  ]);
131
+ const onMouseOver = ()=>{
132
+ mouseOverHandlersRef.current.forEach((fn)=>fn());
133
+ };
134
+ const onMouseOut = ()=>{
135
+ mouseOutHandlersRef.current.forEach((fn)=>fn());
136
+ };
137
+ const contextValue = React.useMemo(()=>({
138
+ size,
139
+ onMouseOverHandlers: mouseOverHandlersRef.current,
140
+ onMouseOutHandlers: mouseOutHandlersRef.current
141
+ }), [
142
+ size
143
+ ]);
144
+ const imgStyles = objectPosition ? {
145
+ '--vkui_internal--ImageBase_object_position': objectPosition
146
+ } : undefined;
147
+ const keepAspectRationStyles = keepAspectRatio ? {
148
+ width: widthImg || width,
149
+ height: heightImg || height
150
+ } : undefined;
123
151
  return /*#__PURE__*/ _jsx(ImageBaseContext.Provider, {
124
- value: {
125
- size
126
- },
152
+ value: contextValue,
127
153
  children: /*#__PURE__*/ _jsxs(Clickable, _object_spread_props(_object_spread({
128
154
  baseStyle: {
129
155
  width,
130
156
  height
131
157
  },
132
- baseClassName: classNames("vkuiImageBase__host", loaded && "vkuiImageBase__loaded", withTransparentBackground && "vkuiImageBase__transparentBackground")
158
+ baseClassName: classNames("vkuiImageBase__host", loaded && "vkuiImageBase__loaded", withTransparentBackground && "vkuiImageBase__transparentBackground"),
159
+ getRootRef: wrapperRef,
160
+ onMouseOver: onMouseOver,
161
+ onMouseOut: onMouseOut
133
162
  }, restProps), {
134
163
  children: [
135
164
  hasSrc && /*#__PURE__*/ _jsx("img", _object_spread({
136
165
  ref: imgRef,
137
166
  alt: alt,
138
- className: classNames("vkuiImageBase__img", getObjectFitClassName(objectFit), keepAspectRatio && "vkuiImageBase__imgKeepRatio"),
167
+ className: classNames("vkuiImageBase__img", getObjectFitClassName(objectFit), objectPosition && "vkuiImageBase__withObjectPosition", keepAspectRatio && "vkuiImageBase__imgKeepRatio"),
139
168
  crossOrigin: crossOrigin,
140
169
  decoding: decoding,
141
170
  loading: loading,
142
171
  referrerPolicy: referrerPolicy,
143
- style: keepAspectRatio ? {
144
- width: widthImg || width,
145
- height: heightImg || height
146
- } : undefined,
172
+ style: mergeStyle(keepAspectRationStyles, imgStyles),
147
173
  sizes: sizes,
148
174
  src: src,
149
175
  srcSet: srcSet,
@@ -174,5 +200,7 @@ ImageBase.Badge = ImageBaseBadge;
174
200
  ImageBase.Badge.displayName = 'ImageBase.Badge';
175
201
  ImageBase.Overlay = ImageBaseOverlay;
176
202
  ImageBase.Overlay.displayName = 'ImageBase.Overlay';
203
+ ImageBase.FloatElement = ImageBaseFloatElement;
204
+ ImageBase.FloatElement.displayName = 'ImageBase.FloatElement';
177
205
 
178
206
  //# sourceMappingURL=ImageBase.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ImageBase/ImageBase.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { minOr } from '../../lib/comparing';\nimport { getFetchPriorityProp } from '../../lib/utils';\nimport type { AnchorHTMLAttributesOnly, HasRef, HasRootRef, LiteralUnion } from '../../types';\nimport { Clickable } from '../Clickable/Clickable';\nimport { ImageBaseBadge, type ImageBaseBadgeProps } from './ImageBaseBadge/ImageBaseBadge';\nimport { ImageBaseOverlay, type ImageBaseOverlayProps } from './ImageBaseOverlay/ImageBaseOverlay';\nimport { ImageBaseContext } from './context';\nimport type { ImageBaseContextProps, ImageBaseExpectedIconProps, ImageBaseSize } from './types';\nimport { validateFallbackIcon, validateSize } from './validators';\nimport styles from './ImageBase.module.css';\n\nexport type {\n ImageBaseSize,\n ImageBaseExpectedIconProps,\n ImageBaseBadgeProps,\n ImageBaseOverlayProps,\n ImageBaseContextProps,\n};\n\nexport {\n getBadgeIconSizeByImageBaseSize,\n getFallbackIconSizeByImageBaseSize,\n getOverlayIconSizeByImageBaseSize,\n} from './helpers';\n\nexport { ImageBaseContext };\n\n/**\n * Размер по умолчанию.\n */\nconst defaultSize = 24;\n\nexport interface ImageBaseProps\n extends React.ImgHTMLAttributes<HTMLElement>,\n AnchorHTMLAttributesOnly,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLImageElement> {\n /**\n * Задаёт размер картинки.\n *\n * Используйте размеры заданные дизайн-системой `16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 56 | 64 | 72 | 80 | 88 | 96`.\n *\n * > ⚠️ Использование кастомного размера – это пограничный кейс.\n */\n size?: LiteralUnion<ImageBaseSize, number>;\n /**\n * Ширина изображения\n */\n widthSize?: number | string;\n /**\n * Высота изображения\n */\n heightSize?: number | string;\n /**\n * Отключает обводку.\n */\n noBorder?: boolean;\n /**\n * Фолбек на случай, если картинка не прогрузилась.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getFallbackIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n *\n * > ⚠️ Может перекрывать `children`.\n */\n fallbackIcon?: React.ReactElement<ImageBaseExpectedIconProps>;\n /**\n * Отключает фон, заданный по умолчанию. Полезен для отображения картинок с прозрачностью.\n * @since 5.10.0\n */\n withTransparentBackground?: boolean;\n /**\n * Пользовательское значения стиля object-fit\n * Подробнее можно почитать в [документации](https://developer.mozilla.org/ru/docs/Web/CSS/object-fit)\n */\n objectFit?: React.CSSProperties['objectFit'];\n /**\n * Флаг для сохранения пропорций картинки.\n * Для корректной работы необходимо задать размеры хотя бы одной стороны картинки\n */\n keepAspectRatio?: boolean;\n}\n\nconst getObjectFitClassName = (objectFit: React.CSSProperties['objectFit']) => {\n switch (objectFit) {\n case 'contain':\n return styles.imgObjectFitContain;\n case 'cover':\n return styles.imgObjectFitCover;\n case 'none':\n return styles.imgObjectFitNone;\n case 'scale-down':\n return styles.imgObjectFitScaleDown;\n }\n return undefined;\n};\n\nconst parsePx = (value: string): number | undefined => {\n if (value.endsWith('px')) {\n return parseInt(value);\n }\n return undefined;\n};\n\nconst sizeToNumber = (size: number | string | undefined): number | undefined => {\n if (typeof size === 'string') {\n return parsePx(size);\n }\n return size;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ImageBase\n */\nexport const ImageBase: React.FC<ImageBaseProps> & {\n Badge: typeof ImageBaseBadge;\n Overlay: typeof ImageBaseOverlay;\n} = ({\n alt,\n crossOrigin,\n decoding,\n loading,\n referrerPolicy,\n sizes,\n src,\n srcSet,\n useMap,\n fetchPriority,\n getRef,\n size: sizeProp,\n width: widthImg,\n height: heightImg,\n widthSize,\n heightSize,\n noBorder = false,\n fallbackIcon: fallbackIconProp,\n children,\n onLoad,\n onError,\n withTransparentBackground,\n objectFit = 'cover',\n keepAspectRatio = false,\n ...restProps\n}: ImageBaseProps) => {\n const size = sizeProp ?? minOr([sizeToNumber(widthSize), sizeToNumber(heightSize)], defaultSize);\n\n const width = widthSize ?? (keepAspectRatio ? undefined : size);\n const height = heightSize ?? (keepAspectRatio ? undefined : size);\n\n const [loaded, setLoaded] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n\n const hasSrc = src || srcSet;\n const needShowFallbackIcon = (failed || !hasSrc) && React.isValidElement(fallbackIconProp);\n\n const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;\n\n if (process.env.NODE_ENV === 'development') {\n validateSize(size);\n if (fallbackIcon) {\n validateFallbackIcon(size, { name: 'fallbackIcon', value: fallbackIcon });\n }\n }\n\n const handleImageLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {\n if (loaded) {\n return;\n }\n\n setLoaded(true);\n setFailed(false);\n onLoad?.(event);\n };\n\n const handleImageError = (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(false);\n setFailed(true);\n onError?.(event);\n };\n\n const imgRef = useExternRef(getRef);\n const isOnLoadStatusCheckedRef = React.useRef(false);\n React.useEffect(\n function dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater() {\n if (isOnLoadStatusCheckedRef.current) {\n return;\n }\n isOnLoadStatusCheckedRef.current = true;\n\n if (imgRef.current && imgRef.current.complete && !loaded) {\n const event = new Event('load');\n imgRef.current.dispatchEvent(event);\n }\n },\n [imgRef, loaded],\n );\n\n return (\n <ImageBaseContext.Provider value={{ size }}>\n <Clickable\n baseStyle={{ width, height }}\n baseClassName={classNames(\n styles.host,\n loaded && styles.loaded,\n withTransparentBackground && styles.transparentBackground,\n )}\n {...restProps}\n >\n {hasSrc && (\n <img\n ref={imgRef}\n alt={alt}\n className={classNames(\n styles.img,\n getObjectFitClassName(objectFit),\n keepAspectRatio && styles.imgKeepRatio,\n )}\n crossOrigin={crossOrigin}\n decoding={decoding}\n loading={loading}\n referrerPolicy={referrerPolicy}\n style={\n keepAspectRatio\n ? {\n width: widthImg || width,\n height: heightImg || height,\n }\n : undefined\n }\n sizes={sizes}\n src={src}\n srcSet={srcSet}\n useMap={useMap}\n width={widthImg}\n height={heightImg}\n onLoad={handleImageLoad}\n onError={handleImageError}\n {...getFetchPriorityProp(fetchPriority)}\n />\n )}\n {fallbackIcon && <div className={styles.fallback}>{fallbackIcon}</div>}\n {children && <div className={styles.children}>{children}</div>}\n {!noBorder && <div aria-hidden className={styles.border} />}\n </Clickable>\n </ImageBaseContext.Provider>\n );\n};\n\nImageBase.displayName = 'ImageBase';\n\nImageBase.Badge = ImageBaseBadge;\nImageBase.Badge.displayName = 'ImageBase.Badge';\n\nImageBase.Overlay = ImageBaseOverlay;\nImageBase.Overlay.displayName = 'ImageBase.Overlay';\n"],"names":["React","classNames","useExternRef","minOr","getFetchPriorityProp","Clickable","ImageBaseBadge","ImageBaseOverlay","ImageBaseContext","validateFallbackIcon","validateSize","getBadgeIconSizeByImageBaseSize","getFallbackIconSizeByImageBaseSize","getOverlayIconSizeByImageBaseSize","defaultSize","getObjectFitClassName","objectFit","undefined","parsePx","value","endsWith","parseInt","sizeToNumber","size","ImageBase","alt","crossOrigin","decoding","loading","referrerPolicy","sizes","src","srcSet","useMap","fetchPriority","getRef","sizeProp","width","widthImg","height","heightImg","widthSize","heightSize","noBorder","fallbackIcon","fallbackIconProp","children","onLoad","onError","withTransparentBackground","keepAspectRatio","restProps","loaded","setLoaded","useState","failed","setFailed","hasSrc","needShowFallbackIcon","isValidElement","process","env","NODE_ENV","name","handleImageLoad","event","handleImageError","imgRef","isOnLoadStatusCheckedRef","useRef","useEffect","dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater","current","complete","Event","dispatchEvent","Provider","baseStyle","baseClassName","img","ref","className","style","div","aria-hidden","displayName","Badge","Overlay"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ImageBase/ImageBase.tsx"],"sourcesContent":["'use client';\n\nimport { useRef } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { minOr } from '../../lib/comparing';\nimport { getFetchPriorityProp } from '../../lib/utils';\nimport type {\n AnchorHTMLAttributesOnly,\n CSSCustomProperties,\n HasRef,\n HasRootRef,\n LiteralUnion,\n} from '../../types';\nimport { Clickable } from '../Clickable/Clickable';\nimport { ImageBaseBadge, type ImageBaseBadgeProps } from './ImageBaseBadge/ImageBaseBadge';\nimport {\n type FloatElementIndentation,\n type FloatElementPlacement,\n ImageBaseFloatElement,\n type ImageBaseFloatElementProps,\n} from './ImageBaseFloatElement/ImageBaseFloatElement';\nimport { ImageBaseOverlay, type ImageBaseOverlayProps } from './ImageBaseOverlay/ImageBaseOverlay';\nimport { ImageBaseContext } from './context';\nimport type { ImageBaseContextProps, ImageBaseExpectedIconProps, ImageBaseSize } from './types';\nimport { validateFallbackIcon, validateSize } from './validators';\nimport styles from './ImageBase.module.css';\n\nexport type {\n ImageBaseSize,\n ImageBaseExpectedIconProps,\n ImageBaseBadgeProps,\n ImageBaseOverlayProps,\n ImageBaseContextProps,\n ImageBaseFloatElementProps,\n FloatElementPlacement,\n FloatElementIndentation,\n};\n\nexport {\n getBadgeIconSizeByImageBaseSize,\n getFallbackIconSizeByImageBaseSize,\n getOverlayIconSizeByImageBaseSize,\n} from './helpers';\n\nexport { ImageBaseContext };\n\n/**\n * Размер по умолчанию.\n */\nconst defaultSize = 24;\n\nexport interface ImageBaseProps\n extends React.ImgHTMLAttributes<HTMLElement>,\n AnchorHTMLAttributesOnly,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLImageElement> {\n /**\n * Задаёт размер картинки.\n *\n * Используйте размеры заданные дизайн-системой `16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 56 | 64 | 72 | 80 | 88 | 96`.\n *\n * > ⚠️ Использование кастомного размера – это пограничный кейс.\n */\n size?: LiteralUnion<ImageBaseSize, number>;\n /**\n * Ширина изображения\n */\n widthSize?: number | string;\n /**\n * Высота изображения\n */\n heightSize?: number | string;\n /**\n * Отключает обводку.\n */\n noBorder?: boolean;\n /**\n * Фолбек на случай, если картинка не прогрузилась.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getFallbackIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n *\n * > ⚠️ Может перекрывать `children`.\n */\n fallbackIcon?: React.ReactElement<ImageBaseExpectedIconProps>;\n /**\n * Отключает фон, заданный по умолчанию. Полезен для отображения картинок с прозрачностью.\n * @since 5.10.0\n */\n withTransparentBackground?: boolean;\n /**\n * Пользовательское значения стиля object-fit\n * Подробнее можно почитать в [документации](https://developer.mozilla.org/ru/docs/Web/CSS/object-fit)\n */\n objectFit?: React.CSSProperties['objectFit'];\n /**\n * Пользовательское значения стиля object-position\n * Подробнее можно почитать в [документации](https://developer.mozilla.org/ru/docs/Web/CSS/object-position)\n */\n objectPosition?: React.CSSProperties['objectPosition'];\n /**\n * Флаг для сохранения пропорций картинки.\n * Для корректной работы необходимо задать размеры хотя бы одной стороны картинки\n */\n keepAspectRatio?: boolean;\n}\n\nconst getObjectFitClassName = (objectFit: React.CSSProperties['objectFit']) => {\n switch (objectFit) {\n case 'contain':\n return styles.imgObjectFitContain;\n case 'cover':\n return styles.imgObjectFitCover;\n case 'none':\n return styles.imgObjectFitNone;\n case 'scale-down':\n return styles.imgObjectFitScaleDown;\n }\n return undefined;\n};\n\nconst parsePx = (value: string): number | undefined => {\n if (value.endsWith('px')) {\n return parseInt(value);\n }\n return undefined;\n};\n\nconst sizeToNumber = (size: number | string | undefined): number | undefined => {\n if (typeof size === 'string') {\n return parsePx(size);\n }\n return size;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ImageBase\n */\nexport const ImageBase: React.FC<ImageBaseProps> & {\n Badge: typeof ImageBaseBadge;\n Overlay: typeof ImageBaseOverlay;\n FloatElement: typeof ImageBaseFloatElement;\n} = ({\n alt,\n crossOrigin,\n decoding,\n loading,\n referrerPolicy,\n sizes,\n src,\n srcSet,\n useMap,\n fetchPriority,\n getRef,\n size: sizeProp,\n width: widthImg,\n height: heightImg,\n widthSize,\n heightSize,\n noBorder = false,\n fallbackIcon: fallbackIconProp,\n children,\n onLoad,\n onError,\n withTransparentBackground,\n objectFit = 'cover',\n objectPosition,\n keepAspectRatio = false,\n getRootRef,\n ...restProps\n}: ImageBaseProps) => {\n const size = sizeProp ?? minOr([sizeToNumber(widthSize), sizeToNumber(heightSize)], defaultSize);\n const wrapperRef = useExternRef(getRootRef);\n\n const width = widthSize ?? (keepAspectRatio ? undefined : size);\n const height = heightSize ?? (keepAspectRatio ? undefined : size);\n\n const [loaded, setLoaded] = React.useState(false);\n const [failed, setFailed] = React.useState(false);\n\n const mouseOverHandlersRef = useRef<VoidFunction[]>([]);\n const mouseOutHandlersRef = useRef<VoidFunction[]>([]);\n\n const hasSrc = src || srcSet;\n const needShowFallbackIcon = (failed || !hasSrc) && React.isValidElement(fallbackIconProp);\n\n const fallbackIcon = needShowFallbackIcon ? fallbackIconProp : null;\n\n if (process.env.NODE_ENV === 'development') {\n validateSize(size);\n if (fallbackIcon) {\n validateFallbackIcon(size, { name: 'fallbackIcon', value: fallbackIcon });\n }\n }\n\n const handleImageLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {\n if (loaded) {\n return;\n }\n\n setLoaded(true);\n setFailed(false);\n onLoad?.(event);\n };\n\n const handleImageError = (event: React.SyntheticEvent<HTMLImageElement>) => {\n setLoaded(false);\n setFailed(true);\n onError?.(event);\n };\n\n const imgRef = useExternRef(getRef);\n const isOnLoadStatusCheckedRef = React.useRef(false);\n React.useEffect(\n function dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater() {\n if (isOnLoadStatusCheckedRef.current) {\n return;\n }\n isOnLoadStatusCheckedRef.current = true;\n\n if (imgRef.current && imgRef.current.complete && !loaded) {\n const event = new Event('load');\n imgRef.current.dispatchEvent(event);\n }\n },\n [imgRef, loaded],\n );\n\n const onMouseOver = () => {\n mouseOverHandlersRef.current.forEach((fn) => fn());\n };\n\n const onMouseOut = () => {\n mouseOutHandlersRef.current.forEach((fn) => fn());\n };\n\n const contextValue = React.useMemo(\n () => ({\n size,\n onMouseOverHandlers: mouseOverHandlersRef.current,\n onMouseOutHandlers: mouseOutHandlersRef.current,\n }),\n [size],\n );\n\n const imgStyles: CSSCustomProperties<string | number> | undefined = objectPosition\n ? {\n '--vkui_internal--ImageBase_object_position': objectPosition,\n }\n : undefined;\n\n const keepAspectRationStyles = keepAspectRatio\n ? {\n width: widthImg || width,\n height: heightImg || height,\n }\n : undefined;\n\n return (\n <ImageBaseContext.Provider value={contextValue}>\n <Clickable\n baseStyle={{ width, height }}\n baseClassName={classNames(\n styles.host,\n loaded && styles.loaded,\n withTransparentBackground && styles.transparentBackground,\n )}\n getRootRef={wrapperRef}\n onMouseOver={onMouseOver}\n onMouseOut={onMouseOut}\n {...restProps}\n >\n {hasSrc && (\n <img\n ref={imgRef}\n alt={alt}\n className={classNames(\n styles.img,\n getObjectFitClassName(objectFit),\n objectPosition && styles.withObjectPosition,\n keepAspectRatio && styles.imgKeepRatio,\n )}\n crossOrigin={crossOrigin}\n decoding={decoding}\n loading={loading}\n referrerPolicy={referrerPolicy}\n style={mergeStyle(keepAspectRationStyles, imgStyles)}\n sizes={sizes}\n src={src}\n srcSet={srcSet}\n useMap={useMap}\n width={widthImg}\n height={heightImg}\n onLoad={handleImageLoad}\n onError={handleImageError}\n {...getFetchPriorityProp(fetchPriority)}\n />\n )}\n {fallbackIcon && <div className={styles.fallback}>{fallbackIcon}</div>}\n {children && <div className={styles.children}>{children}</div>}\n {!noBorder && <div aria-hidden className={styles.border} />}\n </Clickable>\n </ImageBaseContext.Provider>\n );\n};\n\nImageBase.displayName = 'ImageBase';\n\nImageBase.Badge = ImageBaseBadge;\nImageBase.Badge.displayName = 'ImageBase.Badge';\n\nImageBase.Overlay = ImageBaseOverlay;\nImageBase.Overlay.displayName = 'ImageBase.Overlay';\n\nImageBase.FloatElement = ImageBaseFloatElement;\nImageBase.FloatElement.displayName = 'ImageBase.FloatElement';\n"],"names":["useRef","React","classNames","mergeStyle","useExternRef","minOr","getFetchPriorityProp","Clickable","ImageBaseBadge","ImageBaseFloatElement","ImageBaseOverlay","ImageBaseContext","validateFallbackIcon","validateSize","getBadgeIconSizeByImageBaseSize","getFallbackIconSizeByImageBaseSize","getOverlayIconSizeByImageBaseSize","defaultSize","getObjectFitClassName","objectFit","undefined","parsePx","value","endsWith","parseInt","sizeToNumber","size","ImageBase","alt","crossOrigin","decoding","loading","referrerPolicy","sizes","src","srcSet","useMap","fetchPriority","getRef","sizeProp","width","widthImg","height","heightImg","widthSize","heightSize","noBorder","fallbackIcon","fallbackIconProp","children","onLoad","onError","withTransparentBackground","objectPosition","keepAspectRatio","getRootRef","restProps","wrapperRef","loaded","setLoaded","useState","failed","setFailed","mouseOverHandlersRef","mouseOutHandlersRef","hasSrc","needShowFallbackIcon","isValidElement","process","env","NODE_ENV","name","handleImageLoad","event","handleImageError","imgRef","isOnLoadStatusCheckedRef","useEffect","dispatchLoadEventForAlreadyLoadedResourceIfReactInitializedLater","current","complete","Event","dispatchEvent","onMouseOver","forEach","fn","onMouseOut","contextValue","useMemo","onMouseOverHandlers","onMouseOutHandlers","imgStyles","keepAspectRationStyles","Provider","baseStyle","baseClassName","img","ref","className","style","div","aria-hidden","displayName","Badge","Overlay","FloatElement"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type HTMLAttributesWithRootRef } from '../../../types';
2
+ export type FloatElementPlacement = 'top-start' | 'top' | 'top-end' | 'bottom-start' | 'bottom' | 'bottom-end' | 'middle-start' | 'middle' | 'middle-end';
3
+ export type FloatElementIndentation = '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' | number | string;
4
+ export interface ImageBaseFloatElementProps extends HTMLAttributesWithRootRef<HTMLDivElement> {
5
+ /**
6
+ * Позиция компонента относительно родителя
7
+ */
8
+ placement: FloatElementPlacement;
9
+ /**
10
+ * Отступ компонента от края контейнера по горизонтали
11
+ */
12
+ inlineIndent?: FloatElementIndentation;
13
+ /**
14
+ * Отступ компонента от края контейнера по вертикали
15
+ */
16
+ blockIndent?: FloatElementIndentation;
17
+ /**
18
+ * Режим отображения компонента:
19
+ *
20
+ * - `"always"`: Всегда
21
+ * - `"on-hover"`: При наведении на картинку
22
+ */
23
+ visibility?: 'always' | 'on-hover';
24
+ }
25
+ export declare const ImageBaseFloatElement: {
26
+ ({ placement, visibility, style, className, inlineIndent, blockIndent, ...restProps }: ImageBaseFloatElementProps): import("react/jsx-runtime").JSX.Element;
27
+ displayName: string;
28
+ };
29
+ //# sourceMappingURL=ImageBaseFloatElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageBaseFloatElement.d.ts","sourceRoot":"","sources":["../../../../src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAMhE,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,KAAK,GACL,SAAS,GACT,cAAc,GACd,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,uBAAuB,GAC/B,KAAK,GACL,IAAI,GACJ,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,CAAC;AAsCX,MAAM,WAAW,0BAA2B,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IAC3F;;OAEG;IACH,SAAS,EAAE,qBAAqB,CAAC;IACjC;;OAEG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC;;OAEG;IACH,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACpC;AAED,eAAO,MAAM,qBAAqB;2FAQ/B,0BAA0B;;CAgE5B,CAAC"}
@@ -0,0 +1,96 @@
1
+ 'use client';
2
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
+ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
+ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ import * as React from "react";
7
+ import { classNames } from "@vkontakte/vkjs";
8
+ import { useIsomorphicLayoutEffect } from "../../../lib/useIsomorphicLayoutEffect.js";
9
+ import { RootComponent } from "../../RootComponent/RootComponent.js";
10
+ import { ImageBaseContext } from "../context.js";
11
+ import { mutableRemoveElement, resolveIndent } from "./helpers.js";
12
+ const positionPlacementClassNames = {
13
+ 'top-start': "vkuiImageBaseFloatElement__placementTopStart",
14
+ 'top': "vkuiImageBaseFloatElement__placementTop",
15
+ 'top-end': "vkuiImageBaseFloatElement__placementTopEnd",
16
+ 'bottom-start': "vkuiImageBaseFloatElement__placementBottomStart",
17
+ 'bottom': "vkuiImageBaseFloatElement__placementBottom",
18
+ 'bottom-end': "vkuiImageBaseFloatElement__placementBottomEnd",
19
+ 'middle-start': "vkuiImageBaseFloatElement__placementMiddleStart",
20
+ 'middle': "vkuiImageBaseFloatElement__placementMiddle",
21
+ 'middle-end': "vkuiImageBaseFloatElement__placementMiddleEnd"
22
+ };
23
+ const inlineIndentClassNames = {
24
+ '2xs': "vkuiImageBaseFloatElement__inlineIndent2xs",
25
+ 'xs': "vkuiImageBaseFloatElement__inlineIndentXs",
26
+ 's': "vkuiImageBaseFloatElement__inlineIndentS",
27
+ 'm': "vkuiImageBaseFloatElement__inlineIndentM",
28
+ 'l': "vkuiImageBaseFloatElement__inlineIndentL",
29
+ 'xl': "vkuiImageBaseFloatElement__inlineIndentXl",
30
+ '2xl': "vkuiImageBaseFloatElement__inlineIndent2xl",
31
+ '3xl': "vkuiImageBaseFloatElement__inlineIndent3xl",
32
+ '4xl': "vkuiImageBaseFloatElement__inlineIndent4xl"
33
+ };
34
+ const blockIndentClassNames = {
35
+ '2xs': "vkuiImageBaseFloatElement__blockIndent2xs",
36
+ 'xs': "vkuiImageBaseFloatElement__blockIndentXs",
37
+ 's': "vkuiImageBaseFloatElement__blockIndentS",
38
+ 'm': "vkuiImageBaseFloatElement__blockIndentM",
39
+ 'l': "vkuiImageBaseFloatElement__blockIndentL",
40
+ 'xl': "vkuiImageBaseFloatElement__blockIndentXl",
41
+ '2xl': "vkuiImageBaseFloatElement__blockIndent2xl",
42
+ '3xl': "vkuiImageBaseFloatElement__blockIndent3xl",
43
+ '4xl': "vkuiImageBaseFloatElement__blockIndent4xl"
44
+ };
45
+ export const ImageBaseFloatElement = (_param)=>{
46
+ var { placement, visibility = 'always', style, className, inlineIndent, blockIndent } = _param, restProps = _object_without_properties(_param, [
47
+ "placement",
48
+ "visibility",
49
+ "style",
50
+ "className",
51
+ "inlineIndent",
52
+ "blockIndent"
53
+ ]);
54
+ const [hidden, setHidden] = React.useState(visibility !== 'always');
55
+ const { onMouseOverHandlers, onMouseOutHandlers } = React.useContext(ImageBaseContext);
56
+ useIsomorphicLayoutEffect(function resetHidden() {
57
+ setHidden(visibility === 'on-hover');
58
+ }, [
59
+ visibility
60
+ ]);
61
+ useIsomorphicLayoutEffect(function addMouseHandlers() {
62
+ if (visibility === 'on-hover') {
63
+ const onMouseOver = ()=>setHidden(false);
64
+ const onMouseOut = ()=>setHidden(true);
65
+ onMouseOverHandlers.push(onMouseOver);
66
+ onMouseOutHandlers.push(onMouseOut);
67
+ return ()=>{
68
+ mutableRemoveElement(onMouseOverHandlers, onMouseOver);
69
+ mutableRemoveElement(onMouseOutHandlers, onMouseOut);
70
+ };
71
+ }
72
+ return;
73
+ }, [
74
+ visibility
75
+ ]);
76
+ const [inlineIndentStyle, blockIndentStyle, inlineIndentClassName, blockIndentClassName] = React.useMemo(()=>{
77
+ const [inlineIndentStyle, inlineIndentClassName] = resolveIndent(inlineIndent, '--vkui_internal--FloatElement_horizontal_indent', inlineIndentClassNames);
78
+ const [blockIndentStyle, blockIndentClassName] = resolveIndent(blockIndent, '--vkui_internal--FloatElement_vertical_indent', blockIndentClassNames);
79
+ return [
80
+ inlineIndentStyle,
81
+ blockIndentStyle,
82
+ inlineIndentClassName,
83
+ blockIndentClassName
84
+ ];
85
+ }, [
86
+ inlineIndent,
87
+ blockIndent
88
+ ]);
89
+ return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({}, restProps), {
90
+ style: _object_spread({}, style, inlineIndentStyle, blockIndentStyle),
91
+ className: classNames("vkuiImageBaseFloatElement__host", hidden && "vkuiImageBaseFloatElement__hidden", positionPlacementClassNames[placement], inlineIndentClassName, blockIndentClassName, className)
92
+ }));
93
+ };
94
+ ImageBaseFloatElement.displayName = 'ImageBaseFloatElement';
95
+
96
+ //# sourceMappingURL=ImageBaseFloatElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';\nimport { type HTMLAttributesWithRootRef } from '../../../types';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { ImageBaseContext } from '../context';\nimport { mutableRemoveElement, resolveIndent } from './helpers';\nimport styles from './ImageBaseFloatElement.module.css';\n\nexport type FloatElementPlacement =\n | 'top-start'\n | 'top'\n | 'top-end'\n | 'bottom-start'\n | 'bottom'\n | 'bottom-end'\n | 'middle-start'\n | 'middle'\n | 'middle-end';\n\nexport type FloatElementIndentation =\n | '2xs'\n | 'xs'\n | 's'\n | 'm'\n | 'l'\n | 'xl'\n | '2xl'\n | '3xl'\n | '4xl'\n | number\n | string;\n\nconst positionPlacementClassNames = {\n 'top-start': styles.placementTopStart,\n 'top': styles.placementTop,\n 'top-end': styles.placementTopEnd,\n 'bottom-start': styles.placementBottomStart,\n 'bottom': styles.placementBottom,\n 'bottom-end': styles.placementBottomEnd,\n 'middle-start': styles.placementMiddleStart,\n 'middle': styles.placementMiddle,\n 'middle-end': styles.placementMiddleEnd,\n};\n\nconst inlineIndentClassNames = {\n '2xs': styles.inlineIndent2xs,\n 'xs': styles.inlineIndentXs,\n 's': styles.inlineIndentS,\n 'm': styles.inlineIndentM,\n 'l': styles.inlineIndentL,\n 'xl': styles.inlineIndentXl,\n '2xl': styles.inlineIndent2xl,\n '3xl': styles.inlineIndent3xl,\n '4xl': styles.inlineIndent4xl,\n};\n\nconst blockIndentClassNames = {\n '2xs': styles.blockIndent2xs,\n 'xs': styles.blockIndentXs,\n 's': styles.blockIndentS,\n 'm': styles.blockIndentM,\n 'l': styles.blockIndentL,\n 'xl': styles.blockIndentXl,\n '2xl': styles.blockIndent2xl,\n '3xl': styles.blockIndent3xl,\n '4xl': styles.blockIndent4xl,\n};\n\nexport interface ImageBaseFloatElementProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Позиция компонента относительно родителя\n */\n placement: FloatElementPlacement;\n /**\n * Отступ компонента от края контейнера по горизонтали\n */\n inlineIndent?: FloatElementIndentation;\n /**\n * Отступ компонента от края контейнера по вертикали\n */\n blockIndent?: FloatElementIndentation;\n /**\n * Режим отображения компонента:\n *\n * - `\"always\"`: Всегда\n * - `\"on-hover\"`: При наведении на картинку\n */\n visibility?: 'always' | 'on-hover';\n}\n\nexport const ImageBaseFloatElement = ({\n placement,\n visibility = 'always',\n style,\n className,\n inlineIndent,\n blockIndent,\n ...restProps\n}: ImageBaseFloatElementProps) => {\n const [hidden, setHidden] = React.useState(visibility !== 'always');\n const { onMouseOverHandlers, onMouseOutHandlers } = React.useContext(ImageBaseContext);\n\n useIsomorphicLayoutEffect(\n function resetHidden() {\n setHidden(visibility === 'on-hover');\n },\n [visibility],\n );\n\n useIsomorphicLayoutEffect(\n function addMouseHandlers() {\n if (visibility === 'on-hover') {\n const onMouseOver = () => setHidden(false);\n const onMouseOut = () => setHidden(true);\n\n onMouseOverHandlers.push(onMouseOver);\n onMouseOutHandlers.push(onMouseOut);\n\n return () => {\n mutableRemoveElement(onMouseOverHandlers, onMouseOver);\n mutableRemoveElement(onMouseOutHandlers, onMouseOut);\n };\n }\n return;\n },\n [visibility],\n );\n\n const [inlineIndentStyle, blockIndentStyle, inlineIndentClassName, blockIndentClassName] =\n React.useMemo(() => {\n const [inlineIndentStyle, inlineIndentClassName] = resolveIndent(\n inlineIndent,\n '--vkui_internal--FloatElement_horizontal_indent',\n inlineIndentClassNames,\n );\n const [blockIndentStyle, blockIndentClassName] = resolveIndent(\n blockIndent,\n '--vkui_internal--FloatElement_vertical_indent',\n blockIndentClassNames,\n );\n\n return [inlineIndentStyle, blockIndentStyle, inlineIndentClassName, blockIndentClassName];\n }, [inlineIndent, blockIndent]);\n\n return (\n <RootComponent\n {...restProps}\n style={{\n ...style,\n ...inlineIndentStyle,\n ...blockIndentStyle,\n }}\n className={classNames(\n styles.host,\n hidden && styles.hidden,\n positionPlacementClassNames[placement],\n inlineIndentClassName,\n blockIndentClassName,\n className,\n )}\n />\n );\n};\n\nImageBaseFloatElement.displayName = 'ImageBaseFloatElement';\n"],"names":["React","classNames","useIsomorphicLayoutEffect","RootComponent","ImageBaseContext","mutableRemoveElement","resolveIndent","positionPlacementClassNames","inlineIndentClassNames","blockIndentClassNames","ImageBaseFloatElement","placement","visibility","style","className","inlineIndent","blockIndent","restProps","hidden","setHidden","useState","onMouseOverHandlers","onMouseOutHandlers","useContext","resetHidden","addMouseHandlers","onMouseOver","onMouseOut","push","inlineIndentStyle","blockIndentStyle","inlineIndentClassName","blockIndentClassName","useMemo","displayName"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,yBAAyB,QAAQ,4CAAyC;AAEnF,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,gBAAgB,QAAQ,gBAAa;AAC9C,SAASC,oBAAoB,EAAEC,aAAa,QAAQ,eAAY;AA2BhE,MAAMC,8BAA8B;IAClC,WAAW;IACX,KAAK;IACL,SAAS;IACT,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,YAAY;AACd;AAEA,MAAMC,yBAAyB;IAC7B,KAAK;IACL,IAAI;IACJ,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;AACP;AAEA,MAAMC,wBAAwB;IAC5B,KAAK;IACL,IAAI;IACJ,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;AACP;AAwBA,OAAO,MAAMC,wBAAwB;QAAC,EACpCC,SAAS,EACTC,aAAa,QAAQ,EACrBC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,WAAW,EAEgB,WADxBC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,CAACE,QAAQC,UAAU,GAAGnB,MAAMoB,QAAQ,CAACR,eAAe;IAC1D,MAAM,EAAES,mBAAmB,EAAEC,kBAAkB,EAAE,GAAGtB,MAAMuB,UAAU,CAACnB;IAErEF,0BACE,SAASsB;QACPL,UAAUP,eAAe;IAC3B,GACA;QAACA;KAAW;IAGdV,0BACE,SAASuB;QACP,IAAIb,eAAe,YAAY;YAC7B,MAAMc,cAAc,IAAMP,UAAU;YACpC,MAAMQ,aAAa,IAAMR,UAAU;YAEnCE,oBAAoBO,IAAI,CAACF;YACzBJ,mBAAmBM,IAAI,CAACD;YAExB,OAAO;gBACLtB,qBAAqBgB,qBAAqBK;gBAC1CrB,qBAAqBiB,oBAAoBK;YAC3C;QACF;QACA;IACF,GACA;QAACf;KAAW;IAGd,MAAM,CAACiB,mBAAmBC,kBAAkBC,uBAAuBC,qBAAqB,GACtFhC,MAAMiC,OAAO,CAAC;QACZ,MAAM,CAACJ,mBAAmBE,sBAAsB,GAAGzB,cACjDS,cACA,mDACAP;QAEF,MAAM,CAACsB,kBAAkBE,qBAAqB,GAAG1B,cAC/CU,aACA,iDACAP;QAGF,OAAO;YAACoB;YAAmBC;YAAkBC;YAAuBC;SAAqB;IAC3F,GAAG;QAACjB;QAAcC;KAAY;IAEhC,qBACE,KAACb,uDACKc;QACJJ,OAAO,mBACFA,OACAgB,mBACAC;QAELhB,WAAWb,8CAETiB,+CACAX,2BAA2B,CAACI,UAAU,EACtCoB,uBACAC,sBACAlB;;AAIR,EAAE;AAEFJ,sBAAsBwB,WAAW,GAAG"}