@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
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
+ import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
2
3
  import type { SharedDropdownProps } from './types';
3
4
  type CloseInitiators = 'action-item' | 'cancel-item' | 'other';
4
5
  export interface ActionSheetOnCloseOptions {
5
6
  closedBy: CloseInitiators;
6
7
  }
7
- export interface ActionSheetProps extends Pick<SharedDropdownProps, 'toggleRef' | 'popupOffsetDistance' | 'placement' | 'autoFocus'>, Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {
8
+ export interface ActionSheetProps extends Pick<SharedDropdownProps, 'toggleRef' | 'popupOffsetDistance' | 'placement'>, Omit<UseFocusTrapProps, 'onClose'>, Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {
8
9
  title?: React.ReactNode;
9
10
  description?: React.ReactNode;
10
11
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGnD,KAAK,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAC/D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,gBACf,SAAQ,IAAI,CACR,mBAAmB,EACnB,WAAW,GAAG,qBAAqB,GAAG,WAAW,GAAG,WAAW,CAChE,EACD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACnE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,4IAYrB,gBAAgB,KAAG,KAAK,CAAC,SAkG3B,CAAC"}
1
+ {"version":3,"file":"ActionSheet.d.ts","sourceRoot":"","sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAWlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGnD,KAAK,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAC/D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,qBAAqB,GAAG,WAAW,CAAC,EAClF,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAClC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACnE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACtD;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,4IAYrB,gBAAgB,KAAG,KAAK,CAAC,SAkG3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, type ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport type { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\ntype CloseInitiators = 'action-item' | 'cancel-item' | 'other';\nexport interface ActionSheetOnCloseOptions {\n closedBy: CloseInitiators;\n}\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n 'toggleRef' | 'popupOffsetDistance' | 'placement' | 'autoFocus'\n >,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose: (options: ActionSheetOnCloseOptions) => void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode;\n mode?: 'sheet' | 'menu';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n title,\n description,\n style,\n iosCloseItem,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n onClose,\n ...restProps\n}: ActionSheetProps): React.ReactNode => {\n const platform = usePlatform();\n const [closingBy, setClosingBy] = React.useState<undefined | CloseInitiators>(undefined);\n const onCloseWithOther = React.useCallback(() => setClosingBy('other'), []);\n const actionCallbackRef = React.useRef(noop);\n\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closingBy !== undefined ? 'exit' : 'enter',\n {\n onExited() {\n onClose({ closedBy: closingBy || 'other' });\n actionCallbackRef.current();\n actionCallbackRef.current = noop;\n },\n },\n );\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n if (action) {\n actionCallbackRef.current = () => action(event);\n }\n setClosingBy(isCancelItem ? 'cancel-item' : 'action-item');\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = React.useMemo(\n () => ({ onItemClick, mode, onClose: onCloseWithOther }),\n [mode, onCloseWithOther, onItemClick],\n );\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n const dropdownProps =\n mode === 'menu' ? Object.assign(restProps, { popupOffsetDistance, placement }) : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closingBy)}\n role=\"dialog\"\n aria-modal=\"true\"\n autoFocus={animationState === 'entered'}\n {...dropdownProps}\n {...animationHandlers}\n onClose={onCloseWithOther}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles.contentWrapper}>\n {(title || description) && (\n <div className={styles.header}>\n {title && (\n <Footnote weight=\"2\" className={styles.title}>\n {title}\n </Footnote>\n )}\n {description && <Footnote className={styles.description}>{description}</Footnote>}\n </div>\n )}\n {children}\n </div>\n {platform === 'ios' && mode === 'sheet' && (\n <div className={styles.closeItemWrapperIos}>\n {iosCloseItem ?? <ActionSheetDefaultIosCloseItem />}\n </div>\n )}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n return (\n <AppRootPortal>\n <PopoutWrapper\n noBackground={mode === 'menu'}\n closing={Boolean(closingBy)}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onCloseWithOther}\n fixed\n >\n {actionSheet}\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","usePlatform","useCSSKeyframesAnimationController","AppRootPortal","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDefaultIosCloseItem","ActionSheetDropdownMenu","ActionSheetDropdownSheet","ActionSheet","children","className","title","description","style","iosCloseItem","popupOffsetDistance","placement","mode","modeProp","onClose","restProps","platform","closingBy","setClosingBy","useState","undefined","onCloseWithOther","useCallback","actionCallbackRef","useRef","animationState","animationHandlers","onExited","closedBy","current","isDesktop","onItemClick","action","immediateAction","autoClose","isCancelItem","event","persist","contextValue","useMemo","DropdownComponent","dropdownProps","Object","assign","actionSheet","Provider","value","closing","Boolean","role","aria-modal","autoFocus","div","weight","noBackground","alignY","onClick","fixed"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, type ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport type { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\ntype CloseInitiators = 'action-item' | 'cancel-item' | 'other';\nexport interface ActionSheetOnCloseOptions {\n closedBy: CloseInitiators;\n}\n\nexport interface ActionSheetProps\n extends Pick<SharedDropdownProps, 'toggleRef' | 'popupOffsetDistance' | 'placement'>,\n Omit<UseFocusTrapProps, 'onClose'>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'autoFocus' | 'title'> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose: (options: ActionSheetOnCloseOptions) => void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode;\n mode?: 'sheet' | 'menu';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n title,\n description,\n style,\n iosCloseItem,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n onClose,\n ...restProps\n}: ActionSheetProps): React.ReactNode => {\n const platform = usePlatform();\n const [closingBy, setClosingBy] = React.useState<undefined | CloseInitiators>(undefined);\n const onCloseWithOther = React.useCallback(() => setClosingBy('other'), []);\n const actionCallbackRef = React.useRef(noop);\n\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closingBy !== undefined ? 'exit' : 'enter',\n {\n onExited() {\n onClose({ closedBy: closingBy || 'other' });\n actionCallbackRef.current();\n actionCallbackRef.current = noop;\n },\n },\n );\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n if (action) {\n actionCallbackRef.current = () => action(event);\n }\n setClosingBy(isCancelItem ? 'cancel-item' : 'action-item');\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = React.useMemo(\n () => ({ onItemClick, mode, onClose: onCloseWithOther }),\n [mode, onCloseWithOther, onItemClick],\n );\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n const dropdownProps =\n mode === 'menu' ? Object.assign(restProps, { popupOffsetDistance, placement }) : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closingBy)}\n role=\"dialog\"\n aria-modal=\"true\"\n autoFocus={animationState === 'entered'}\n {...dropdownProps}\n {...animationHandlers}\n onClose={onCloseWithOther}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles.contentWrapper}>\n {(title || description) && (\n <div className={styles.header}>\n {title && (\n <Footnote weight=\"2\" className={styles.title}>\n {title}\n </Footnote>\n )}\n {description && <Footnote className={styles.description}>{description}</Footnote>}\n </div>\n )}\n {children}\n </div>\n {platform === 'ios' && mode === 'sheet' && (\n <div className={styles.closeItemWrapperIos}>\n {iosCloseItem ?? <ActionSheetDefaultIosCloseItem />}\n </div>\n )}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n return (\n <AppRootPortal>\n <PopoutWrapper\n noBackground={mode === 'menu'}\n closing={Boolean(closingBy)}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onCloseWithOther}\n fixed\n >\n {actionSheet}\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","usePlatform","useCSSKeyframesAnimationController","AppRootPortal","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDefaultIosCloseItem","ActionSheetDropdownMenu","ActionSheetDropdownSheet","ActionSheet","children","className","title","description","style","iosCloseItem","popupOffsetDistance","placement","mode","modeProp","onClose","restProps","platform","closingBy","setClosingBy","useState","undefined","onCloseWithOther","useCallback","actionCallbackRef","useRef","animationState","animationHandlers","onExited","closedBy","current","isDesktop","onItemClick","action","immediateAction","autoClose","isCancelItem","event","persist","contextValue","useMemo","DropdownComponent","dropdownProps","Object","assign","actionSheet","Provider","value","closing","Boolean","role","aria-modal","autoFocus","div","weight","noBackground","alignY","onClick","fixed"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type * as React from 'react';
2
2
  import type { PlacementWithAuto } from '../../lib/floating/types/common';
3
3
  import { type FocusTrapProps } from '../FocusTrap/FocusTrap';
4
- export type ToggleRef = Element | null | undefined | React.RefObject<Element>;
4
+ export type ToggleRef = Element | null | undefined | React.RefObject<Element | null>;
5
5
  export interface SharedDropdownProps extends FocusTrapProps {
6
6
  closing: boolean;
7
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ActionSheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAE9E,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;SAEK;IACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ActionSheet/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAErF,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;SAEK;IACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { PlacementWithAuto } from '../../lib/floating/types/common';\nimport { type FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element>;\n\nexport interface SharedDropdownProps extends FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n */\n toggleRef: ToggleRef;\n /**\n * Позиционирование всплывающего окна для десктопа.\n * Компонент выберет наилучшее расположение сам, но можно задать приоритетное направление с помощью этого свойства\n */\n placement?: PlacementWithAuto;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":[],"mappings":"AAMA,WAgBC"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { PlacementWithAuto } from '../../lib/floating/types/common';\nimport { type FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element | null>;\n\nexport interface SharedDropdownProps extends FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n */\n toggleRef: ToggleRef;\n /**\n * Позиционирование всплывающего окна для десктопа.\n * Компонент выберет наилучшее расположение сам, но можно задать приоритетное направление с помощью этого свойства\n */\n placement?: PlacementWithAuto;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":[],"mappings":"AAMA,WAgBC"}
@@ -39,7 +39,7 @@ export interface AlertProps extends Omit<React.HTMLAttributes<HTMLElement>, 'tit
39
39
  */
40
40
  dismissButtonMode?: 'inside' | 'outside';
41
41
  /**
42
- * `data-testid` для кнопки закрытия
42
+ * Передает атрибут `data-testid` для кнопки закрытия
43
43
  */
44
44
  dismissButtonTestId?: string;
45
45
  usePortal?: AppRootPortalProps['usePortal'];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon20Cancel } from '@vkontakte/icons';\nimport { classNames, hasReactNode, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { stopPropagation } from '../../lib/utils';\nimport type {\n AlignType,\n AnchorHTMLAttributesOnly,\n HasDataAttribute,\n HasRootRef,\n} from '../../types';\nimport type { AppRootPortalProps } from '../AppRoot/AppRootPortal';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport type { ButtonProps } from '../Button/Button';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { IconButton } from '../IconButton/IconButton';\nimport { ModalDismissButton } from '../ModalDismissButton/ModalDismissButton';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport type { AlertActionProps } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertDescription, AlertTitle } from './AlertTypography';\nimport styles from './Alert.module.css';\n\ntype AlertActionMode = 'cancel' | 'destructive' | 'default';\n\nexport interface AlertActionInterface\n extends Pick<ButtonProps, 'Component'>,\n AnchorHTMLAttributesOnly,\n HasDataAttribute {\n title: string;\n /**\n * Обработчик клика на опцию. Если свойство `autoCloseDisabled` включено,\n * то в аргументы `action` передаётся объект с функцией close,\n * вызвав которую можно закрыть `action` вручную.\n */\n action?: (args?: { close?: VoidFunction }) => void;\n /**\n * По умолчанию клик на опцию вызывает переданную в `Alert` функцию `onClose`, данное свойство\n * позволяет отключить такое поведение\n */\n autoCloseDisabled?: boolean;\n mode: AlertActionMode;\n}\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLElement>, 'title'>,\n HasRootRef<HTMLDivElement> {\n actionsLayout?: 'vertical' | 'horizontal';\n actionsAlign?: AlignType;\n actions?: AlertActionInterface[];\n renderAction?: (props: AlertActionProps) => React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n onClose: VoidFunction;\n /**\n * Текст кнопки закрытия. Делает ее доступной для ассистивных технологий\n */\n dismissLabel?: string;\n /**\n * Расположение кнопки закрытия (внутри и вне `popout'a`)\n * Доступно только в `compact`-режиме, не отображается на `iOS`\n */\n dismissButtonMode?: 'inside' | 'outside';\n /**\n * `data-testid` для кнопки закрытия\n */\n dismissButtonTestId?: string;\n usePortal?: AppRootPortalProps['usePortal'];\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Alert\n */\nexport const Alert = ({\n actions,\n actionsLayout = 'horizontal',\n children,\n className,\n style,\n title,\n description,\n onClose,\n dismissLabel = 'Закрыть предупреждение',\n renderAction,\n actionsAlign,\n dismissButtonMode = 'outside',\n dismissButtonTestId,\n getRootRef,\n usePortal,\n ...restProps\n}: AlertProps): React.ReactNode => {\n const generatedId = React.useId();\n\n const titleId = `vkui-alert-${generatedId}-title`;\n const descriptionId = `vkui-alert-${generatedId}-description`;\n\n const platform = usePlatform();\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n\n const [closing, setClosing] = React.useState(false);\n const itemActionCallbackRef = React.useRef(noop);\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closing ? 'exit' : 'enter',\n {\n onExited() {\n itemActionCallbackRef.current();\n itemActionCallbackRef.current = noop;\n onClose();\n },\n },\n );\n const isDismissButtonVisible = isDesktop && platform !== 'ios';\n const elementRef = React.useRef<HTMLDivElement>(null);\n\n const close = React.useCallback(() => {\n setClosing(true);\n }, []);\n\n const onItemClick = React.useCallback(\n (item: AlertActionInterface) => {\n const { action: itemAction, autoCloseDisabled = false } = item;\n\n if (autoCloseDisabled) {\n itemAction && itemAction({ close });\n } else {\n if (itemAction) {\n itemActionCallbackRef.current = itemAction;\n }\n setClosing(true);\n }\n },\n [close],\n );\n\n useScrollLock();\n\n return (\n <AppRootPortal usePortal={usePortal}>\n <PopoutWrapper\n className={className}\n closing={closing}\n style={style}\n onClick={close}\n getRootRef={getRootRef}\n >\n <FocusTrap\n {...restProps}\n {...animationHandlers}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n autoFocus={animationState === 'entered'}\n className={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n platform === 'vkcom' && styles.vkcom,\n closing ? styles.closing : styles.opening,\n isDesktop && styles.desktop,\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n >\n <div\n className={classNames(\n styles.content,\n dismissButtonMode === 'inside' && styles.contentWithButton,\n )}\n >\n {hasReactNode(title) && <AlertTitle id={titleId}>{title}</AlertTitle>}\n {hasReactNode(description) && (\n <AlertDescription id={descriptionId}>{description}</AlertDescription>\n )}\n {children}\n {isDismissButtonVisible && dismissButtonMode === 'inside' && (\n <IconButton\n label={dismissLabel}\n className={classNames(styles.dismiss, 'vkuiInternalAlert__dismiss')}\n onClick={close}\n hoverMode=\"opacity\"\n activeMode=\"opacity\"\n data-testid={dismissButtonTestId}\n >\n <Icon20Cancel />\n </IconButton>\n )}\n </div>\n <AlertActions\n actions={actions}\n actionsAlign={actionsAlign}\n actionsLayout={actionsLayout}\n renderAction={renderAction}\n onItemClick={onItemClick}\n />\n {isDismissButtonVisible && dismissButtonMode === 'outside' && (\n <ModalDismissButton onClick={close} data-testid={dismissButtonTestId}>\n {dismissLabel}\n </ModalDismissButton>\n )}\n </FocusTrap>\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","Icon20Cancel","classNames","hasReactNode","noop","useAdaptivityWithJSMediaQueries","usePlatform","useCSSKeyframesAnimationController","stopPropagation","AppRootPortal","useScrollLock","FocusTrap","IconButton","ModalDismissButton","PopoutWrapper","AlertActions","AlertDescription","AlertTitle","Alert","actions","actionsLayout","children","className","style","title","description","onClose","dismissLabel","renderAction","actionsAlign","dismissButtonMode","dismissButtonTestId","getRootRef","usePortal","restProps","generatedId","useId","titleId","descriptionId","platform","isDesktop","closing","setClosing","useState","itemActionCallbackRef","useRef","animationState","animationHandlers","onExited","current","isDismissButtonVisible","elementRef","close","useCallback","onItemClick","item","action","itemAction","autoCloseDisabled","onClick","autoFocus","role","aria-modal","aria-labelledby","aria-describedby","div","id","label","hoverMode","activeMode","data-testid"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon20Cancel } from '@vkontakte/icons';\nimport { classNames, hasReactNode, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { stopPropagation } from '../../lib/utils';\nimport type {\n AlignType,\n AnchorHTMLAttributesOnly,\n HasDataAttribute,\n HasRootRef,\n} from '../../types';\nimport type { AppRootPortalProps } from '../AppRoot/AppRootPortal';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport type { ButtonProps } from '../Button/Button';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { IconButton } from '../IconButton/IconButton';\nimport { ModalDismissButton } from '../ModalDismissButton/ModalDismissButton';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport type { AlertActionProps } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertDescription, AlertTitle } from './AlertTypography';\nimport styles from './Alert.module.css';\n\ntype AlertActionMode = 'cancel' | 'destructive' | 'default';\n\nexport interface AlertActionInterface\n extends Pick<ButtonProps, 'Component'>,\n AnchorHTMLAttributesOnly,\n HasDataAttribute {\n title: string;\n /**\n * Обработчик клика на опцию. Если свойство `autoCloseDisabled` включено,\n * то в аргументы `action` передаётся объект с функцией close,\n * вызвав которую можно закрыть `action` вручную.\n */\n action?: (args?: { close?: VoidFunction }) => void;\n /**\n * По умолчанию клик на опцию вызывает переданную в `Alert` функцию `onClose`, данное свойство\n * позволяет отключить такое поведение\n */\n autoCloseDisabled?: boolean;\n mode: AlertActionMode;\n}\n\nexport interface AlertProps\n extends Omit<React.HTMLAttributes<HTMLElement>, 'title'>,\n HasRootRef<HTMLDivElement> {\n actionsLayout?: 'vertical' | 'horizontal';\n actionsAlign?: AlignType;\n actions?: AlertActionInterface[];\n renderAction?: (props: AlertActionProps) => React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n onClose: VoidFunction;\n /**\n * Текст кнопки закрытия. Делает ее доступной для ассистивных технологий\n */\n dismissLabel?: string;\n /**\n * Расположение кнопки закрытия (внутри и вне `popout'a`)\n * Доступно только в `compact`-режиме, не отображается на `iOS`\n */\n dismissButtonMode?: 'inside' | 'outside';\n /**\n * Передает атрибут `data-testid` для кнопки закрытия\n */\n dismissButtonTestId?: string;\n usePortal?: AppRootPortalProps['usePortal'];\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Alert\n */\nexport const Alert = ({\n actions,\n actionsLayout = 'horizontal',\n children,\n className,\n style,\n title,\n description,\n onClose,\n dismissLabel = 'Закрыть предупреждение',\n renderAction,\n actionsAlign,\n dismissButtonMode = 'outside',\n dismissButtonTestId,\n getRootRef,\n usePortal,\n ...restProps\n}: AlertProps): React.ReactNode => {\n const generatedId = React.useId();\n\n const titleId = `vkui-alert-${generatedId}-title`;\n const descriptionId = `vkui-alert-${generatedId}-description`;\n\n const platform = usePlatform();\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n\n const [closing, setClosing] = React.useState(false);\n const itemActionCallbackRef = React.useRef(noop);\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n closing ? 'exit' : 'enter',\n {\n onExited() {\n itemActionCallbackRef.current();\n itemActionCallbackRef.current = noop;\n onClose();\n },\n },\n );\n const isDismissButtonVisible = isDesktop && platform !== 'ios';\n const elementRef = React.useRef<HTMLDivElement>(null);\n\n const close = React.useCallback(() => {\n setClosing(true);\n }, []);\n\n const onItemClick = React.useCallback(\n (item: AlertActionInterface) => {\n const { action: itemAction, autoCloseDisabled = false } = item;\n\n if (autoCloseDisabled) {\n itemAction && itemAction({ close });\n } else {\n if (itemAction) {\n itemActionCallbackRef.current = itemAction;\n }\n setClosing(true);\n }\n },\n [close],\n );\n\n useScrollLock();\n\n return (\n <AppRootPortal usePortal={usePortal}>\n <PopoutWrapper\n className={className}\n closing={closing}\n style={style}\n onClick={close}\n getRootRef={getRootRef}\n >\n <FocusTrap\n {...restProps}\n {...animationHandlers}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n autoFocus={animationState === 'entered'}\n className={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n platform === 'vkcom' && styles.vkcom,\n closing ? styles.closing : styles.opening,\n isDesktop && styles.desktop,\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n >\n <div\n className={classNames(\n styles.content,\n dismissButtonMode === 'inside' && styles.contentWithButton,\n )}\n >\n {hasReactNode(title) && <AlertTitle id={titleId}>{title}</AlertTitle>}\n {hasReactNode(description) && (\n <AlertDescription id={descriptionId}>{description}</AlertDescription>\n )}\n {children}\n {isDismissButtonVisible && dismissButtonMode === 'inside' && (\n <IconButton\n label={dismissLabel}\n className={classNames(styles.dismiss, 'vkuiInternalAlert__dismiss')}\n onClick={close}\n hoverMode=\"opacity\"\n activeMode=\"opacity\"\n data-testid={dismissButtonTestId}\n >\n <Icon20Cancel />\n </IconButton>\n )}\n </div>\n <AlertActions\n actions={actions}\n actionsAlign={actionsAlign}\n actionsLayout={actionsLayout}\n renderAction={renderAction}\n onItemClick={onItemClick}\n />\n {isDismissButtonVisible && dismissButtonMode === 'outside' && (\n <ModalDismissButton onClick={close} data-testid={dismissButtonTestId}>\n {dismissLabel}\n </ModalDismissButton>\n )}\n </FocusTrap>\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n"],"names":["React","Icon20Cancel","classNames","hasReactNode","noop","useAdaptivityWithJSMediaQueries","usePlatform","useCSSKeyframesAnimationController","stopPropagation","AppRootPortal","useScrollLock","FocusTrap","IconButton","ModalDismissButton","PopoutWrapper","AlertActions","AlertDescription","AlertTitle","Alert","actions","actionsLayout","children","className","style","title","description","onClose","dismissLabel","renderAction","actionsAlign","dismissButtonMode","dismissButtonTestId","getRootRef","usePortal","restProps","generatedId","useId","titleId","descriptionId","platform","isDesktop","closing","setClosing","useState","itemActionCallbackRef","useRef","animationState","animationHandlers","onExited","current","isDismissButtonVisible","elementRef","close","useCallback","onItemClick","item","action","itemAction","autoCloseDisabled","onClick","autoFocus","role","aria-modal","aria-labelledby","aria-describedby","div","id","label","hoverMode","activeMode","data-testid"],"mappings":"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"}
@@ -17,7 +17,7 @@ export interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {
17
17
  /**
18
18
  * Кастомный root-элемент портала
19
19
  */
20
- portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;
20
+ portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null;
21
21
  /**
22
22
  * Отключает рендер всплывающих компонентов в отдельном контейнере
23
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AppRoot.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRoot.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,EACf,MAAM,SAAS,CAAC;AAQjB,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC/D;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,8CAA8C,CAAC,EAAE,OAAO,CAAC;IACzD;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAUvC,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,+NAajB,YAAY,KAAG,KAAK,CAAC,SA8EvB,CAAC"}
1
+ {"version":3,"file":"AppRoot.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRoot.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,EACf,MAAM,SAAS,CAAC;AAQjB,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtE;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,8CAA8C,CAAC,EAAE,OAAO,CAAC;IACzD;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAUvC,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,+NAajB,YAAY,KAAG,KAAK,CAAC,SA8EvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useKeyboardInputTracker } from '../../hooks/useKeyboardInputTracker';\nimport { useSyncHTMLWithBaseVKUIClasses } from '../../hooks/useSyncHTMLWithBaseVKUIClasses';\nimport { useSyncHTMLWithTokens } from '../../hooks/useSyncHTMLWithTokens';\nimport { AppRootContext } from './AppRootContext';\nimport { AppRootStyleContainer } from './AppRootStyleContainer/AppRootStyleContainer';\nimport { ElementScrollController, GlobalScrollController } from './ScrollContext';\nimport { useSafeAreaInsetsMemo } from './helpers';\nimport type {\n AppRootLayout,\n AppRootMode,\n AppRootScroll,\n AppRootUserSelectMode,\n SafeAreaInsets,\n} from './types';\nimport styles from './AppRoot.module.css';\n\nconst layoutClassNames = {\n card: styles.layoutCard,\n plain: styles.layoutPlain,\n};\n\nexport interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Режим встраивания */\n mode?: AppRootMode;\n /**\n * - `global` (по умолчанию) — VKUI-приложение скроллится вместе со страницей.\n * - `contain` — VKUI-приложение живет в отдельной зоне и скроллится независимо внутри `AppRoot` (например, в модалке).\n *\n * Полезно при использовании `mode=\"embedded\"`.\n */\n scroll?: AppRootScroll;\n /**\n * см. документацию [mdn web docs | env#values](https://developer.mozilla.org/en-US/docs/Web/CSS/env#values).\n */\n safeAreaInsets?: SafeAreaInsets;\n /**\n * Кастомный root-элемент портала\n */\n portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;\n /**\n * Отключает рендер всплывающих компонентов в отдельном контейнере\n */\n disablePortal?: boolean;\n /**\n * По умолчанию, mode=\"embedded\" переносит систему координат элементов с `position: fixed` на\n * свой контейнер через `transform: translate3d(0, 0, 0)`.\n *\n * Это поведение можно отключить с помощью этого параметра.\n */\n disableParentTransformForPositionFixedElements?: boolean;\n /**\n * Глобально задаёт тип оформления макета для компонентов\n * [Panel](https://vkcom.github.io/VKUI/#/Panel) и [Group](https://vkcom.github.io/VKUI/#/Group).\n */\n layout?: AppRootLayout;\n /**\n * Задаёт режим выбора текста (выделения текста) для всего приложения.\n * По умолчанию, если режим не задан, запрещает выбор текста в приложениях,\n * запущенных в webview (по значению свойства `isWebView` из [ConfigProvider](https://vkcom.github.io/VKUI/#/ConfigProvider)).\n *\n * - `enabled-with-pointer` – разрешает выбор текста, если устройство ввода типа `pointer` (например, `мышь`), в остальных случаях запрещает;\n * - `disabled` – запрещает выбор текста;\n * - `enabled` – разрешает выбор текста.\n *\n * @since 6.2.0\n */\n userSelectMode?: AppRootUserSelectMode;\n /*\n * По умолчанию в режиме `mode=\"full\"` VKUI в рантайме выставляет:\n * - класс .vkui на html элемент\n * - класс .vkui__root на элемент-контейнер, в который монтируется VKUI\n * С помощью этой опции такое поведение можно отключить.\n *\n * Для корректной работы SSR рекоммендуется выставлять эти классы самостоятельно\n * и отключить это поведение.\n */\n disableSettingVKUIClassesInRuntime?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/AppRoot\n */\nexport const AppRoot = ({\n children,\n mode = 'full',\n scroll = 'global',\n portalRoot,\n disablePortal = false,\n disableParentTransformForPositionFixedElements,\n safeAreaInsets: safeAreaInsetsProp,\n layout,\n userSelectMode,\n disableSettingVKUIClassesInRuntime,\n className,\n ...props\n}: AppRootProps): React.ReactNode => {\n const appRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const isKeyboardInputActiveRef = useKeyboardInputTracker();\n const safeAreaInsets = useSafeAreaInsetsMemo(safeAreaInsetsProp);\n\n const contextValue = React.useMemo(\n () => ({\n appRoot: appRootRef,\n portalRoot,\n safeAreaInsets,\n embedded: mode === 'embedded',\n mode,\n disablePortal,\n layout,\n get keyboardInput() {\n return isKeyboardInputActiveRef.current;\n },\n userSelectMode,\n }),\n [\n portalRoot,\n disablePortal,\n isKeyboardInputActiveRef,\n layout,\n mode,\n safeAreaInsets,\n userSelectMode,\n ],\n );\n\n /*\n * Вешаем класс токенов на html в режиме full.\n * Это необходимо, чтобы цвета html элемента и скроллбара соответствовали текущей цветовой схеме:\n * - фон html элемента виден, если пользователь оверскролит. Тогда возникает анимация bounce-эффекта и виден фон html элемента. Без токенов в черной теме будет выглядывать белый фон.\n * - цвет системного сколлбара зависит от color-sheme свойства, значение которого задётся токенами и должно быть выставлено именно на html элементе.\n * В режме SSR пользователи сами могу задать этот класс на html-элементе. главное, чтобы он соответствовал переданным platform и appearence свойствам.\n */\n useSyncHTMLWithTokens({ appRootRef, enable: mode === 'full' });\n /*\n * По умолчанию VKUI будет выставлять .vkui на html и .vkui__root на контейнере в режиме full.\n * В режиме embedded будет выставлять только .vkui__root и .vkui__root--embedded на контейнере.\n * В режиме partial мы классы не выставляем.\n */\n useSyncHTMLWithBaseVKUIClasses({\n appRootRef,\n mode,\n layout,\n enable: mode !== 'partial' && !disableSettingVKUIClassesInRuntime,\n });\n\n const ScrollController = React.useMemo(\n () => (scroll === 'contain' ? ElementScrollController : GlobalScrollController),\n [scroll],\n );\n\n return mode === 'partial' ? (\n <AppRootContext.Provider value={contextValue}>\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootContext.Provider>\n ) : (\n <AppRootContext.Provider value={contextValue}>\n <AppRootStyleContainer\n getRootRef={appRootRef}\n className={classNames(\n className,\n styles.host,\n layout && layoutClassNames[layout],\n mode === 'embedded' && !disableParentTransformForPositionFixedElements\n ? styles.transformForPositionFixedElements\n : undefined,\n )}\n {...props}\n >\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootStyleContainer>\n </AppRootContext.Provider>\n );\n};\n"],"names":["React","classNames","useKeyboardInputTracker","useSyncHTMLWithBaseVKUIClasses","useSyncHTMLWithTokens","AppRootContext","AppRootStyleContainer","ElementScrollController","GlobalScrollController","useSafeAreaInsetsMemo","layoutClassNames","card","plain","AppRoot","children","mode","scroll","portalRoot","disablePortal","disableParentTransformForPositionFixedElements","safeAreaInsets","safeAreaInsetsProp","layout","userSelectMode","disableSettingVKUIClassesInRuntime","className","props","appRootRef","useRef","isKeyboardInputActiveRef","contextValue","useMemo","appRoot","embedded","keyboardInput","current","enable","ScrollController","Provider","value","elRef","getRootRef","undefined"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,uBAAuB,QAAQ,yCAAsC;AAC9E,SAASC,8BAA8B,QAAQ,gDAA6C;AAC5F,SAASC,qBAAqB,QAAQ,uCAAoC;AAC1E,SAASC,cAAc,QAAQ,sBAAmB;AAClD,SAASC,qBAAqB,QAAQ,mDAAgD;AACtF,SAASC,uBAAuB,EAAEC,sBAAsB,QAAQ,qBAAkB;AAClF,SAASC,qBAAqB,QAAQ,eAAY;AAUlD,MAAMC,mBAAmB;IACvBC,IAAI;IACJC,KAAK;AACP;AA4DA;;CAEC,GACD,OAAO,MAAMC,UAAU;QAAC,EACtBC,QAAQ,EACRC,OAAO,MAAM,EACbC,SAAS,QAAQ,EACjBC,UAAU,EACVC,gBAAgB,KAAK,EACrBC,8CAA8C,EAC9CC,gBAAgBC,kBAAkB,EAClCC,MAAM,EACNC,cAAc,EACdC,kCAAkC,EAClCC,SAAS,EAEI,WADVC;QAXHZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;;IAGA,MAAME,aAAa3B,MAAM4B,MAAM,CAAwB;IAEvD,MAAMC,2BAA2B3B;IACjC,MAAMkB,iBAAiBX,sBAAsBY;IAE7C,MAAMS,eAAe9B,MAAM+B,OAAO,CAChC,IAAO,CAAA;YACLC,SAASL;YACTV;YACAG;YACAa,UAAUlB,SAAS;YACnBA;YACAG;YACAI;YACA,IAAIY,iBAAgB;gBAClB,OAAOL,yBAAyBM,OAAO;YACzC;YACAZ;QACF,CAAA,GACA;QACEN;QACAC;QACAW;QACAP;QACAP;QACAK;QACAG;KACD;IAGH;;;;;;GAMC,GACDnB,sBAAsB;QAAEuB;QAAYS,QAAQrB,SAAS;IAAO;IAC5D;;;;GAIC,GACDZ,+BAA+B;QAC7BwB;QACAZ;QACAO;QACAc,QAAQrB,SAAS,aAAa,CAACS;IACjC;IAEA,MAAMa,mBAAmBrC,MAAM+B,OAAO,CACpC,IAAOf,WAAW,YAAYT,0BAA0BC,wBACxD;QAACQ;KAAO;IAGV,OAAOD,SAAS,0BACd,KAACV,eAAeiC,QAAQ;QAACC,OAAOT;kBAC9B,cAAA,KAACO;YAAiBG,OAAOb;sBAAab;;uBAGxC,KAACT,eAAeiC,QAAQ;QAACC,OAAOT;kBAC9B,cAAA,KAACxB;YACCmC,YAAYd;YACZF,WAAWxB,WACTwB,gCAEAH,UAAUZ,gBAAgB,CAACY,OAAO,EAClCP,SAAS,cAAc,CAACI,oGAEpBuB;WAEFhB;sBAEJ,cAAA,KAACW;gBAAiBG,OAAOb;0BAAab;;;;AAI9C,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useKeyboardInputTracker } from '../../hooks/useKeyboardInputTracker';\nimport { useSyncHTMLWithBaseVKUIClasses } from '../../hooks/useSyncHTMLWithBaseVKUIClasses';\nimport { useSyncHTMLWithTokens } from '../../hooks/useSyncHTMLWithTokens';\nimport { AppRootContext } from './AppRootContext';\nimport { AppRootStyleContainer } from './AppRootStyleContainer/AppRootStyleContainer';\nimport { ElementScrollController, GlobalScrollController } from './ScrollContext';\nimport { useSafeAreaInsetsMemo } from './helpers';\nimport type {\n AppRootLayout,\n AppRootMode,\n AppRootScroll,\n AppRootUserSelectMode,\n SafeAreaInsets,\n} from './types';\nimport styles from './AppRoot.module.css';\n\nconst layoutClassNames = {\n card: styles.layoutCard,\n plain: styles.layoutPlain,\n};\n\nexport interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Режим встраивания */\n mode?: AppRootMode;\n /**\n * - `global` (по умолчанию) — VKUI-приложение скроллится вместе со страницей.\n * - `contain` — VKUI-приложение живет в отдельной зоне и скроллится независимо внутри `AppRoot` (например, в модалке).\n *\n * Полезно при использовании `mode=\"embedded\"`.\n */\n scroll?: AppRootScroll;\n /**\n * см. документацию [mdn web docs | env#values](https://developer.mozilla.org/en-US/docs/Web/CSS/env#values).\n */\n safeAreaInsets?: SafeAreaInsets;\n /**\n * Кастомный root-элемент портала\n */\n portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null;\n /**\n * Отключает рендер всплывающих компонентов в отдельном контейнере\n */\n disablePortal?: boolean;\n /**\n * По умолчанию, mode=\"embedded\" переносит систему координат элементов с `position: fixed` на\n * свой контейнер через `transform: translate3d(0, 0, 0)`.\n *\n * Это поведение можно отключить с помощью этого параметра.\n */\n disableParentTransformForPositionFixedElements?: boolean;\n /**\n * Глобально задаёт тип оформления макета для компонентов\n * [Panel](https://vkcom.github.io/VKUI/#/Panel) и [Group](https://vkcom.github.io/VKUI/#/Group).\n */\n layout?: AppRootLayout;\n /**\n * Задаёт режим выбора текста (выделения текста) для всего приложения.\n * По умолчанию, если режим не задан, запрещает выбор текста в приложениях,\n * запущенных в webview (по значению свойства `isWebView` из [ConfigProvider](https://vkcom.github.io/VKUI/#/ConfigProvider)).\n *\n * - `enabled-with-pointer` – разрешает выбор текста, если устройство ввода типа `pointer` (например, `мышь`), в остальных случаях запрещает;\n * - `disabled` – запрещает выбор текста;\n * - `enabled` – разрешает выбор текста.\n *\n * @since 6.2.0\n */\n userSelectMode?: AppRootUserSelectMode;\n /*\n * По умолчанию в режиме `mode=\"full\"` VKUI в рантайме выставляет:\n * - класс .vkui на html элемент\n * - класс .vkui__root на элемент-контейнер, в который монтируется VKUI\n * С помощью этой опции такое поведение можно отключить.\n *\n * Для корректной работы SSR рекоммендуется выставлять эти классы самостоятельно\n * и отключить это поведение.\n */\n disableSettingVKUIClassesInRuntime?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/AppRoot\n */\nexport const AppRoot = ({\n children,\n mode = 'full',\n scroll = 'global',\n portalRoot,\n disablePortal = false,\n disableParentTransformForPositionFixedElements,\n safeAreaInsets: safeAreaInsetsProp,\n layout,\n userSelectMode,\n disableSettingVKUIClassesInRuntime,\n className,\n ...props\n}: AppRootProps): React.ReactNode => {\n const appRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const isKeyboardInputActiveRef = useKeyboardInputTracker();\n const safeAreaInsets = useSafeAreaInsetsMemo(safeAreaInsetsProp);\n\n const contextValue = React.useMemo(\n () => ({\n appRoot: appRootRef,\n portalRoot,\n safeAreaInsets,\n embedded: mode === 'embedded',\n mode,\n disablePortal,\n layout,\n get keyboardInput() {\n return isKeyboardInputActiveRef.current;\n },\n userSelectMode,\n }),\n [\n portalRoot,\n disablePortal,\n isKeyboardInputActiveRef,\n layout,\n mode,\n safeAreaInsets,\n userSelectMode,\n ],\n );\n\n /*\n * Вешаем класс токенов на html в режиме full.\n * Это необходимо, чтобы цвета html элемента и скроллбара соответствовали текущей цветовой схеме:\n * - фон html элемента виден, если пользователь оверскролит. Тогда возникает анимация bounce-эффекта и виден фон html элемента. Без токенов в черной теме будет выглядывать белый фон.\n * - цвет системного сколлбара зависит от color-sheme свойства, значение которого задётся токенами и должно быть выставлено именно на html элементе.\n * В режме SSR пользователи сами могу задать этот класс на html-элементе. главное, чтобы он соответствовал переданным platform и appearence свойствам.\n */\n useSyncHTMLWithTokens({ appRootRef, enable: mode === 'full' });\n /*\n * По умолчанию VKUI будет выставлять .vkui на html и .vkui__root на контейнере в режиме full.\n * В режиме embedded будет выставлять только .vkui__root и .vkui__root--embedded на контейнере.\n * В режиме partial мы классы не выставляем.\n */\n useSyncHTMLWithBaseVKUIClasses({\n appRootRef,\n mode,\n layout,\n enable: mode !== 'partial' && !disableSettingVKUIClassesInRuntime,\n });\n\n const ScrollController = React.useMemo(\n () => (scroll === 'contain' ? ElementScrollController : GlobalScrollController),\n [scroll],\n );\n\n return mode === 'partial' ? (\n <AppRootContext.Provider value={contextValue}>\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootContext.Provider>\n ) : (\n <AppRootContext.Provider value={contextValue}>\n <AppRootStyleContainer\n getRootRef={appRootRef}\n className={classNames(\n className,\n styles.host,\n layout && layoutClassNames[layout],\n mode === 'embedded' && !disableParentTransformForPositionFixedElements\n ? styles.transformForPositionFixedElements\n : undefined,\n )}\n {...props}\n >\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootStyleContainer>\n </AppRootContext.Provider>\n );\n};\n"],"names":["React","classNames","useKeyboardInputTracker","useSyncHTMLWithBaseVKUIClasses","useSyncHTMLWithTokens","AppRootContext","AppRootStyleContainer","ElementScrollController","GlobalScrollController","useSafeAreaInsetsMemo","layoutClassNames","card","plain","AppRoot","children","mode","scroll","portalRoot","disablePortal","disableParentTransformForPositionFixedElements","safeAreaInsets","safeAreaInsetsProp","layout","userSelectMode","disableSettingVKUIClassesInRuntime","className","props","appRootRef","useRef","isKeyboardInputActiveRef","contextValue","useMemo","appRoot","embedded","keyboardInput","current","enable","ScrollController","Provider","value","elRef","getRootRef","undefined"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,uBAAuB,QAAQ,yCAAsC;AAC9E,SAASC,8BAA8B,QAAQ,gDAA6C;AAC5F,SAASC,qBAAqB,QAAQ,uCAAoC;AAC1E,SAASC,cAAc,QAAQ,sBAAmB;AAClD,SAASC,qBAAqB,QAAQ,mDAAgD;AACtF,SAASC,uBAAuB,EAAEC,sBAAsB,QAAQ,qBAAkB;AAClF,SAASC,qBAAqB,QAAQ,eAAY;AAUlD,MAAMC,mBAAmB;IACvBC,IAAI;IACJC,KAAK;AACP;AA4DA;;CAEC,GACD,OAAO,MAAMC,UAAU;QAAC,EACtBC,QAAQ,EACRC,OAAO,MAAM,EACbC,SAAS,QAAQ,EACjBC,UAAU,EACVC,gBAAgB,KAAK,EACrBC,8CAA8C,EAC9CC,gBAAgBC,kBAAkB,EAClCC,MAAM,EACNC,cAAc,EACdC,kCAAkC,EAClCC,SAAS,EAEI,WADVC;QAXHZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;;IAGA,MAAME,aAAa3B,MAAM4B,MAAM,CAAwB;IAEvD,MAAMC,2BAA2B3B;IACjC,MAAMkB,iBAAiBX,sBAAsBY;IAE7C,MAAMS,eAAe9B,MAAM+B,OAAO,CAChC,IAAO,CAAA;YACLC,SAASL;YACTV;YACAG;YACAa,UAAUlB,SAAS;YACnBA;YACAG;YACAI;YACA,IAAIY,iBAAgB;gBAClB,OAAOL,yBAAyBM,OAAO;YACzC;YACAZ;QACF,CAAA,GACA;QACEN;QACAC;QACAW;QACAP;QACAP;QACAK;QACAG;KACD;IAGH;;;;;;GAMC,GACDnB,sBAAsB;QAAEuB;QAAYS,QAAQrB,SAAS;IAAO;IAC5D;;;;GAIC,GACDZ,+BAA+B;QAC7BwB;QACAZ;QACAO;QACAc,QAAQrB,SAAS,aAAa,CAACS;IACjC;IAEA,MAAMa,mBAAmBrC,MAAM+B,OAAO,CACpC,IAAOf,WAAW,YAAYT,0BAA0BC,wBACxD;QAACQ;KAAO;IAGV,OAAOD,SAAS,0BACd,KAACV,eAAeiC,QAAQ;QAACC,OAAOT;kBAC9B,cAAA,KAACO;YAAiBG,OAAOb;sBAAab;;uBAGxC,KAACT,eAAeiC,QAAQ;QAACC,OAAOT;kBAC9B,cAAA,KAACxB;YACCmC,YAAYd;YACZF,WAAWxB,WACTwB,gCAEAH,UAAUZ,gBAAgB,CAACY,OAAO,EAClCP,SAAS,cAAc,CAACI,oGAEpBuB;WAEFhB;sBAEJ,cAAA,KAACW;gBAAiBG,OAAOb;0BAAab;;;;AAI9C,EAAE"}
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { type AppRootUserSelectMode, type SafeAreaInsets } from './types';
3
3
  export interface AppRootContextInterface {
4
- appRoot: React.RefObject<HTMLElement>;
5
- portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;
4
+ appRoot: React.RefObject<HTMLElement | null>;
5
+ portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null;
6
6
  safeAreaInsets?: SafeAreaInsets;
7
7
  embedded: boolean;
8
8
  mode: 'partial' | 'embedded' | 'full';
@@ -1 +1 @@
1
- {"version":3,"file":"AppRootContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRootContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC/D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,uBAQ5C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,uBAAuB,CACY,CAAC"}
1
+ {"version":3,"file":"AppRootContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRootContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7C,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACtE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,uBAQ5C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,uBAAuB,CACY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type AppRootUserSelectMode, type SafeAreaInsets } from './types';\n\nexport interface AppRootContextInterface {\n appRoot: React.RefObject<HTMLElement>;\n portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;\n safeAreaInsets?: SafeAreaInsets;\n embedded: boolean;\n mode: 'partial' | 'embedded' | 'full';\n keyboardInput: boolean;\n disablePortal: boolean;\n layout?: 'card' | 'plain';\n userSelectMode?: AppRootUserSelectMode;\n}\n\n/**\n * Вынесен в константу, чтобы можно было в тестах создавать свой контекст и сливать перед этим значения по-умолчанию\n *\n * > Note: не смог убрать из покрытия через 'istanbul ignore next'.\n */\nexport const DEFAULT_APP_ROOT_CONTEXT_VALUE: AppRootContextInterface = {\n appRoot: React.createRef(),\n mode: 'full',\n portalRoot: null,\n safeAreaInsets: undefined,\n embedded: false,\n keyboardInput: false,\n disablePortal: false,\n};\n\nexport const AppRootContext: React.Context<AppRootContextInterface> =\n React.createContext<AppRootContextInterface>(DEFAULT_APP_ROOT_CONTEXT_VALUE);\n"],"names":["React","DEFAULT_APP_ROOT_CONTEXT_VALUE","appRoot","createRef","mode","portalRoot","safeAreaInsets","undefined","embedded","keyboardInput","disablePortal","AppRootContext","createContext"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAe/B;;;;CAIC,GACD,OAAO,MAAMC,iCAA0D;IACrEC,SAASF,MAAMG,SAAS;IACxBC,MAAM;IACNC,YAAY;IACZC,gBAAgBC;IAChBC,UAAU;IACVC,eAAe;IACfC,eAAe;AACjB,EAAE;AAEF,OAAO,MAAMC,iBACXX,MAAMY,aAAa,CAA0BX,gCAAgC"}
1
+ {"version":3,"sources":["../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type AppRootUserSelectMode, type SafeAreaInsets } from './types';\n\nexport interface AppRootContextInterface {\n appRoot: React.RefObject<HTMLElement | null>;\n portalRoot?: HTMLElement | React.RefObject<HTMLElement | null> | null;\n safeAreaInsets?: SafeAreaInsets;\n embedded: boolean;\n mode: 'partial' | 'embedded' | 'full';\n keyboardInput: boolean;\n disablePortal: boolean;\n layout?: 'card' | 'plain';\n userSelectMode?: AppRootUserSelectMode;\n}\n\n/**\n * Вынесен в константу, чтобы можно было в тестах создавать свой контекст и сливать перед этим значения по-умолчанию\n *\n * > Note: не смог убрать из покрытия через 'istanbul ignore next'.\n */\nexport const DEFAULT_APP_ROOT_CONTEXT_VALUE: AppRootContextInterface = {\n appRoot: React.createRef(),\n mode: 'full',\n portalRoot: null,\n safeAreaInsets: undefined,\n embedded: false,\n keyboardInput: false,\n disablePortal: false,\n};\n\nexport const AppRootContext: React.Context<AppRootContextInterface> =\n React.createContext<AppRootContextInterface>(DEFAULT_APP_ROOT_CONTEXT_VALUE);\n"],"names":["React","DEFAULT_APP_ROOT_CONTEXT_VALUE","appRoot","createRef","mode","portalRoot","safeAreaInsets","undefined","embedded","keyboardInput","disablePortal","AppRootContext","createContext"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAe/B;;;;CAIC,GACD,OAAO,MAAMC,iCAA0D;IACrEC,SAASF,MAAMG,SAAS;IACxBC,MAAM;IACNC,YAAY;IACZC,gBAAgBC;IAChBC,UAAU;IACVC,eAAe;IACfC,eAAe;AACjB,EAAE;AAEF,OAAO,MAAMC,iBACXX,MAAMY,aAAa,CAA0BX,gCAAgC"}
@@ -8,7 +8,7 @@ export interface AppRootPortalProps extends HasChildren {
8
8
  *
9
9
  * По умолчанию в качестве портала будет использован `document.body`
10
10
  */
11
- usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement> | null;
11
+ usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement | null> | null;
12
12
  className?: string;
13
13
  }
14
14
  export declare const AppRootPortal: ({ children, usePortal, className, }: AppRootPortalProps) => React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"AppRootPortal.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRootPortal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,wCAIvB,kBAAkB,KAAG,KAAK,CAAC,SAuB7B,CAAC"}
1
+ {"version":3,"file":"AppRootPortal.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/AppRootPortal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,wCAIvB,kBAAkB,KAAG,KAAK,CAAC,SAuB7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AppRoot/AppRootPortal.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useColorScheme } from '../../hooks/useColorScheme';\nimport { createPortal } from '../../lib/createPortal';\nimport { useDOM } from '../../lib/dom';\nimport { isRefObject } from '../../lib/isRefObject';\nimport type { HasChildren } from '../../types';\nimport { ColorSchemeProvider } from '../ColorSchemeProvider/ColorSchemeProvider';\nimport { AppRootContext, type AppRootContextInterface } from './AppRootContext';\nimport { AppRootStyleContainer } from './AppRootStyleContainer/AppRootStyleContainer';\n\nexport interface AppRootPortalProps extends HasChildren {\n /**\n * - При передаче `true` в качестве портала будет использован `portalRoot`\n * из контекста `AppRoot` если он передан в `AppRoot`, иначе `document.body`.\n * - При передаче элемента будут игнорироваться `portalRoot` и `disablePortal` из контекста `AppRoot`.\n *\n * По умолчанию в качестве портала будет использован `document.body`\n */\n usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement> | null;\n className?: string;\n}\n\nexport const AppRootPortal = ({\n children,\n usePortal,\n className,\n}: AppRootPortalProps): React.ReactNode => {\n const { mode, disablePortal: disableCreatePortalInGlobalPortalRoot } =\n React.useContext(AppRootContext);\n const colorScheme = useColorScheme();\n\n const canUsePortal = shouldUsePortal(\n usePortal,\n mode,\n Boolean(disableCreatePortalInGlobalPortalRoot),\n );\n\n const portalContainer = usePortalContainer(usePortal);\n\n if (canUsePortal && portalContainer) {\n return createPortal(\n <ColorSchemeProvider value={colorScheme}>\n <AppRootStyleContainer className={className}>{children}</AppRootStyleContainer>\n </ColorSchemeProvider>,\n portalContainer,\n );\n }\n\n return children;\n};\n\nfunction shouldUsePortal(\n usePortal: AppRootPortalProps['usePortal'],\n mode: AppRootContextInterface['mode'],\n disableCreatePortalInGlobalPortalRoot: boolean,\n) {\n if (usePortal === undefined) {\n return disableCreatePortalInGlobalPortalRoot === false && mode !== 'full';\n }\n\n if (typeof usePortal !== 'boolean') {\n return true;\n }\n\n return disableCreatePortalInGlobalPortalRoot === false && usePortal === true;\n}\n\nfunction usePortalContainer(usePortal: AppRootPortalProps['usePortal']): HTMLElement | null {\n const { portalRoot: portalRootFromContext } = React.useContext(AppRootContext);\n\n const { document } = useDOM();\n\n if (usePortal && typeof usePortal !== 'boolean') {\n return isRefObject(usePortal) ? usePortal.current : usePortal;\n }\n\n const resolvedPortalFromContext = isRefObject(portalRootFromContext)\n ? portalRootFromContext.current\n : portalRootFromContext;\n // если portalRoot не передали через AppRoot, то мы используем body\n // мы можем использовать body как портал,\n // так как все стили передаются вместе с AppRootStyleContainer\n const portalRoot = resolvedPortalFromContext || document?.body || null;\n return portalRoot;\n}\n"],"names":["React","useColorScheme","createPortal","useDOM","isRefObject","ColorSchemeProvider","AppRootContext","AppRootStyleContainer","AppRootPortal","children","usePortal","className","mode","disablePortal","disableCreatePortalInGlobalPortalRoot","useContext","colorScheme","canUsePortal","shouldUsePortal","Boolean","portalContainer","usePortalContainer","value","undefined","portalRoot","portalRootFromContext","document","current","resolvedPortalFromContext","body"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,MAAM,QAAQ,mBAAgB;AACvC,SAASC,WAAW,QAAQ,2BAAwB;AAEpD,SAASC,mBAAmB,QAAQ,gDAA6C;AACjF,SAASC,cAAc,QAAsC,sBAAmB;AAChF,SAASC,qBAAqB,QAAQ,mDAAgD;AActF,OAAO,MAAMC,gBAAgB,CAAC,EAC5BC,QAAQ,EACRC,SAAS,EACTC,SAAS,EACU;IACnB,MAAM,EAAEC,IAAI,EAAEC,eAAeC,qCAAqC,EAAE,GAClEd,MAAMe,UAAU,CAACT;IACnB,MAAMU,cAAcf;IAEpB,MAAMgB,eAAeC,gBACnBR,WACAE,MACAO,QAAQL;IAGV,MAAMM,kBAAkBC,mBAAmBX;IAE3C,IAAIO,gBAAgBG,iBAAiB;QACnC,OAAOlB,2BACL,KAACG;YAAoBiB,OAAON;sBAC1B,cAAA,KAACT;gBAAsBI,WAAWA;0BAAYF;;YAEhDW;IAEJ;IAEA,OAAOX;AACT,EAAE;AAEF,SAASS,gBACPR,SAA0C,EAC1CE,IAAqC,EACrCE,qCAA8C;IAE9C,IAAIJ,cAAca,WAAW;QAC3B,OAAOT,0CAA0C,SAASF,SAAS;IACrE;IAEA,IAAI,OAAOF,cAAc,WAAW;QAClC,OAAO;IACT;IAEA,OAAOI,0CAA0C,SAASJ,cAAc;AAC1E;AAEA,SAASW,mBAAmBX,SAA0C;IACpE,MAAM,EAAEc,YAAYC,qBAAqB,EAAE,GAAGzB,MAAMe,UAAU,CAACT;IAE/D,MAAM,EAAEoB,QAAQ,EAAE,GAAGvB;IAErB,IAAIO,aAAa,OAAOA,cAAc,WAAW;QAC/C,OAAON,YAAYM,aAAaA,UAAUiB,OAAO,GAAGjB;IACtD;IAEA,MAAMkB,4BAA4BxB,YAAYqB,yBAC1CA,sBAAsBE,OAAO,GAC7BF;IACJ,mEAAmE;IACnE,yCAAyC;IACzC,8DAA8D;IAC9D,MAAMD,aAAaI,8BAA6BF,qBAAAA,+BAAAA,SAAUG,IAAI,KAAI;IAClE,OAAOL;AACT"}
1
+ {"version":3,"sources":["../../../src/components/AppRoot/AppRootPortal.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useColorScheme } from '../../hooks/useColorScheme';\nimport { createPortal } from '../../lib/createPortal';\nimport { useDOM } from '../../lib/dom';\nimport { isRefObject } from '../../lib/isRefObject';\nimport type { HasChildren } from '../../types';\nimport { ColorSchemeProvider } from '../ColorSchemeProvider/ColorSchemeProvider';\nimport { AppRootContext, type AppRootContextInterface } from './AppRootContext';\nimport { AppRootStyleContainer } from './AppRootStyleContainer/AppRootStyleContainer';\n\nexport interface AppRootPortalProps extends HasChildren {\n /**\n * - При передаче `true` в качестве портала будет использован `portalRoot`\n * из контекста `AppRoot` если он передан в `AppRoot`, иначе `document.body`.\n * - При передаче элемента будут игнорироваться `portalRoot` и `disablePortal` из контекста `AppRoot`.\n *\n * По умолчанию в качестве портала будет использован `document.body`\n */\n usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement | null> | null;\n className?: string;\n}\n\nexport const AppRootPortal = ({\n children,\n usePortal,\n className,\n}: AppRootPortalProps): React.ReactNode => {\n const { mode, disablePortal: disableCreatePortalInGlobalPortalRoot } =\n React.useContext(AppRootContext);\n const colorScheme = useColorScheme();\n\n const canUsePortal = shouldUsePortal(\n usePortal,\n mode,\n Boolean(disableCreatePortalInGlobalPortalRoot),\n );\n\n const portalContainer = usePortalContainer(usePortal);\n\n if (canUsePortal && portalContainer) {\n return createPortal(\n <ColorSchemeProvider value={colorScheme}>\n <AppRootStyleContainer className={className}>{children}</AppRootStyleContainer>\n </ColorSchemeProvider>,\n portalContainer,\n );\n }\n\n return children;\n};\n\nfunction shouldUsePortal(\n usePortal: AppRootPortalProps['usePortal'],\n mode: AppRootContextInterface['mode'],\n disableCreatePortalInGlobalPortalRoot: boolean,\n) {\n if (usePortal === undefined) {\n return disableCreatePortalInGlobalPortalRoot === false && mode !== 'full';\n }\n\n if (typeof usePortal !== 'boolean') {\n return true;\n }\n\n return disableCreatePortalInGlobalPortalRoot === false && usePortal === true;\n}\n\nfunction usePortalContainer(usePortal: AppRootPortalProps['usePortal']): HTMLElement | null {\n const { portalRoot: portalRootFromContext } = React.useContext(AppRootContext);\n\n const { document } = useDOM();\n\n if (usePortal && typeof usePortal !== 'boolean') {\n return isRefObject(usePortal) ? usePortal.current : usePortal;\n }\n\n const resolvedPortalFromContext = isRefObject(portalRootFromContext)\n ? portalRootFromContext.current\n : portalRootFromContext;\n // если portalRoot не передали через AppRoot, то мы используем body\n // мы можем использовать body как портал,\n // так как все стили передаются вместе с AppRootStyleContainer\n const portalRoot = resolvedPortalFromContext || document?.body || null;\n return portalRoot;\n}\n"],"names":["React","useColorScheme","createPortal","useDOM","isRefObject","ColorSchemeProvider","AppRootContext","AppRootStyleContainer","AppRootPortal","children","usePortal","className","mode","disablePortal","disableCreatePortalInGlobalPortalRoot","useContext","colorScheme","canUsePortal","shouldUsePortal","Boolean","portalContainer","usePortalContainer","value","undefined","portalRoot","portalRootFromContext","document","current","resolvedPortalFromContext","body"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,MAAM,QAAQ,mBAAgB;AACvC,SAASC,WAAW,QAAQ,2BAAwB;AAEpD,SAASC,mBAAmB,QAAQ,gDAA6C;AACjF,SAASC,cAAc,QAAsC,sBAAmB;AAChF,SAASC,qBAAqB,QAAQ,mDAAgD;AActF,OAAO,MAAMC,gBAAgB,CAAC,EAC5BC,QAAQ,EACRC,SAAS,EACTC,SAAS,EACU;IACnB,MAAM,EAAEC,IAAI,EAAEC,eAAeC,qCAAqC,EAAE,GAClEd,MAAMe,UAAU,CAACT;IACnB,MAAMU,cAAcf;IAEpB,MAAMgB,eAAeC,gBACnBR,WACAE,MACAO,QAAQL;IAGV,MAAMM,kBAAkBC,mBAAmBX;IAE3C,IAAIO,gBAAgBG,iBAAiB;QACnC,OAAOlB,2BACL,KAACG;YAAoBiB,OAAON;sBAC1B,cAAA,KAACT;gBAAsBI,WAAWA;0BAAYF;;YAEhDW;IAEJ;IAEA,OAAOX;AACT,EAAE;AAEF,SAASS,gBACPR,SAA0C,EAC1CE,IAAqC,EACrCE,qCAA8C;IAE9C,IAAIJ,cAAca,WAAW;QAC3B,OAAOT,0CAA0C,SAASF,SAAS;IACrE;IAEA,IAAI,OAAOF,cAAc,WAAW;QAClC,OAAO;IACT;IAEA,OAAOI,0CAA0C,SAASJ,cAAc;AAC1E;AAEA,SAASW,mBAAmBX,SAA0C;IACpE,MAAM,EAAEc,YAAYC,qBAAqB,EAAE,GAAGzB,MAAMe,UAAU,CAACT;IAE/D,MAAM,EAAEoB,QAAQ,EAAE,GAAGvB;IAErB,IAAIO,aAAa,OAAOA,cAAc,WAAW;QAC/C,OAAON,YAAYM,aAAaA,UAAUiB,OAAO,GAAGjB;IACtD;IAEA,MAAMkB,4BAA4BxB,YAAYqB,yBAC1CA,sBAAsBE,OAAO,GAC7BF;IACJ,mEAAmE;IACnE,yCAAyC;IACzC,8DAA8D;IAC9D,MAAMD,aAAaI,8BAA6BF,qBAAAA,+BAAAA,SAAUG,IAAI,KAAI;IAClE,OAAOL;AACT"}
@@ -22,7 +22,7 @@ export interface ScrollContextInterface {
22
22
  export declare const ScrollContext: React.Context<ScrollContextInterface>;
23
23
  export declare const useScroll: () => ScrollContextInterface;
24
24
  export interface ScrollControllerProps extends HasChildren {
25
- elRef: React.RefObject<HTMLElement>;
25
+ elRef: React.RefObject<HTMLElement | null>;
26
26
  }
27
27
  export declare const GlobalScrollController: ({ children }: ScrollControllerProps) => React.ReactNode;
28
28
  export declare const ElementScrollController: ({ elRef, children, }: ScrollControllerProps) => React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD,wBAAwB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAM5D,CAAC;AAEL,eAAO,MAAM,SAAS,QAAO,sBAAyD,CAAC;AA0BvF,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,sBAAsB,iBAAkB,qBAAqB,KAAG,KAAK,CAAC,SAwElF,CAAC;AAEF,eAAO,MAAM,uBAAuB,yBAGjC,qBAAqB,KAAG,KAAK,CAAC,SA4EhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,yBAAqB,IAW9C,CAAC"}
1
+ {"version":3,"file":"ScrollContext.d.ts","sourceRoot":"","sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD;;OAEG;IACH,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjD,wBAAwB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;CAC7D;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAM5D,CAAC;AAEL,eAAO,MAAM,SAAS,QAAO,sBAAyD,CAAC;AA0BvF,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,sBAAsB,iBAAkB,qBAAqB,KAAG,KAAK,CAAC,SAwElF,CAAC;AAEF,eAAO,MAAM,uBAAuB,yBAGjC,qBAAqB,KAAG,KAAK,CAAC,SA4EhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,yBAAqB,IAW9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useCounter } from '../../hooks/useCounter';\nimport { useDOM } from '../../lib/dom';\nimport type { HasChildren } from '../../types';\n\nconst clearDisableScrollStyle = (node: HTMLElement) => {\n Object.assign(node.style, {\n position: '',\n top: '',\n left: '',\n right: '',\n overscrollBehavior: '',\n overflowY: '',\n overflowX: '',\n });\n};\n\nconst getPageYOffsetWithoutKeyboardHeight = (window: Window) => {\n // Note: здесь расчёт на то, что `clientHeight` равен `window.innerHeight`.\n // Это достигается тем, что тегу `html` задали`height: 100%` и у него нет отступов сверху и снизу. Если есть отступы,\n // то надо задать `box-sizing: border-box`, чтобы они не учитывались.\n const diffOfClientHeightAndViewportHeight =\n window.document.documentElement.clientHeight - window.innerHeight;\n return window.pageYOffset - diffOfClientHeightAndViewportHeight;\n};\n\nexport type GetScrollOptions = {\n compensateKeyboardHeight?: boolean;\n};\n\nexport interface ScrollContextInterface {\n getScroll: (this: void, options?: GetScrollOptions) => { x: number; y: number };\n scrollTo: (this: void, x?: number, y?: number) => void;\n /**\n * Увеличивает счетчик блокировки прокрутки\n */\n incrementScrollLockCounter: (this: void) => void;\n /**\n * Уменьшает счетчик блокировки прокрутки\n */\n decrementScrollLockCounter: (this: void) => void;\n beforeScrollLockFnSetRef?: React.RefObject<Set<() => void>>;\n}\n\nexport const ScrollContext: React.Context<ScrollContextInterface> =\n React.createContext<ScrollContextInterface>({\n getScroll: () => ({ x: 0, y: 0 }),\n scrollTo: noop,\n incrementScrollLockCounter: noop,\n decrementScrollLockCounter: noop,\n });\n\nexport const useScroll = (): ScrollContextInterface => React.useContext(ScrollContext);\n\n/**\n * Управляет блокировкой окна в зависимости от внутреннего счетчика.\n * Если счетчик больше нуля, требуется заблокировать прокрутку\n */\nfunction useScrollLockController(enableScrollLock: () => void, disableScrollLock: () => void) {\n const [count, { increment: incrementScrollLockCounter, decrement: decrementScrollLockCounter }] =\n useCounter(0);\n\n const needLockScroll = count > 0;\n\n React.useEffect(() => {\n if (needLockScroll) {\n enableScrollLock();\n } else {\n disableScrollLock();\n }\n }, [needLockScroll, enableScrollLock, disableScrollLock]);\n\n return {\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n };\n}\n\nexport interface ScrollControllerProps extends HasChildren {\n elRef: React.RefObject<HTMLElement>;\n}\n\nexport const GlobalScrollController = ({ children }: ScrollControllerProps): React.ReactNode => {\n const { window, document } = useDOM();\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n (options = { compensateKeyboardHeight: true }) => ({\n x: window!.pageXOffset,\n y: options.compensateKeyboardHeight\n ? getPageYOffsetWithoutKeyboardHeight(window!)\n : window!.pageYOffset,\n }),\n [window],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n // Some iOS versions do not normalize scroll — do it manually.\n window!.scrollTo(\n x ? clamp(x, 0, document!.body.scrollWidth - window!.innerWidth) : 0,\n y ? clamp(y, 0, document!.body.scrollHeight - window!.innerHeight) : 0,\n );\n },\n [document, window],\n );\n\n const enableScrollLock = React.useCallback(() => {\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = window!.pageYOffset;\n const scrollX = window!.pageXOffset;\n const overflowY = window!.innerWidth > document!.documentElement.clientWidth ? 'scroll' : '';\n const overflowX = window!.innerHeight > document!.documentElement.clientHeight ? 'scroll' : '';\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: 'none' });\n Object.assign(document!.body.style, {\n position: 'fixed',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overscrollBehavior: 'none',\n overflowY,\n overflowX,\n });\n }, [document, window]);\n\n const disableScrollLock = React.useCallback(() => {\n const scrollY = document!.body.style.top;\n const scrollX = document!.body.style.left;\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: '' });\n clearDisableScrollStyle(document!.body);\n window!.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [document, window]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef: beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\nexport const ElementScrollController = ({\n elRef,\n children,\n}: ScrollControllerProps): React.ReactNode => {\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n () => ({\n x: elRef.current?.scrollLeft ?? 0,\n y: elRef.current?.scrollTop ?? 0,\n }),\n [elRef],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n const el = elRef.current;\n // Some iOS versions do not normalize scroll — do it manually.\n el?.scrollTo(\n x ? clamp(x, 0, el.scrollWidth - el.clientWidth) : 0,\n y ? clamp(y, 0, el.scrollHeight - el.clientHeight) : 0,\n );\n },\n [elRef],\n );\n\n const enableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = el.scrollTop;\n const scrollX = el.scrollLeft;\n const overflowY = el.scrollWidth > el.clientWidth ? 'scroll' : '';\n const overflowX = el.scrollHeight > el.clientHeight ? 'scroll' : '';\n\n Object.assign(el.style, {\n position: 'absolute',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overflowY,\n overflowX,\n });\n }, [elRef]);\n\n const disableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n\n const scrollY = el.style.top;\n const scrollX = el.style.left;\n\n clearDisableScrollStyle(el);\n el.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [elRef]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\n/**\n * Блокирует прокрутку окна\n *\n * @param enabled - если false то не будет блокировать\n */\nexport const useScrollLock = (enabled = true): void => {\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScroll();\n\n React.useEffect(() => {\n if (enabled) {\n incrementScrollLockCounter();\n return decrementScrollLockCounter;\n }\n\n return noop;\n }, [enabled, incrementScrollLockCounter, decrementScrollLockCounter]);\n};\n"],"names":["React","noop","clamp","useCounter","useDOM","clearDisableScrollStyle","node","Object","assign","style","position","top","left","right","overscrollBehavior","overflowY","overflowX","getPageYOffsetWithoutKeyboardHeight","window","diffOfClientHeightAndViewportHeight","document","documentElement","clientHeight","innerHeight","pageYOffset","ScrollContext","createContext","getScroll","x","y","scrollTo","incrementScrollLockCounter","decrementScrollLockCounter","useScroll","useContext","useScrollLockController","enableScrollLock","disableScrollLock","count","increment","decrement","needLockScroll","useEffect","GlobalScrollController","children","beforeScrollLockFnSetRef","useRef","Set","useCallback","options","compensateKeyboardHeight","pageXOffset","body","scrollWidth","innerWidth","scrollHeight","current","forEach","fn","scrollY","scrollX","clientWidth","parseInt","scrollController","useMemo","Provider","value","ElementScrollController","elRef","scrollLeft","scrollTop","el","useScrollLock","enabled"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/AppRoot/ScrollContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useCounter } from '../../hooks/useCounter';\nimport { useDOM } from '../../lib/dom';\nimport type { HasChildren } from '../../types';\n\nconst clearDisableScrollStyle = (node: HTMLElement) => {\n Object.assign(node.style, {\n position: '',\n top: '',\n left: '',\n right: '',\n overscrollBehavior: '',\n overflowY: '',\n overflowX: '',\n });\n};\n\nconst getPageYOffsetWithoutKeyboardHeight = (window: Window) => {\n // Note: здесь расчёт на то, что `clientHeight` равен `window.innerHeight`.\n // Это достигается тем, что тегу `html` задали`height: 100%` и у него нет отступов сверху и снизу. Если есть отступы,\n // то надо задать `box-sizing: border-box`, чтобы они не учитывались.\n const diffOfClientHeightAndViewportHeight =\n window.document.documentElement.clientHeight - window.innerHeight;\n return window.pageYOffset - diffOfClientHeightAndViewportHeight;\n};\n\nexport type GetScrollOptions = {\n compensateKeyboardHeight?: boolean;\n};\n\nexport interface ScrollContextInterface {\n getScroll: (this: void, options?: GetScrollOptions) => { x: number; y: number };\n scrollTo: (this: void, x?: number, y?: number) => void;\n /**\n * Увеличивает счетчик блокировки прокрутки\n */\n incrementScrollLockCounter: (this: void) => void;\n /**\n * Уменьшает счетчик блокировки прокрутки\n */\n decrementScrollLockCounter: (this: void) => void;\n beforeScrollLockFnSetRef?: React.RefObject<Set<() => void>>;\n}\n\nexport const ScrollContext: React.Context<ScrollContextInterface> =\n React.createContext<ScrollContextInterface>({\n getScroll: () => ({ x: 0, y: 0 }),\n scrollTo: noop,\n incrementScrollLockCounter: noop,\n decrementScrollLockCounter: noop,\n });\n\nexport const useScroll = (): ScrollContextInterface => React.useContext(ScrollContext);\n\n/**\n * Управляет блокировкой окна в зависимости от внутреннего счетчика.\n * Если счетчик больше нуля, требуется заблокировать прокрутку\n */\nfunction useScrollLockController(enableScrollLock: () => void, disableScrollLock: () => void) {\n const [count, { increment: incrementScrollLockCounter, decrement: decrementScrollLockCounter }] =\n useCounter(0);\n\n const needLockScroll = count > 0;\n\n React.useEffect(() => {\n if (needLockScroll) {\n enableScrollLock();\n } else {\n disableScrollLock();\n }\n }, [needLockScroll, enableScrollLock, disableScrollLock]);\n\n return {\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n };\n}\n\nexport interface ScrollControllerProps extends HasChildren {\n elRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const GlobalScrollController = ({ children }: ScrollControllerProps): React.ReactNode => {\n const { window, document } = useDOM();\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n (options = { compensateKeyboardHeight: true }) => ({\n x: window!.pageXOffset,\n y: options.compensateKeyboardHeight\n ? getPageYOffsetWithoutKeyboardHeight(window!)\n : window!.pageYOffset,\n }),\n [window],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n // Some iOS versions do not normalize scroll — do it manually.\n window!.scrollTo(\n x ? clamp(x, 0, document!.body.scrollWidth - window!.innerWidth) : 0,\n y ? clamp(y, 0, document!.body.scrollHeight - window!.innerHeight) : 0,\n );\n },\n [document, window],\n );\n\n const enableScrollLock = React.useCallback(() => {\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = window!.pageYOffset;\n const scrollX = window!.pageXOffset;\n const overflowY = window!.innerWidth > document!.documentElement.clientWidth ? 'scroll' : '';\n const overflowX = window!.innerHeight > document!.documentElement.clientHeight ? 'scroll' : '';\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: 'none' });\n Object.assign(document!.body.style, {\n position: 'fixed',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overscrollBehavior: 'none',\n overflowY,\n overflowX,\n });\n }, [document, window]);\n\n const disableScrollLock = React.useCallback(() => {\n const scrollY = document!.body.style.top;\n const scrollX = document!.body.style.left;\n\n Object.assign(document!.documentElement.style, { overscrollBehavior: '' });\n clearDisableScrollStyle(document!.body);\n window!.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [document, window]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef: beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\nexport const ElementScrollController = ({\n elRef,\n children,\n}: ScrollControllerProps): React.ReactNode => {\n const beforeScrollLockFnSetRef = React.useRef<Set<() => void>>(new Set());\n\n const getScroll = React.useCallback<ScrollContextInterface['getScroll']>(\n () => ({\n x: elRef.current?.scrollLeft ?? 0,\n y: elRef.current?.scrollTop ?? 0,\n }),\n [elRef],\n );\n const scrollTo = React.useCallback<ScrollContextInterface['scrollTo']>(\n (x = 0, y = 0) => {\n const el = elRef.current;\n // Some iOS versions do not normalize scroll — do it manually.\n el?.scrollTo(\n x ? clamp(x, 0, el.scrollWidth - el.clientWidth) : 0,\n y ? clamp(y, 0, el.scrollHeight - el.clientHeight) : 0,\n );\n },\n [elRef],\n );\n\n const enableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n beforeScrollLockFnSetRef.current.forEach((fn) => {\n fn();\n });\n\n const scrollY = el.scrollTop;\n const scrollX = el.scrollLeft;\n const overflowY = el.scrollWidth > el.clientWidth ? 'scroll' : '';\n const overflowX = el.scrollHeight > el.clientHeight ? 'scroll' : '';\n\n Object.assign(el.style, {\n position: 'absolute',\n top: `-${scrollY}px`,\n left: `-${scrollX}px`,\n right: '0',\n overflowY,\n overflowX,\n });\n }, [elRef]);\n\n const disableScrollLock = React.useCallback(() => {\n const el = elRef.current;\n if (!el) {\n return;\n }\n\n const scrollY = el.style.top;\n const scrollX = el.style.left;\n\n clearDisableScrollStyle(el);\n el.scrollTo(-parseInt(scrollX || '0'), -parseInt(scrollY || '0'));\n }, [elRef]);\n\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScrollLockController(\n enableScrollLock,\n disableScrollLock,\n );\n\n const scrollController = React.useMemo<ScrollContextInterface>(\n () => ({\n getScroll,\n scrollTo,\n incrementScrollLockCounter,\n decrementScrollLockCounter,\n beforeScrollLockFnSetRef,\n }),\n [getScroll, scrollTo, incrementScrollLockCounter, decrementScrollLockCounter],\n );\n\n return <ScrollContext.Provider value={scrollController}>{children}</ScrollContext.Provider>;\n};\n\n/**\n * Блокирует прокрутку окна\n *\n * @param enabled - если false то не будет блокировать\n */\nexport const useScrollLock = (enabled = true): void => {\n const { incrementScrollLockCounter, decrementScrollLockCounter } = useScroll();\n\n React.useEffect(() => {\n if (enabled) {\n incrementScrollLockCounter();\n return decrementScrollLockCounter;\n }\n\n return noop;\n }, [enabled, incrementScrollLockCounter, decrementScrollLockCounter]);\n};\n"],"names":["React","noop","clamp","useCounter","useDOM","clearDisableScrollStyle","node","Object","assign","style","position","top","left","right","overscrollBehavior","overflowY","overflowX","getPageYOffsetWithoutKeyboardHeight","window","diffOfClientHeightAndViewportHeight","document","documentElement","clientHeight","innerHeight","pageYOffset","ScrollContext","createContext","getScroll","x","y","scrollTo","incrementScrollLockCounter","decrementScrollLockCounter","useScroll","useContext","useScrollLockController","enableScrollLock","disableScrollLock","count","increment","decrement","needLockScroll","useEffect","GlobalScrollController","children","beforeScrollLockFnSetRef","useRef","Set","useCallback","options","compensateKeyboardHeight","pageXOffset","body","scrollWidth","innerWidth","scrollHeight","current","forEach","fn","scrollY","scrollX","clientWidth","parseInt","scrollController","useMemo","Provider","value","ElementScrollController","elRef","scrollLeft","scrollTop","el","useScrollLock","enabled"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import { type RootComponentProps } from '../RootComponent/RootComponent';
2
3
  export interface AspectRatioProps extends Omit<RootComponentProps<HTMLElement>, 'baseClassName'> {
3
4
  className?: string;
@@ -6,9 +7,12 @@ export interface AspectRatioProps extends Omit<RootComponentProps<HTMLElement>,
6
7
  */
7
8
  mode?: 'stretch' | 'none';
8
9
  /**
9
- * Например 16 / 9, 4 / 3, 1920 / 1080
10
+ * Например:
11
+ * - в виде числа: 16 / 9, 4 / 3, 1920 / 1080,
12
+ * - в виде css переменной: `var(--css-aspect-ratio-var)`
13
+ * - в виде сложного выражения: `calc(<какие-то вычисления>)`
10
14
  */
11
- ratio: number;
15
+ ratio: number | string;
12
16
  }
13
17
  /**
14
18
  * `AspectRatio` позволяет поддерживать постоянное соотношение ширины и высоты.
@@ -17,5 +21,5 @@ export interface AspectRatioProps extends Omit<RootComponentProps<HTMLElement>,
17
21
  * @since 5.5.0
18
22
  * @see https://vkcom.github.io/VKUI/#/AspectRatio
19
23
  */
20
- export declare function AspectRatio({ ratio, mode, ...props }: AspectRatioProps): JSX.Element;
24
+ export declare function AspectRatio({ ratio, mode, ...props }: AspectRatioProps): React.JSX.Element;
21
25
  //# sourceMappingURL=AspectRatio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AspectRatio.d.ts","sourceRoot":"","sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGxF,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,IAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAYhG"}
1
+ {"version":3,"file":"AspectRatio.d.ts","sourceRoot":"","sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGxF,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAYtC"}
@@ -16,7 +16,7 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
16
16
  "mode"
17
17
  ]);
18
18
  const style = {
19
- '--vkui_internal--aspect_ratio': String(ratio)
19
+ '--vkui_internal--aspect_ratio': typeof ratio === 'number' ? String(ratio) : ratio
20
20
  };
21
21
  return /*#__PURE__*/ _jsx(RootComponent, _object_spread({
22
22
  baseClassName: classNames("vkuiAspectRatio__host", mode === 'stretch' && "vkuiAspectRatio__modeStretch"),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent';\nimport styles from './AspectRatio.module.css';\n\nexport interface AspectRatioProps extends Omit<RootComponentProps<HTMLElement>, 'baseClassName'> {\n className?: string;\n /**\n * По умолчанию, вложенный контент будет растягиваться и заполнять весь блок.\n */\n mode?: 'stretch' | 'none';\n /**\n * Например 16 / 9, 4 / 3, 1920 / 1080\n */\n ratio: number;\n}\n\n/**\n * `AspectRatio` позволяет поддерживать постоянное соотношение ширины и высоты.\n * Его можно использовать для отображения изображений, карт, видео и других медиафайлов.\n\n * @since 5.5.0\n * @see https://vkcom.github.io/VKUI/#/AspectRatio\n */\nexport function AspectRatio({ ratio, mode = 'stretch', ...props }: AspectRatioProps): JSX.Element {\n const style: React.CSSProperties & CSSCustomProperties = {\n '--vkui_internal--aspect_ratio': String(ratio),\n };\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, mode === 'stretch' && styles.modeStretch)}\n baseStyle={style}\n {...props}\n />\n );\n}\n"],"names":["React","classNames","RootComponent","AspectRatio","ratio","mode","props","style","String","baseClassName","baseStyle"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,aAAa,QAAiC,oCAAiC;AAexF;;;;;;CAMC,GACD,OAAO,SAASC,YAAY;QAAA,EAAEC,KAAK,EAAEC,OAAO,SAAS,EAA8B,GAAvD,QAA8BC,mCAA9B;QAAEF;QAAOC;;IACnC,MAAME,QAAmD;QACvD,iCAAiCC,OAAOJ;IAC1C;IAEA,qBACE,KAACF;QACCO,eAAeR,oCAAwBI,SAAS;QAChDK,WAAWH;OACPD;AAGV"}
1
+ {"version":3,"sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent, type RootComponentProps } from '../RootComponent/RootComponent';\nimport styles from './AspectRatio.module.css';\n\nexport interface AspectRatioProps extends Omit<RootComponentProps<HTMLElement>, 'baseClassName'> {\n className?: string;\n /**\n * По умолчанию, вложенный контент будет растягиваться и заполнять весь блок.\n */\n mode?: 'stretch' | 'none';\n /**\n * Например:\n * - в виде числа: 16 / 9, 4 / 3, 1920 / 1080,\n * - в виде css переменной: `var(--css-aspect-ratio-var)`\n * - в виде сложного выражения: `calc(<какие-то вычисления>)`\n */\n ratio: number | string;\n}\n\n/**\n * `AspectRatio` позволяет поддерживать постоянное соотношение ширины и высоты.\n * Его можно использовать для отображения изображений, карт, видео и других медиафайлов.\n\n * @since 5.5.0\n * @see https://vkcom.github.io/VKUI/#/AspectRatio\n */\nexport function AspectRatio({\n ratio,\n mode = 'stretch',\n ...props\n}: AspectRatioProps): React.JSX.Element {\n const style: React.CSSProperties & CSSCustomProperties = {\n '--vkui_internal--aspect_ratio': typeof ratio === 'number' ? String(ratio) : ratio,\n };\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, mode === 'stretch' && styles.modeStretch)}\n baseStyle={style}\n {...props}\n />\n );\n}\n"],"names":["React","classNames","RootComponent","AspectRatio","ratio","mode","props","style","String","baseClassName","baseStyle"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,aAAa,QAAiC,oCAAiC;AAkBxF;;;;;;CAMC,GACD,OAAO,SAASC,YAAY;QAAA,EAC1BC,KAAK,EACLC,OAAO,SAAS,EAEC,GAJS,QAGvBC,mCAHuB;QAC1BF;QACAC;;IAGA,MAAME,QAAmD;QACvD,iCAAiC,OAAOH,UAAU,WAAWI,OAAOJ,SAASA;IAC/E;IAEA,qBACE,KAACF;QACCO,eAAeR,oCAAwBI,SAAS;QAChDK,WAAWH;OACPD;AAGV"}
@@ -2,9 +2,9 @@ import * as React from 'react';
2
2
  import type { HTMLAttributesWithRootRef } from '../../types';
3
3
  import { type CalendarDaysProps, type CalendarDaysTestsProps } from '../CalendarDays/CalendarDays';
4
4
  import { type CalendarHeaderProps, type CalendarHeaderTestsProps } from '../CalendarHeader/CalendarHeader';
5
- import { type CalendarTimeProps, type CalendarTimeTestsProps } from '../CalendarTime/CalendarTime';
5
+ import { type CalendarDoneButtonProps, type CalendarTimeProps, type CalendarTimeTestsProps } from '../CalendarTime/CalendarTime';
6
6
  export type CalendarTestsProps = CalendarDaysTestsProps & CalendarHeaderTestsProps & CalendarTimeTestsProps;
7
- export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>, Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel' | 'doneButtonText' | 'doneButtonDisabled' | 'doneButtonShow'>, Pick<CalendarHeaderProps, 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'onNextMonth' | 'onPrevMonth' | 'prevMonthIcon' | 'nextMonthIcon' | 'prevMonthProps' | 'nextMonthProps'>, Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>, CalendarTestsProps {
7
+ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>, Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>, Pick<CalendarHeaderProps, 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'onNextMonth' | 'onPrevMonth' | 'prevMonthIcon' | 'nextMonthIcon' | 'prevMonthProps' | 'nextMonthProps'>, Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>, CalendarDoneButtonProps, CalendarTestsProps {
8
8
  value?: Date;
9
9
  /**
10
10
  * Запрещает выбор даты в прошлом.
@@ -27,7 +27,6 @@ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivEle
27
27
  * Позволяет запретить выбор даты.
28
28
  */
29
29
  shouldDisableDate?: (value: Date) => boolean;
30
- onDoneButtonClick?: () => void;
31
30
  /**
32
31
  * Дата отображаемого месяца.
33
32
  * При использовании обновление даты должно происходить вне компонента.
@@ -51,5 +50,5 @@ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivEle
51
50
  /**
52
51
  * @see https://vkcom.github.io/VKUI/#/Calendar
53
52
  */
54
- export declare const Calendar: ({ value, onChange, disablePast, disableFuture, shouldDisableDate, onDoneButtonClick, enableTime, doneButtonText, doneButtonDisabled, doneButtonShow, weekStartsOn, disablePickers, changeHoursLabel, changeMinutesLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, showNeighboringMonth, changeDayLabel, size, viewDate: externalViewDate, onHeaderChange, onNextMonth, onPrevMonth, prevMonthIcon, nextMonthIcon, prevMonthProps, nextMonthProps, dayProps, listenDayChangesForUpdate, renderDayContent, minDateTime, maxDateTime, minutesTestId, hoursTestId, doneButtonTestId, prevMonthButtonTestId, nextMonthButtonTestId, monthDropdownTestId, yearDropdownTestId, dayTestId, ...props }: CalendarProps) => React.ReactNode;
53
+ export declare const Calendar: ({ getRootRef, value, onChange, disablePast, disableFuture, shouldDisableDate, onDoneButtonClick, enableTime, doneButtonText, doneButtonDisabled, doneButtonShow, DoneButton, weekStartsOn, disablePickers, changeHoursLabel, changeMinutesLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, showNeighboringMonth, changeDayLabel, size, viewDate: externalViewDate, onHeaderChange, onNextMonth, onPrevMonth, prevMonthIcon, nextMonthIcon, prevMonthProps, nextMonthProps, dayProps, listenDayChangesForUpdate, renderDayContent, minDateTime, maxDateTime, minutesTestId, hoursTestId, doneButtonTestId, prevMonthButtonTestId, nextMonthButtonTestId, monthDropdownTestId, yearDropdownTestId, dayTestId, ...props }: CalendarProps) => React.ReactNode;
55
54
  //# sourceMappingURL=Calendar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAItC,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GACrD,wBAAwB,GACxB,sBAAsB,CAAC;AAEzB,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,IAAI,CACF,iBAAiB,EACf,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,oBAAoB,GACpB,gBAAgB,CACnB,EACD,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CACnB,EACD,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,2BAA2B,GAAG,kBAAkB,CAAC,EACtF,kBAAkB;IACpB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,4rBA4ClB,aAAa,KAAG,KAAK,CAAC,SAwIxB,CAAC"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,uBAAuB,EAE5B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAItC,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GACrD,wBAAwB,GACxB,sBAAsB,CAAC;AAEzB,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,oBAAoB,CAAC,EAClE,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CACnB,EACD,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,2BAA2B,GAAG,kBAAkB,CAAC,EACtF,uBAAuB,EACvB,kBAAkB;IACpB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,otBA8ClB,aAAa,KAAG,KAAK,CAAC,SAwJxB,CAAC"}