@vkontakte/vkui 7.0.0-dev-efd91c.0 → 7.0.0-dev-efd91c.2

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 (620) hide show
  1. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  2. package/dist/components/Accordion/Accordion.js +9 -5
  3. package/dist/components/Accordion/Accordion.js.map +1 -1
  4. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  5. package/dist/components/ActionSheet/ActionSheet.js +20 -14
  6. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  7. package/dist/components/Alert/Alert.d.ts +3 -1
  8. package/dist/components/Alert/Alert.d.ts.map +1 -1
  9. package/dist/components/Alert/Alert.js +61 -56
  10. package/dist/components/Alert/Alert.js.map +1 -1
  11. package/dist/components/AppRoot/AppRoot.d.ts +2 -1
  12. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  13. package/dist/components/AppRoot/AppRoot.js +75 -102
  14. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  15. package/dist/components/AppRoot/AppRootContext.d.ts +6 -1
  16. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  17. package/dist/components/AppRoot/AppRootContext.js +5 -1
  18. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  19. package/dist/components/AppRoot/AppRootPortal.d.ts +6 -2
  20. package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
  21. package/dist/components/AppRoot/AppRootPortal.js +49 -27
  22. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  23. package/dist/components/AppRoot/AppRootStyleContainer.d.ts +16 -0
  24. package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +1 -0
  25. package/dist/components/AppRoot/AppRootStyleContainer.js +57 -0
  26. package/dist/components/AppRoot/AppRootStyleContainer.js.map +1 -0
  27. package/dist/components/AppRoot/ModalPopoutPortal.d.ts +11 -0
  28. package/dist/components/AppRoot/ModalPopoutPortal.d.ts.map +1 -0
  29. package/dist/components/AppRoot/ModalPopoutPortal.js +28 -0
  30. package/dist/components/AppRoot/ModalPopoutPortal.js.map +1 -0
  31. package/dist/components/AppRoot/helpers.d.ts +2 -12
  32. package/dist/components/AppRoot/helpers.d.ts.map +1 -1
  33. package/dist/components/AppRoot/helpers.js +6 -56
  34. package/dist/components/AppRoot/helpers.js.map +1 -1
  35. package/dist/components/BaseGallery/BaseGallery.js.map +1 -1
  36. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +1 -1
  37. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js +1 -0
  38. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
  39. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  40. package/dist/components/CalendarHeader/CalendarHeader.js +2 -2
  41. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  42. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  43. package/dist/components/CalendarTime/CalendarTime.js +2 -2
  44. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  45. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  46. package/dist/components/ConfigProvider/ConfigProvider.js +15 -7
  47. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  48. package/dist/components/Counter/Counter.d.ts +16 -6
  49. package/dist/components/Counter/Counter.d.ts.map +1 -1
  50. package/dist/components/Counter/Counter.js +50 -5
  51. package/dist/components/Counter/Counter.js.map +1 -1
  52. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  53. package/dist/components/CustomSelect/CustomSelect.js +7 -1
  54. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  55. package/dist/components/FormItem/FormItem.d.ts.map +1 -1
  56. package/dist/components/FormItem/FormItem.js +5 -3
  57. package/dist/components/FormItem/FormItem.js.map +1 -1
  58. package/dist/components/Gallery/Gallery.js.map +1 -1
  59. package/dist/components/Group/GroupContainer.d.ts.map +1 -1
  60. package/dist/components/Group/GroupContainer.js +2 -2
  61. package/dist/components/Group/GroupContainer.js.map +1 -1
  62. package/dist/components/Link/Link.d.ts +15 -2
  63. package/dist/components/Link/Link.d.ts.map +1 -1
  64. package/dist/components/Link/Link.js +20 -5
  65. package/dist/components/Link/Link.js.map +1 -1
  66. package/dist/components/ModalCard/ModalCard.d.ts +2 -6
  67. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  68. package/dist/components/ModalCard/ModalCard.js +40 -65
  69. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  70. package/dist/components/ModalCard/ModalCardInternal.d.ts +13 -0
  71. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -0
  72. package/dist/components/ModalCard/ModalCardInternal.js +147 -0
  73. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -0
  74. package/dist/components/ModalCard/types.d.ts +44 -0
  75. package/dist/components/ModalCard/types.d.ts.map +1 -0
  76. package/dist/components/ModalCard/types.js +3 -0
  77. package/dist/components/ModalCard/types.js.map +1 -0
  78. package/dist/components/ModalCardBase/ModalCardBase.d.ts.map +1 -1
  79. package/dist/components/ModalCardBase/ModalCardBase.js +1 -3
  80. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  81. package/dist/components/ModalOutlet/ModalOutlet.d.ts +9 -0
  82. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -0
  83. package/dist/components/ModalOutlet/ModalOutlet.js +25 -0
  84. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -0
  85. package/dist/components/ModalOverlay/ModalOverlay.d.ts +12 -0
  86. package/dist/components/ModalOverlay/ModalOverlay.d.ts.map +1 -0
  87. package/dist/components/ModalOverlay/ModalOverlay.js +47 -0
  88. package/dist/components/ModalOverlay/ModalOverlay.js.map +1 -0
  89. package/dist/components/ModalPage/ModalPage.d.ts +2 -60
  90. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  91. package/dist/components/ModalPage/ModalPage.js +39 -111
  92. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  93. package/dist/components/ModalPage/ModalPageInternal.d.ts +13 -0
  94. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -0
  95. package/dist/components/ModalPage/ModalPageInternal.js +181 -0
  96. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -0
  97. package/dist/components/ModalPage/types.d.ts +104 -0
  98. package/dist/components/ModalPage/types.d.ts.map +1 -0
  99. package/dist/components/ModalPage/types.js +3 -0
  100. package/dist/components/ModalPage/types.js.map +1 -0
  101. package/dist/components/ModalPageContent/ModalPageContent.d.ts +4 -0
  102. package/dist/components/ModalPageContent/ModalPageContent.d.ts.map +1 -0
  103. package/dist/components/ModalPageContent/ModalPageContent.js +22 -0
  104. package/dist/components/ModalPageContent/ModalPageContent.js.map +1 -0
  105. package/dist/components/ModalPageFooter/ModalPageFooter.d.ts +7 -0
  106. package/dist/components/ModalPageFooter/ModalPageFooter.d.ts.map +1 -0
  107. package/dist/components/ModalPageFooter/ModalPageFooter.js +30 -0
  108. package/dist/components/ModalPageFooter/ModalPageFooter.js.map +1 -0
  109. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  110. package/dist/components/ModalPageHeader/ModalPageHeader.js +4 -4
  111. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  112. package/dist/components/ModalRoot/ModalRoot.d.ts +5 -2
  113. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  114. package/dist/components/ModalRoot/ModalRoot.js +52 -590
  115. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  116. package/dist/components/ModalRoot/ModalRootContext.d.ts +8 -18
  117. package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
  118. package/dist/components/ModalRoot/ModalRootContext.js +13 -40
  119. package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
  120. package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts +13 -0
  121. package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts.map +1 -0
  122. package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +33 -0
  123. package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -0
  124. package/dist/components/ModalRoot/types.d.ts +52 -21
  125. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  126. package/dist/components/ModalRoot/types.js +1 -1
  127. package/dist/components/ModalRoot/types.js.map +1 -1
  128. package/dist/components/ModalRoot/useModalManager.d.ts +27 -38
  129. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  130. package/dist/components/ModalRoot/useModalManager.js +37 -193
  131. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  132. package/dist/components/ModalRoot/useModalRootContext.d.ts +2 -2
  133. package/dist/components/ModalRoot/useModalRootContext.d.ts.map +1 -1
  134. package/dist/components/ModalRoot/useModalRootContext.js +18 -2
  135. package/dist/components/ModalRoot/useModalRootContext.js.map +1 -1
  136. package/dist/components/ModalRoot/withModalRootContext.d.ts +6 -1
  137. package/dist/components/ModalRoot/withModalRootContext.d.ts.map +1 -1
  138. package/dist/components/ModalRoot/withModalRootContext.js +7 -4
  139. package/dist/components/ModalRoot/withModalRootContext.js.map +1 -1
  140. package/dist/components/NativeSelect/NativeSelect.d.ts +5 -6
  141. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  142. package/dist/components/NativeSelect/NativeSelect.js +7 -1
  143. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  144. package/dist/components/NavTransitionContext/NavTransitionContext.d.ts.map +1 -1
  145. package/dist/components/NavTransitionContext/NavTransitionContext.js +6 -4
  146. package/dist/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
  147. package/dist/components/PanelHeader/PanelHeader.d.ts.map +1 -1
  148. package/dist/components/PanelHeader/PanelHeader.js +2 -2
  149. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  150. package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts +5 -4
  151. package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts.map +1 -1
  152. package/dist/components/PanelHeaderBack/PanelHeaderBack.js +10 -12
  153. package/dist/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
  154. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  155. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +6 -1
  156. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  157. package/dist/components/PanelHeaderClose/PanelHeaderClose.d.ts +2 -1
  158. package/dist/components/PanelHeaderClose/PanelHeaderClose.d.ts.map +1 -1
  159. package/dist/components/PanelHeaderClose/PanelHeaderClose.js +9 -13
  160. package/dist/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
  161. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.d.ts +1 -1
  162. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.d.ts.map +1 -1
  163. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js +7 -11
  164. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
  165. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.d.ts +2 -1
  166. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.d.ts.map +1 -1
  167. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js +10 -14
  168. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
  169. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts +5 -1
  170. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  171. package/dist/components/PopoutWrapper/PopoutWrapper.js +6 -2
  172. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  173. package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  174. package/dist/components/PullToRefresh/PullToRefresh.js +9 -8
  175. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  176. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  177. package/dist/components/ScreenSpinner/ScreenSpinner.js +23 -18
  178. package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  179. package/dist/components/ScreenSpinner/types.d.ts +2 -0
  180. package/dist/components/ScreenSpinner/types.d.ts.map +1 -1
  181. package/dist/components/ScreenSpinner/types.js.map +1 -1
  182. package/dist/components/Separator/Separator.d.ts +2 -0
  183. package/dist/components/Separator/Separator.d.ts.map +1 -1
  184. package/dist/components/Separator/Separator.js +4 -5
  185. package/dist/components/Separator/Separator.js.map +1 -1
  186. package/dist/components/Skeleton/Skeleton.js +4 -4
  187. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  188. package/dist/components/Spacing/Spacing.d.ts +3 -1
  189. package/dist/components/Spacing/Spacing.d.ts.map +1 -1
  190. package/dist/components/Spacing/Spacing.js +4 -5
  191. package/dist/components/Spacing/Spacing.js.map +1 -1
  192. package/dist/components/SplitCol/SplitCol.d.ts.map +1 -1
  193. package/dist/components/SplitCol/SplitCol.js +7 -5
  194. package/dist/components/SplitCol/SplitCol.js.map +1 -1
  195. package/dist/components/SplitLayout/SplitLayout.d.ts +9 -1
  196. package/dist/components/SplitLayout/SplitLayout.d.ts.map +1 -1
  197. package/dist/components/SplitLayout/SplitLayout.js +17 -12
  198. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  199. package/dist/components/Tappable/Tappable.d.ts.map +1 -1
  200. package/dist/components/Tappable/Tappable.js +1 -1
  201. package/dist/components/Tappable/Tappable.js.map +1 -1
  202. package/dist/components/View/useLayoutEffectCall.d.ts +1 -1
  203. package/dist/components/View/useLayoutEffectCall.d.ts.map +1 -1
  204. package/dist/components/View/useLayoutEffectCall.js +8 -33
  205. package/dist/components/View/useLayoutEffectCall.js.map +1 -1
  206. package/dist/components.css +1 -1
  207. package/dist/components.css.map +1 -1
  208. package/dist/context/ModalContext.d.ts +15 -0
  209. package/dist/context/ModalContext.d.ts.map +1 -0
  210. package/dist/context/ModalContext.js +13 -0
  211. package/dist/context/ModalContext.js.map +1 -0
  212. package/dist/cssm/components/Accordion/Accordion.js +9 -5
  213. package/dist/cssm/components/Accordion/Accordion.js.map +1 -1
  214. package/dist/cssm/components/ActionSheet/ActionSheet.js +20 -14
  215. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  216. package/dist/cssm/components/Alert/Alert.js +60 -56
  217. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  218. package/dist/cssm/components/AppRoot/AppRoot.js +73 -100
  219. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  220. package/dist/cssm/components/AppRoot/AppRoot.module.css +2 -40
  221. package/dist/cssm/components/AppRoot/AppRootContext.js +5 -1
  222. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  223. package/dist/cssm/components/AppRoot/AppRootPortal.js +49 -27
  224. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  225. package/dist/cssm/components/AppRoot/AppRootStyleContainer.js +57 -0
  226. package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +1 -0
  227. package/dist/cssm/components/AppRoot/AppRootStyleContainer.module.css +87 -0
  228. package/dist/cssm/components/AppRoot/ModalPopoutPortal.js +27 -0
  229. package/dist/cssm/components/AppRoot/ModalPopoutPortal.js.map +1 -0
  230. package/dist/cssm/components/AppRoot/helpers.js +6 -56
  231. package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
  232. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +1 -1
  233. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js +1 -0
  234. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
  235. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +2 -2
  236. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  237. package/dist/cssm/components/CalendarTime/CalendarTime.js +2 -2
  238. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  239. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +15 -7
  240. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  241. package/dist/cssm/components/Counter/Counter.js +48 -4
  242. package/dist/cssm/components/Counter/Counter.js.map +1 -1
  243. package/dist/cssm/components/Counter/Counter.module.css +81 -12
  244. package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -1
  245. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  246. package/dist/cssm/components/FormItem/FormItem.js +5 -3
  247. package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
  248. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  249. package/dist/cssm/components/Group/GroupContainer.js +2 -2
  250. package/dist/cssm/components/Group/GroupContainer.js.map +1 -1
  251. package/dist/cssm/components/Link/Link.js +17 -5
  252. package/dist/cssm/components/Link/Link.js.map +1 -1
  253. package/dist/cssm/components/Link/Link.module.css +13 -4
  254. package/dist/cssm/components/ModalCard/ModalCard.js +30 -51
  255. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  256. package/dist/cssm/components/ModalCard/ModalCard.module.css +62 -44
  257. package/dist/cssm/components/ModalCard/ModalCardInternal.js +122 -0
  258. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -0
  259. package/dist/cssm/components/ModalCard/types.js +3 -0
  260. package/dist/cssm/components/ModalCard/types.js.map +1 -0
  261. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +1 -3
  262. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  263. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +0 -2
  264. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +17 -0
  265. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -0
  266. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +17 -0
  267. package/dist/cssm/components/ModalOverlay/ModalOverlay.js +40 -0
  268. package/dist/cssm/components/ModalOverlay/ModalOverlay.js.map +1 -0
  269. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +71 -0
  270. package/dist/cssm/components/ModalPage/ModalPage.js +32 -99
  271. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  272. package/dist/cssm/components/ModalPage/ModalPage.module.css +125 -123
  273. package/dist/cssm/components/ModalPage/ModalPageInternal.js +161 -0
  274. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -0
  275. package/dist/cssm/components/ModalPage/types.js +3 -0
  276. package/dist/cssm/components/ModalPage/types.js.map +1 -0
  277. package/dist/cssm/components/ModalPageContent/ModalPageContent.js +15 -0
  278. package/dist/cssm/components/ModalPageContent/ModalPageContent.js.map +1 -0
  279. package/dist/cssm/components/ModalPageContent/ModalPageContent.module.css +4 -0
  280. package/dist/cssm/components/ModalPageFooter/ModalPageFooter.js +23 -0
  281. package/dist/cssm/components/ModalPageFooter/ModalPageFooter.js.map +1 -0
  282. package/dist/cssm/components/ModalPageFooter/ModalPageFooter.module.css +35 -0
  283. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -4
  284. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  285. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +8 -2
  286. package/dist/cssm/components/ModalRoot/ModalRoot.js +52 -571
  287. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  288. package/dist/cssm/components/ModalRoot/ModalRootContext.js +13 -40
  289. package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
  290. package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +27 -0
  291. package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -0
  292. package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.module.css +8 -0
  293. package/dist/cssm/components/ModalRoot/types.js +1 -1
  294. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  295. package/dist/cssm/components/ModalRoot/useModalManager.js +36 -194
  296. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  297. package/dist/cssm/components/ModalRoot/useModalRootContext.js +18 -2
  298. package/dist/cssm/components/ModalRoot/useModalRootContext.js.map +1 -1
  299. package/dist/cssm/components/ModalRoot/withModalRootContext.js +7 -4
  300. package/dist/cssm/components/ModalRoot/withModalRootContext.js.map +1 -1
  301. package/dist/cssm/components/NativeSelect/NativeSelect.js +7 -1
  302. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  303. package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js +6 -4
  304. package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
  305. package/dist/cssm/components/PanelHeader/PanelHeader.js +2 -2
  306. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  307. package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js +9 -12
  308. package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
  309. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +6 -1
  310. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  311. package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js +8 -12
  312. package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
  313. package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js +7 -11
  314. package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
  315. package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js +8 -12
  316. package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
  317. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +5 -1
  318. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  319. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +9 -8
  320. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  321. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +23 -19
  322. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  323. package/dist/cssm/components/ScreenSpinner/types.js.map +1 -1
  324. package/dist/cssm/components/Search/Search.module.css +2 -2
  325. package/dist/cssm/components/Separator/Separator.js +9 -8
  326. package/dist/cssm/components/Separator/Separator.js.map +1 -1
  327. package/dist/cssm/components/Skeleton/Skeleton.js +4 -4
  328. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  329. package/dist/cssm/components/Spacing/Spacing.js +6 -7
  330. package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
  331. package/dist/cssm/components/SplitCol/SplitCol.js +7 -5
  332. package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
  333. package/dist/cssm/components/SplitLayout/SplitLayout.js +14 -9
  334. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  335. package/dist/cssm/components/Tappable/Tappable.js +1 -1
  336. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  337. package/dist/cssm/components/View/useLayoutEffectCall.js +8 -23
  338. package/dist/cssm/components/View/useLayoutEffectCall.js.map +1 -1
  339. package/dist/cssm/context/ModalContext.js +13 -0
  340. package/dist/cssm/context/ModalContext.js.map +1 -0
  341. package/dist/cssm/helpers/range.js +3 -0
  342. package/dist/cssm/helpers/range.js.map +1 -1
  343. package/dist/cssm/hooks/useObjectMemo.js +6 -2
  344. package/dist/cssm/hooks/useObjectMemo.js.map +1 -1
  345. package/dist/cssm/hooks/usePrevious.js +9 -2
  346. package/dist/cssm/hooks/usePrevious.js.map +1 -1
  347. package/dist/cssm/hooks/useStableCallback.js +1 -1
  348. package/dist/cssm/hooks/useStableCallback.js.map +1 -1
  349. package/dist/cssm/hooks/useStateWithPrev.js +34 -0
  350. package/dist/cssm/hooks/useStateWithPrev.js.map +1 -0
  351. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +23 -0
  352. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -0
  353. package/dist/cssm/hooks/useSyncHTMLWithTokens.js +19 -0
  354. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -0
  355. package/dist/cssm/hooks/useVirtualKeyboardState.js +134 -0
  356. package/dist/cssm/hooks/useVirtualKeyboardState.js.map +1 -0
  357. package/dist/cssm/index.js +6 -2
  358. package/dist/cssm/index.js.map +1 -1
  359. package/dist/cssm/lib/SSR.js +1 -7
  360. package/dist/cssm/lib/SSR.js.map +1 -1
  361. package/dist/cssm/lib/adaptivity/functions.js +7 -1
  362. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  363. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js +7 -5
  364. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
  365. package/dist/cssm/lib/animation/useCSSTransition.js +4 -4
  366. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  367. package/dist/cssm/lib/dom.js +65 -11
  368. package/dist/cssm/lib/dom.js.map +1 -1
  369. package/dist/cssm/lib/floating/usePlacementChangeCallback.js +6 -3
  370. package/dist/cssm/lib/floating/usePlacementChangeCallback.js.map +1 -1
  371. package/dist/cssm/lib/sheet/constants.js +23 -0
  372. package/dist/cssm/lib/sheet/constants.js.map +1 -0
  373. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +252 -0
  374. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -0
  375. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +50 -0
  376. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -0
  377. package/dist/cssm/lib/sheet/index.js +4 -0
  378. package/dist/cssm/lib/sheet/index.js.map +1 -0
  379. package/dist/cssm/lib/sheet/useBottomSheet.js +116 -0
  380. package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -0
  381. package/dist/cssm/lib/spacings/sizes.js +23 -0
  382. package/dist/cssm/lib/spacings/sizes.js.map +1 -1
  383. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +10 -0
  384. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  385. package/dist/cssm/lib/touch/index.js.map +1 -1
  386. package/dist/cssm/styles/common.css +31 -34
  387. package/dist/cssm/styles/constants.css +5 -0
  388. package/dist/helpers/range.d.ts +1 -0
  389. package/dist/helpers/range.d.ts.map +1 -1
  390. package/dist/helpers/range.js +3 -0
  391. package/dist/helpers/range.js.map +1 -1
  392. package/dist/hooks/useObjectMemo.d.ts +3 -0
  393. package/dist/hooks/useObjectMemo.d.ts.map +1 -1
  394. package/dist/hooks/useObjectMemo.js +6 -2
  395. package/dist/hooks/useObjectMemo.js.map +1 -1
  396. package/dist/hooks/usePrevious.d.ts +3 -0
  397. package/dist/hooks/usePrevious.d.ts.map +1 -1
  398. package/dist/hooks/usePrevious.js +9 -2
  399. package/dist/hooks/usePrevious.js.map +1 -1
  400. package/dist/hooks/useStableCallback.js +1 -1
  401. package/dist/hooks/useStableCallback.js.map +1 -1
  402. package/dist/hooks/useStateWithPrev.d.ts +12 -0
  403. package/dist/hooks/useStateWithPrev.d.ts.map +1 -0
  404. package/dist/hooks/useStateWithPrev.js +34 -0
  405. package/dist/hooks/useStateWithPrev.js.map +1 -0
  406. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +8 -0
  407. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -0
  408. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +24 -0
  409. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -0
  410. package/dist/hooks/useSyncHTMLWithTokens.d.ts +5 -0
  411. package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -0
  412. package/dist/hooks/useSyncHTMLWithTokens.js +20 -0
  413. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -0
  414. package/dist/hooks/useVirtualKeyboardState.d.ts +32 -0
  415. package/dist/hooks/useVirtualKeyboardState.d.ts.map +1 -0
  416. package/dist/hooks/useVirtualKeyboardState.js +134 -0
  417. package/dist/hooks/useVirtualKeyboardState.js.map +1 -0
  418. package/dist/index.d.ts +13 -5
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +6 -2
  421. package/dist/index.js.map +1 -1
  422. package/dist/lib/SSR.d.ts.map +1 -1
  423. package/dist/lib/SSR.js +1 -7
  424. package/dist/lib/SSR.js.map +1 -1
  425. package/dist/lib/adaptivity/functions.d.ts +1 -0
  426. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  427. package/dist/lib/adaptivity/functions.js +7 -1
  428. package/dist/lib/adaptivity/functions.js.map +1 -1
  429. package/dist/lib/animation/useCSSKeyframesAnimationController.d.ts.map +1 -1
  430. package/dist/lib/animation/useCSSKeyframesAnimationController.js +7 -5
  431. package/dist/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
  432. package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
  433. package/dist/lib/animation/useCSSTransition.js +4 -4
  434. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  435. package/dist/lib/dom.d.ts +20 -5
  436. package/dist/lib/dom.d.ts.map +1 -1
  437. package/dist/lib/dom.js +65 -11
  438. package/dist/lib/dom.js.map +1 -1
  439. package/dist/lib/floating/usePlacementChangeCallback.d.ts.map +1 -1
  440. package/dist/lib/floating/usePlacementChangeCallback.js +6 -3
  441. package/dist/lib/floating/usePlacementChangeCallback.js.map +1 -1
  442. package/dist/lib/sheet/constants.d.ts +28 -0
  443. package/dist/lib/sheet/constants.d.ts.map +1 -0
  444. package/dist/lib/sheet/constants.js +23 -0
  445. package/dist/lib/sheet/constants.js.map +1 -0
  446. package/dist/lib/sheet/controllers/BottomSheetController.d.ts +51 -0
  447. package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -0
  448. package/dist/lib/sheet/controllers/BottomSheetController.js +259 -0
  449. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -0
  450. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +14 -0
  451. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -0
  452. package/dist/lib/sheet/controllers/CSSTransitionController.js +51 -0
  453. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -0
  454. package/dist/lib/sheet/index.d.ts +3 -0
  455. package/dist/lib/sheet/index.d.ts.map +1 -0
  456. package/dist/lib/sheet/index.js +4 -0
  457. package/dist/lib/sheet/index.js.map +1 -0
  458. package/dist/lib/sheet/useBottomSheet.d.ts +56 -0
  459. package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -0
  460. package/dist/lib/sheet/useBottomSheet.js +116 -0
  461. package/dist/lib/sheet/useBottomSheet.js.map +1 -0
  462. package/dist/lib/spacings/sizes.d.ts +3 -2
  463. package/dist/lib/spacings/sizes.d.ts.map +1 -1
  464. package/dist/lib/spacings/sizes.js +23 -0
  465. package/dist/lib/spacings/sizes.js.map +1 -1
  466. package/dist/lib/touch/UIPanGestureRecognizer.d.ts +8 -9
  467. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  468. package/dist/lib/touch/UIPanGestureRecognizer.js +10 -0
  469. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  470. package/dist/lib/touch/index.d.ts +1 -1
  471. package/dist/lib/touch/index.d.ts.map +1 -1
  472. package/dist/lib/touch/index.js.map +1 -1
  473. package/dist/vkui.css +1 -1
  474. package/dist/vkui.css.map +1 -1
  475. package/package.json +9 -6
  476. package/src/components/Accordion/Accordion.tsx +9 -7
  477. package/src/components/ActionSheet/ActionSheet.tsx +18 -13
  478. package/src/components/Alert/Alert.tsx +65 -59
  479. package/src/components/AppRoot/AppRoot.module.css +2 -30
  480. package/src/components/AppRoot/AppRoot.tsx +90 -122
  481. package/src/components/AppRoot/AppRootContext.ts +11 -2
  482. package/src/components/AppRoot/AppRootPortal.tsx +71 -30
  483. package/src/components/AppRoot/AppRootStyleContainer.module.css +77 -0
  484. package/src/components/AppRoot/AppRootStyleContainer.tsx +72 -0
  485. package/src/components/AppRoot/ModalPopoutPortal.tsx +27 -0
  486. package/src/components/AppRoot/helpers.ts +10 -65
  487. package/src/components/BaseGallery/BaseGallery.tsx +1 -1
  488. package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +1 -0
  489. package/src/components/CalendarHeader/CalendarHeader.tsx +5 -2
  490. package/src/components/CalendarTime/CalendarTime.tsx +5 -2
  491. package/src/components/ConfigProvider/ConfigProvider.tsx +22 -11
  492. package/src/components/Counter/Counter.module.css +80 -12
  493. package/src/components/Counter/Counter.tsx +64 -7
  494. package/src/components/CustomSelect/CustomSelect.tsx +7 -1
  495. package/src/components/FormItem/FormItem.tsx +1 -2
  496. package/src/components/Gallery/Gallery.tsx +1 -1
  497. package/src/components/Group/GroupContainer.tsx +2 -2
  498. package/src/components/Link/Link.module.css +11 -3
  499. package/src/components/Link/Link.tsx +28 -2
  500. package/src/components/ModalCard/ModalCard.module.css +60 -44
  501. package/src/components/ModalCard/ModalCard.tsx +41 -74
  502. package/src/components/ModalCard/ModalCardInternal.tsx +175 -0
  503. package/src/components/ModalCard/types.ts +51 -0
  504. package/src/components/ModalCardBase/ModalCardBase.module.css +0 -1
  505. package/src/components/ModalCardBase/ModalCardBase.tsx +1 -8
  506. package/src/components/ModalOutlet/ModalOutlet.module.css +16 -0
  507. package/src/components/ModalOutlet/ModalOutlet.tsx +31 -0
  508. package/src/components/ModalOverlay/ModalOverlay.module.css +65 -0
  509. package/src/components/ModalOverlay/ModalOverlay.tsx +66 -0
  510. package/src/components/ModalPage/ModalPage.module.css +124 -123
  511. package/src/components/ModalPage/ModalPage.tsx +42 -164
  512. package/src/components/ModalPage/ModalPageInternal.tsx +229 -0
  513. package/src/components/ModalPage/types.ts +112 -0
  514. package/src/components/ModalPageContent/ModalPageContent.module.css +4 -0
  515. package/src/components/ModalPageContent/ModalPageContent.tsx +25 -0
  516. package/src/components/ModalPageFooter/ModalPageFooter.module.css +33 -0
  517. package/src/components/ModalPageFooter/ModalPageFooter.tsx +31 -0
  518. package/src/components/ModalPageHeader/ModalPageHeader.module.css +8 -2
  519. package/src/components/ModalPageHeader/ModalPageHeader.tsx +5 -5
  520. package/src/components/ModalRoot/ModalRoot.tsx +62 -716
  521. package/src/components/ModalRoot/ModalRootContext.tsx +13 -50
  522. package/src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.module.css +6 -0
  523. package/src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx +37 -0
  524. package/src/components/ModalRoot/types.ts +60 -20
  525. package/src/components/ModalRoot/useModalManager.tsx +74 -228
  526. package/src/components/ModalRoot/useModalRootContext.ts +21 -0
  527. package/src/components/ModalRoot/withModalRootContext.tsx +8 -3
  528. package/src/components/NativeSelect/NativeSelect.tsx +12 -9
  529. package/src/components/NavTransitionContext/NavTransitionContext.tsx +7 -4
  530. package/src/components/PanelHeader/PanelHeader.tsx +2 -2
  531. package/src/components/PanelHeaderBack/PanelHeaderBack.tsx +14 -12
  532. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +4 -1
  533. package/src/components/PanelHeaderClose/PanelHeaderClose.tsx +10 -13
  534. package/src/components/PanelHeaderEdit/PanelHeaderEdit.tsx +10 -12
  535. package/src/components/PanelHeaderSubmit/PanelHeaderSubmit.tsx +11 -10
  536. package/src/components/PopoutWrapper/PopoutWrapper.tsx +9 -0
  537. package/src/components/PullToRefresh/PullToRefresh.tsx +11 -7
  538. package/src/components/ScreenSpinner/ScreenSpinner.tsx +10 -6
  539. package/src/components/ScreenSpinner/types.tsx +2 -0
  540. package/src/components/Search/Search.module.css +2 -2
  541. package/src/components/Separator/Separator.tsx +32 -20
  542. package/src/components/Skeleton/Skeleton.tsx +4 -4
  543. package/src/components/Spacing/Spacing.tsx +17 -10
  544. package/src/components/SplitCol/SplitCol.tsx +7 -5
  545. package/src/components/SplitLayout/SplitLayout.tsx +20 -10
  546. package/src/components/Tappable/Tappable.tsx +1 -0
  547. package/src/components/View/useLayoutEffectCall.tsx +7 -29
  548. package/src/context/ModalContext.tsx +18 -0
  549. package/src/helpers/range.ts +4 -0
  550. package/src/hooks/useObjectMemo.ts +6 -0
  551. package/src/hooks/usePrevious.ts +9 -0
  552. package/src/hooks/useStableCallback.ts +1 -1
  553. package/src/hooks/useStateWithPrev.ts +43 -0
  554. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +39 -0
  555. package/src/hooks/useSyncHTMLWithTokens.ts +27 -0
  556. package/src/hooks/useVirtualKeyboardState.ts +152 -0
  557. package/src/index.ts +22 -5
  558. package/src/lib/SSR.tsx +1 -7
  559. package/src/lib/adaptivity/functions.ts +8 -1
  560. package/src/lib/animation/useCSSKeyframesAnimationController.ts +10 -5
  561. package/src/lib/animation/useCSSTransition.ts +4 -10
  562. package/src/lib/dom.tsx +85 -13
  563. package/src/lib/floating/usePlacementChangeCallback.ts +9 -3
  564. package/src/lib/sheet/constants.ts +32 -0
  565. package/src/lib/sheet/controllers/BottomSheetController.ts +382 -0
  566. package/src/lib/sheet/controllers/CSSTransitionController.ts +51 -0
  567. package/src/lib/sheet/index.ts +10 -0
  568. package/src/lib/sheet/useBottomSheet.ts +175 -0
  569. package/src/lib/spacings/sizes.ts +17 -2
  570. package/src/lib/touch/UIPanGestureRecognizer.ts +12 -9
  571. package/src/lib/touch/index.ts +4 -1
  572. package/src/styles/common.css +31 -41
  573. package/src/styles/constants.css +5 -0
  574. package/dist/components/ModalPage/ModalPageContext.d.ts +0 -6
  575. package/dist/components/ModalPage/ModalPageContext.d.ts.map +0 -1
  576. package/dist/components/ModalPage/ModalPageContext.js +0 -4
  577. package/dist/components/ModalPage/ModalPageContext.js.map +0 -1
  578. package/dist/components/ModalRoot/ModalRootAdaptive.d.ts +0 -7
  579. package/dist/components/ModalRoot/ModalRootAdaptive.d.ts.map +0 -1
  580. package/dist/components/ModalRoot/ModalRootAdaptive.js +0 -18
  581. package/dist/components/ModalRoot/ModalRootAdaptive.js.map +0 -1
  582. package/dist/components/ModalRoot/ModalRootDesktop.d.ts +0 -4
  583. package/dist/components/ModalRoot/ModalRootDesktop.d.ts.map +0 -1
  584. package/dist/components/ModalRoot/ModalRootDesktop.js +0 -186
  585. package/dist/components/ModalRoot/ModalRootDesktop.js.map +0 -1
  586. package/dist/components/ModalRoot/constants.d.ts +0 -2
  587. package/dist/components/ModalRoot/constants.d.ts.map +0 -1
  588. package/dist/components/ModalRoot/constants.js +0 -3
  589. package/dist/components/ModalRoot/constants.js.map +0 -1
  590. package/dist/components/PopoutRoot/PopoutRoot.d.ts +0 -19
  591. package/dist/components/PopoutRoot/PopoutRoot.d.ts.map +0 -1
  592. package/dist/components/PopoutRoot/PopoutRoot.js +0 -55
  593. package/dist/components/PopoutRoot/PopoutRoot.js.map +0 -1
  594. package/dist/cssm/components/ModalPage/ModalPageContext.js +0 -4
  595. package/dist/cssm/components/ModalPage/ModalPageContext.js.map +0 -1
  596. package/dist/cssm/components/ModalRoot/ModalRoot.module.css +0 -61
  597. package/dist/cssm/components/ModalRoot/ModalRootAdaptive.js +0 -19
  598. package/dist/cssm/components/ModalRoot/ModalRootAdaptive.js.map +0 -1
  599. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +0 -179
  600. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +0 -1
  601. package/dist/cssm/components/ModalRoot/constants.js +0 -3
  602. package/dist/cssm/components/ModalRoot/constants.js.map +0 -1
  603. package/dist/cssm/components/PopoutRoot/PopoutRoot.js +0 -41
  604. package/dist/cssm/components/PopoutRoot/PopoutRoot.js.map +0 -1
  605. package/dist/cssm/components/PopoutRoot/PopoutRoot.module.css +0 -28
  606. package/dist/cssm/hooks/useKeyboard.js +0 -40
  607. package/dist/cssm/hooks/useKeyboard.js.map +0 -1
  608. package/dist/hooks/useKeyboard.d.ts +0 -11
  609. package/dist/hooks/useKeyboard.d.ts.map +0 -1
  610. package/dist/hooks/useKeyboard.js +0 -42
  611. package/dist/hooks/useKeyboard.js.map +0 -1
  612. package/src/components/ModalPage/ModalPageContext.tsx +0 -8
  613. package/src/components/ModalRoot/ModalRoot.module.css +0 -59
  614. package/src/components/ModalRoot/ModalRootAdaptive.tsx +0 -21
  615. package/src/components/ModalRoot/ModalRootDesktop.tsx +0 -243
  616. package/src/components/ModalRoot/constants.ts +0 -1
  617. package/src/components/ModalRoot/useModalRootContext.tsx +0 -5
  618. package/src/components/PopoutRoot/PopoutRoot.module.css +0 -28
  619. package/src/components/PopoutRoot/PopoutRoot.tsx +0 -51
  620. package/src/hooks/useKeyboard.ts +0 -56
@@ -1,42 +1,20 @@
1
1
  import * as React from 'react';
2
2
  import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
3
3
 
4
- class LayoutEffectCall {
5
- #fns: Array<() => void> = [];
6
-
7
- /**
8
- * Выполняет переданные функции
9
- */
10
- run() {
11
- for (const fn of this.#fns) {
12
- fn();
13
- }
14
-
15
- this.#fns = [];
16
- }
17
-
18
- /**
19
- * Вызовет функцию после изменения DOM, но до того как пользователь увидит
20
- * изменения
21
- */
22
- add = (fn: () => void) => {
23
- this.#fns.push(fn);
24
- };
25
- }
26
-
27
4
  /**
28
5
  * Возвращает функцию которая вызывает callback после изменения DOM, но до того
29
6
  * как пользователь увидит изменения
30
7
  */
31
8
  export function useLayoutEffectCall() {
32
- const ref = React.useRef<LayoutEffectCall | null>(null);
33
- if (!ref.current) {
34
- ref.current = new LayoutEffectCall();
35
- }
9
+ const [fns] = React.useState<Array<() => void>>(() => []);
36
10
 
37
11
  useIsomorphicLayoutEffect(() => {
38
- ref.current!.run();
12
+ while (fns.length > 0) {
13
+ fns.pop()!();
14
+ }
39
15
  });
40
16
 
41
- return ref.current.add;
17
+ const add = React.useCallback((fn: () => void) => fns.push(fn), [fns]);
18
+
19
+ return add;
42
20
  }
@@ -0,0 +1,18 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ /** @private */
4
+ export type ModalContextInterface = string;
5
+
6
+ /** @private */
7
+ export const ModalContext = createContext<ModalContextInterface | null>(null);
8
+
9
+ /** @private */
10
+ export type UseModalContextResult =
11
+ | { id: null; labelId?: undefined }
12
+ | { id: string; labelId: string };
13
+
14
+ /** @private */
15
+ export const useModalContext = (): UseModalContextResult => {
16
+ const id = useContext(ModalContext);
17
+ return id === null ? { id } : { id, labelId: `${id}-label` };
18
+ };
@@ -24,3 +24,7 @@ export function rangeIncrement(from: number, to: number, step = 1): number[] {
24
24
 
25
25
  return range(from, to, step);
26
26
  }
27
+
28
+ export function inRange(number: number, from: number, to: number) {
29
+ return number >= from && number <= to;
30
+ }
@@ -1,7 +1,13 @@
1
1
  import * as React from 'react';
2
2
  import { isEqual } from '@vkontakte/vkjs';
3
3
 
4
+ /**
5
+ * @deprecated используйте React.useMemo
6
+ */
4
7
  export function useObjectMemo<T>(object: T): T {
8
+ /**
9
+ * Запись и чтение во время рендеринга в useRef запрещена
10
+ */
5
11
  const cache = React.useRef(object);
6
12
  if (!isEqual(cache.current, object)) {
7
13
  cache.current = object;
@@ -1,5 +1,8 @@
1
1
  import * as React from 'react';
2
2
 
3
+ /**
4
+ * @deprecated постарайтесь избавится от этого хука или используйте `useStateWithPrev`
5
+ */
3
6
  export function usePrevious<T>(value: T): T | undefined {
4
7
  const ref = React.useRef<T | undefined>();
5
8
 
@@ -7,5 +10,11 @@ export function usePrevious<T>(value: T): T | undefined {
7
10
  ref.current = value;
8
11
  });
9
12
 
13
+ /**
14
+ * ref.current нельзя читать во время рендеринга
15
+ *
16
+ * - see https://react.dev/reference/react/useRef
17
+ * - also https://react.dev/reference/react/useState#storing-information-from-previous-renders
18
+ */
10
19
  return ref.current;
11
20
  }
@@ -17,5 +17,5 @@ export function useStableCallback<Args extends unknown[], Return>(
17
17
  useIsomorphicLayoutEffect(() => {
18
18
  ref.current = fn;
19
19
  });
20
- return React.useRef((...args: Args) => (0, ref.current)(...args)).current;
20
+ return React.useCallback((...args: Args) => (0, ref.current)(...args), []);
21
21
  }
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+
3
+ function basicStateInitializer<S>(initialArg: S | (() => S)): S {
4
+ return initialArg instanceof Function ? initialArg() : initialArg;
5
+ }
6
+
7
+ function initializer<T>(initialArg: T | (() => T)): [T, T | undefined] {
8
+ const initialState = basicStateInitializer(initialArg);
9
+
10
+ return [initialState, undefined];
11
+ }
12
+
13
+ function basicStateReducer<S>(state: S, action: React.SetStateAction<S>): S {
14
+ return action instanceof Function ? action(state) : action;
15
+ }
16
+
17
+ function reducer<T>(
18
+ [prevState]: [T, T | undefined],
19
+ action: React.SetStateAction<T>,
20
+ ): [T, T | undefined] {
21
+ const newState = basicStateReducer(prevState, action);
22
+
23
+ return [newState, prevState];
24
+ }
25
+
26
+ /**
27
+ * Возвращает значение с текущим и предыдущим состоянием
28
+ *
29
+ * # Пример
30
+ *
31
+ * ```ts
32
+ * const [[count, prevCount], setCount] = useStateWithPrev(initialState);
33
+ * ```
34
+ */
35
+ export function useStateWithPrev<T>(
36
+ initialState: T | (() => T),
37
+ ): [[T, T | undefined], React.Dispatch<React.SetStateAction<T>>] {
38
+ return React.useReducer<React.Reducer<[T, T | undefined], React.SetStateAction<T>>, undefined>(
39
+ reducer,
40
+ undefined,
41
+ () => initializer(initialState),
42
+ );
43
+ }
@@ -0,0 +1,39 @@
1
+ import type * as React from 'react';
2
+ import { getParentElement } from '../components/AppRoot/helpers';
3
+ import { type AppRootMode } from '../components/AppRoot/types';
4
+ import { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';
5
+
6
+ export function useSyncHTMLWithBaseVKUIClasses({
7
+ appRootRef,
8
+ mode,
9
+ enable,
10
+ }: {
11
+ appRootRef: React.RefObject<HTMLElement>;
12
+ mode: AppRootMode;
13
+ enable: boolean;
14
+ }) {
15
+ useIsomorphicLayoutEffect(() => {
16
+ if (!enable) {
17
+ return;
18
+ }
19
+
20
+ const htmlElement = appRootRef.current?.ownerDocument.documentElement;
21
+ const parentElement = getParentElement(appRootRef.current);
22
+
23
+ if (mode === 'full') {
24
+ /* eslint-disable-next-line no-restricted-properties */
25
+ htmlElement?.classList.add('vkui');
26
+ }
27
+ /* eslint-disable-next-line no-restricted-properties */
28
+ parentElement?.classList.add('vkui__root');
29
+
30
+ return () => {
31
+ if (mode === 'full') {
32
+ /* eslint-disable-next-line no-restricted-properties */
33
+ htmlElement?.classList.remove('vkui');
34
+ }
35
+ /* eslint-disable-next-line no-restricted-properties */
36
+ parentElement?.classList.remove('vkui__root');
37
+ };
38
+ }, []);
39
+ }
@@ -0,0 +1,27 @@
1
+ import { useTokensClassName } from '../lib/tokens/useTokenClassName';
2
+ import { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';
3
+
4
+ export function useSyncHTMLWithTokens({
5
+ appRootRef,
6
+ enable,
7
+ }: {
8
+ appRootRef: React.RefObject<HTMLElement>;
9
+ enable: boolean;
10
+ }) {
11
+ const tokenClassName = useTokensClassName();
12
+
13
+ useIsomorphicLayoutEffect(() => {
14
+ if (!enable) {
15
+ return;
16
+ }
17
+
18
+ const htmlElement = appRootRef.current?.ownerDocument.documentElement;
19
+ /* eslint-disable-next-line no-restricted-properties */
20
+ htmlElement?.classList.add(tokenClassName);
21
+
22
+ return () => {
23
+ /* eslint-disable-next-line no-restricted-properties */
24
+ htmlElement?.classList.remove(tokenClassName);
25
+ };
26
+ }, [tokenClassName]);
27
+ }
@@ -0,0 +1,152 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ import { debounce, throttle } from '@vkontakte/vkjs';
3
+ import {
4
+ getVisualViewport,
5
+ isHTMLContentEditableElement,
6
+ useDOM,
7
+ type VisualViewport,
8
+ } from '../lib/dom';
9
+
10
+ export type VirtualKeyboardState = { opened: boolean };
11
+
12
+ /**
13
+ * > см. [Неудобно работать с клавиатурой в ModalPage на iOS #3792](https://github.com/VKCOM/VKUI/discussions/3792)
14
+ *
15
+ * Для реализации модальных окон для тач-устройств, мы вынуждены отслеживать открытие виртуальной
16
+ * клавиатуры. По состоянию `opened` компоненты должны временно блокировать дальнейшее взаимодействие
17
+ * с ними. Например, отключить закрытие по свайпу, чтобы не мешать пользователю работать с полями
18
+ * ввода.
19
+ *
20
+ * Помимо этого в **Safari** и в **Chrome Android** нам нужно отслеживать прокрутку области видимости
21
+ * пользователем, т.к. в упомянутых браузерах, виртуальная клавиатура поднимает контент вверх
22
+ * не изменяя её высоту. Из-за этого появляется возможность прокручивать `window`, что визуально
23
+ * выглядит плохо. В хуке мы ловим фокус на поле ввода и далее, если это тач-устройство, то
24
+ * отлавливаем события прокрутки на `window`, чтобы сохранять текущую её позицию через `scrollTo(x, y)`.
25
+ *
26
+ * **Troubleshooting**
27
+ *
28
+ * - в **Safari** и в **Chrome Android** шапка будет выдвигаться вверх – хаки с выставлением `offsetTop`
29
+ * из `VisualViewport` порождают reflow/repaint и прыгания контента;
30
+ * - в **Safari** изменение высоты виртуальной клавиатуры, например, на выбор эмодзи, не поднимет
31
+ * `VisualViewport` из-за чего клавиатура может частично перекрыть элементы интерфейса.
32
+ *
33
+ * **Полезные ссылки**
34
+ *
35
+ * - [The Eccentric Ways of iOS Safari with the Keyboard](https://web.archive.org/web/20240920081850/https://blog.opendigerati.com/the-eccentric-ways-of-ios-safari-with-the-keyboard-b5aa3f34228d?gi=5411141a13e0)
36
+ * - [Dealing with the visual viewport](https://web.archive.org/web/20240920082109/https://rdavis.io/articles/dealing-with-the-visual-viewport)
37
+ * - [How to get the document height in iOS Safari when the on-screen keyboard is open](https://web.archive.org/web/20240920082743/https://martijnhols.nl/gists/how-to-get-document-height-ios-safari-osk)
38
+ */
39
+ export function useVirtualKeyboardState(enabled = true): VirtualKeyboardState {
40
+ const { window, document } = useDOM();
41
+
42
+ const [focusedEl, setFocusedEl] = useState<Element | null>(null);
43
+ const [keyboardOpened, setKeyboardOpened] = useState(false);
44
+
45
+ const prevVisualViewportRef = useRef<VisualViewport | null>(null);
46
+
47
+ useEffect(
48
+ function handleFocusedEl() {
49
+ if (!enabled || !window || !document) {
50
+ return;
51
+ }
52
+
53
+ const handleFocus = (event: FocusEvent | true) => {
54
+ const activeElement = event === true ? document.activeElement : (event.target as Element);
55
+
56
+ if (isHTMLContentEditableElement(activeElement)) {
57
+ const patchedEvent = event === true ? { type: 'focusin' } : event;
58
+ switch (patchedEvent.type) {
59
+ case 'focusin':
60
+ prevVisualViewportRef.current = getVisualViewport(window);
61
+ setFocusedEl(activeElement);
62
+ break;
63
+ case 'focusout':
64
+ prevVisualViewportRef.current = null;
65
+ setKeyboardOpened(false);
66
+ setFocusedEl(null);
67
+ break;
68
+ }
69
+ }
70
+ };
71
+
72
+ /**
73
+ * У полей с autoFocus не отлавливаются события `focus`, для этого вызываем обработчик
74
+ * вручную, чтобы иметь хоть какое-то понимание происходящего.
75
+ */
76
+ handleFocus(true);
77
+
78
+ const eventOptions = { passive: true, capture: false };
79
+ document.addEventListener('focusin', handleFocus, eventOptions);
80
+ document.addEventListener('focusout', handleFocus, eventOptions);
81
+
82
+ return () => {
83
+ prevVisualViewportRef.current = null;
84
+ document.removeEventListener('focusin', handleFocus, eventOptions);
85
+ document.removeEventListener('focusout', handleFocus, eventOptions);
86
+ };
87
+ },
88
+ [enabled, window, document],
89
+ );
90
+
91
+ useEffect(
92
+ function handleVirtualKeyboardOpened() {
93
+ if (!focusedEl || !window) {
94
+ return;
95
+ }
96
+
97
+ const handleResize = debounce(() => {
98
+ /* istanbul ignore if: нереалистичный кейс, проверяем в угоду TypeScript */
99
+ if (prevVisualViewportRef.current === null) {
100
+ return;
101
+ }
102
+
103
+ const nextVisualViewport = getVisualViewport(window);
104
+
105
+ const { offsetTop: prevOffsetTop, height: prevHeight } = prevVisualViewportRef.current;
106
+ const { offsetTop: nextOffsetTop, height: nextHeight } = nextVisualViewport;
107
+ if (prevOffsetTop !== nextOffsetTop || prevHeight !== nextHeight) {
108
+ setKeyboardOpened(true);
109
+ prevVisualViewportRef.current = nextVisualViewport;
110
+ }
111
+ }, 100);
112
+
113
+ if (window.visualViewport) {
114
+ window.visualViewport.addEventListener('resize', handleResize);
115
+ } else {
116
+ window.addEventListener('resize', handleResize);
117
+ }
118
+
119
+ return function dispose() {
120
+ if (window.visualViewport) {
121
+ window.visualViewport.removeEventListener('resize', handleResize);
122
+ } else {
123
+ window.removeEventListener('resize', handleResize);
124
+ }
125
+ };
126
+ },
127
+ [focusedEl, window],
128
+ );
129
+
130
+ useEffect(
131
+ function preventWindowScrollIfKeyboardOpened() {
132
+ if (!keyboardOpened || !window) {
133
+ return;
134
+ }
135
+
136
+ const prevent = throttle(() => {
137
+ if (prevVisualViewportRef.current) {
138
+ window.scrollTo(0, prevVisualViewportRef.current.offsetTop);
139
+ }
140
+ }, 100);
141
+
142
+ window.addEventListener('scroll', prevent, { passive: true });
143
+
144
+ return function dispose() {
145
+ window.removeEventListener('scroll', prevent);
146
+ };
147
+ },
148
+ [keyboardOpened, window],
149
+ );
150
+
151
+ return { opened: keyboardOpened };
152
+ }
package/src/index.ts CHANGED
@@ -142,16 +142,22 @@ export type {
142
142
  /**
143
143
  * Modals
144
144
  */
145
- export { ModalRoot } from './components/ModalRoot/ModalRootAdaptive';
146
- export type { ModalRootProps } from './components/ModalRoot/types';
145
+ export { ModalRoot } from './components/ModalRoot/ModalRoot';
146
+ export type {
147
+ ModalRootProps,
148
+ ModalRootContextInterface,
149
+ UseModalRootContext,
150
+ } from './components/ModalRoot/types';
147
151
  export { withModalRootContext } from './components/ModalRoot/withModalRootContext';
148
152
  export { ModalRootContext } from './components/ModalRoot/ModalRootContext';
153
+ export { useModalRootContext } from './components/ModalRoot/useModalRootContext';
154
+ export { ModalPageContent } from './components/ModalPageContent/ModalPageContent';
149
155
  export { ModalPage } from './components/ModalPage/ModalPage';
150
- export type { ModalPageProps } from './components/ModalPage/ModalPage';
156
+ export type { ModalPageProps } from './components/ModalPage/types';
151
157
  export { ModalPageHeader } from './components/ModalPageHeader/ModalPageHeader';
152
158
  export type { ModalPageHeaderProps } from './components/ModalPageHeader/ModalPageHeader';
153
159
  export { ModalCard } from './components/ModalCard/ModalCard';
154
- export type { ModalCardProps } from './components/ModalCard/ModalCard';
160
+ export type { ModalCardProps } from './components/ModalCard/types';
155
161
  export { ModalDismissButton } from './components/ModalDismissButton/ModalDismissButton';
156
162
  export type { ModalDismissButtonProps } from './components/ModalDismissButton/ModalDismissButton';
157
163
 
@@ -356,14 +362,24 @@ export type { SkeletonProps } from './components/Skeleton/Skeleton';
356
362
  */
357
363
  export { Div } from './components/Div/Div';
358
364
  export type { DivProps } from './components/Div/Div';
365
+ export {
366
+ DEFAULT_ARROW_HEIGHT,
367
+ DEFAULT_ARROW_WIDTH,
368
+ DEFAULT_ARROW_PADDING,
369
+ DefaultIcon,
370
+ } from './components/FloatingArrow/DefaultIcon';
371
+ export { FloatingArrow } from './components/FloatingArrow/FloatingArrow';
372
+ export type { FloatingArrowProps } from './components/FloatingArrow/FloatingArrow';
359
373
  export { Touch } from './components/Touch/Touch';
360
374
  export type { TouchProps, CustomTouchEvent } from './components/Touch/Touch';
361
375
  export { PanelSpinner } from './components/PanelSpinner/PanelSpinner';
362
376
  export type { PanelSpinnerProps } from './components/PanelSpinner/PanelSpinner';
363
377
  export { PanelHeaderClose } from './components/PanelHeaderClose/PanelHeaderClose';
378
+ export type { PanelHeaderCloseProps } from './components/PanelHeaderClose/PanelHeaderClose';
364
379
  export { PanelHeaderBack } from './components/PanelHeaderBack/PanelHeaderBack';
365
380
  export type { PanelHeaderBackProps } from './components/PanelHeaderBack/PanelHeaderBack';
366
381
  export { PanelHeaderSubmit } from './components/PanelHeaderSubmit/PanelHeaderSubmit';
382
+ export type { PanelHeaderSubmitProps } from './components/PanelHeaderSubmit/PanelHeaderSubmit';
367
383
  export { PanelHeaderEdit } from './components/PanelHeaderEdit/PanelHeaderEdit';
368
384
  export type { PanelHeaderEditProps } from './components/PanelHeaderEdit/PanelHeaderEdit';
369
385
  export { ModalCardBase } from './components/ModalCardBase/ModalCardBase';
@@ -428,7 +444,6 @@ export { useNavTransition } from './components/NavTransitionContext/NavTransitio
428
444
  export { useNavDirection } from './components/NavTransitionDirectionContext/NavTransitionDirectionContext';
429
445
  export { useNavId } from './components/NavIdContext/useNavId';
430
446
  export type { TransitionDirection } from './components/NavTransitionDirectionContext/NavTransitionDirectionContext';
431
- export { useModalRootContext } from './components/ModalRoot/useModalRootContext';
432
447
 
433
448
  /**
434
449
  * Utils
@@ -471,5 +486,7 @@ export type { TransitionContextProps } from './components/NavTransitionContext/N
471
486
  */
472
487
  export { ViewInfinite as unstable_ViewInfinite } from './components/View/ViewInfinite';
473
488
  export type { ViewInfiniteProps as unstable_ViewInfiniteProps } from './components/View/ViewInfinite';
489
+ export { ModalPageFooter as unstable_ModalPageFooter } from './components/ModalPageFooter/ModalPageFooter';
490
+ export type { ModalPageFooterProps as unstable_ModalPageFooterProps } from './components/ModalPageFooter/ModalPageFooter';
474
491
 
475
492
  import './styles/common.css';
package/src/lib/SSR.tsx CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { ConfigProviderOverride } from '../components/ConfigProvider/ConfigProviderOverride';
5
- import { useObjectMemo } from '../hooks/useObjectMemo';
6
5
  import { type BrowserInfo, computeBrowserInfo } from './browser';
7
- import { DOMContext, getDOM } from './dom';
8
6
  import { platform as getPlatform } from './platform';
9
7
 
10
8
  export interface SSRWrapperProps {
@@ -21,11 +19,7 @@ export const SSRWrapper: React.FC<SSRWrapperProps> = ({ userAgent, browserInfo,
21
19
  browserInfo = computeBrowserInfo(userAgent);
22
20
  }
23
21
 
24
- const dom = useObjectMemo(getDOM());
25
-
26
22
  return (
27
- <ConfigProviderOverride platform={getPlatform(browserInfo)}>
28
- <DOMContext.Provider value={dom}>{children}</DOMContext.Provider>
29
- </ConfigProviderOverride>
23
+ <ConfigProviderOverride platform={getPlatform(browserInfo)}>{children}</ConfigProviderOverride>
30
24
  );
31
25
  };
@@ -1,6 +1,7 @@
1
1
  import type { Exact } from '../../types';
2
+ import { getWindow } from '../dom';
2
3
  import { type PlatformType } from '../platform';
3
- import { BREAKPOINTS } from './breakpoints';
4
+ import { BREAKPOINTS, MEDIA_QUERIES } from './breakpoints';
4
5
  import {
5
6
  type SizeTypeValues,
6
7
  VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP,
@@ -138,6 +139,12 @@ export function tryToCheckIsDesktop(
138
139
  return (widthIsLikeDesktop && otherParametersIsLikeDesktop) || IS_VKCOM_CRUTCH;
139
140
  }
140
141
 
142
+ export function isSmallTablePlus(el: HTMLElement) {
143
+ const win = getWindow(el);
144
+ // eslint-disable-next-line no-restricted-properties
145
+ return win ? win.matchMedia(MEDIA_QUERIES.SMALL_TABLET_PLUS).matches : false;
146
+ }
147
+
141
148
  /**
142
149
  * Конвертирует `viewWidth` в CSS брейкпоинты (см. тесты для наглядности).
143
150
  *
@@ -1,6 +1,5 @@
1
- import { useState } from 'react';
1
+ import * as React from 'react';
2
2
  import { noop } from '@vkontakte/vkjs';
3
- import { usePrevious } from '../../hooks/usePrevious';
4
3
  import { useStableCallback } from '../../hooks/useStableCallback';
5
4
  import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';
6
5
 
@@ -29,10 +28,14 @@ export const useCSSKeyframesAnimationController = (
29
28
  }: UseCSSAnimationControllerCallback = {},
30
29
  disableInitAnimation = false,
31
30
  ): [AnimationState, AnimationHandlers] => {
32
- const [state, setState] = useState<AnimationState>(() =>
31
+ const [state, setState] = React.useState<AnimationState>(() =>
33
32
  disableInitAnimation ? (stateProp === 'enter' ? 'entered' : 'exited') : stateProp,
34
33
  );
35
- const prevState = usePrevious(stateProp);
34
+
35
+ const prevStateRef = React.useRef<'enter' | 'exit' | undefined>(undefined);
36
+ React.useEffect(() => {
37
+ prevStateRef.current = stateProp;
38
+ });
36
39
 
37
40
  const onAnimationStart = () => {
38
41
  if (state === 'enter') {
@@ -67,6 +70,8 @@ export const useCSSKeyframesAnimationController = (
67
70
 
68
71
  useIsomorphicLayoutEffect(
69
72
  function updateState() {
73
+ const prevState = prevStateRef.current;
74
+
70
75
  if (prevState === stateProp) {
71
76
  return;
72
77
  }
@@ -89,7 +94,7 @@ export const useCSSKeyframesAnimationController = (
89
94
  break;
90
95
  }
91
96
  },
92
- [state, prevState, stateProp, onEnter, onExit],
97
+ [state, stateProp, onEnter, onExit],
93
98
  );
94
99
 
95
100
  return [state, { onAnimationStart, onAnimationEnd }];
@@ -1,13 +1,7 @@
1
- import {
2
- type TransitionEvent,
3
- type TransitionEventHandler,
4
- useEffect,
5
- useRef,
6
- useState,
7
- } from 'react';
1
+ import { type TransitionEvent, type TransitionEventHandler, useEffect, useRef } from 'react';
8
2
  import { noop } from '@vkontakte/vkjs';
9
- import { usePrevious } from '../../hooks/usePrevious';
10
3
  import { useStableCallback } from '../../hooks/useStableCallback';
4
+ import { useStateWithPrev } from '../../hooks/useStateWithPrev';
11
5
 
12
6
  /* istanbul ignore next: особенность рендера в браузере когда меняется className, в Jest не воспроизвести */
13
7
  const forceReflowForFixNewMountedElement = (node: Element | null) => void node?.scrollTop;
@@ -72,7 +66,7 @@ export const useCSSTransition = <Ref extends Element = Element>(
72
66
  const onExited = useStableCallback(onExitedProp || noop);
73
67
 
74
68
  const ref = useRef<Ref | null>(null);
75
- const [state, setState] = useState<UseCSSTransitionState>(() => {
69
+ const [[state, prevState], setState] = useStateWithPrev<UseCSSTransitionState>(() => {
76
70
  if (!inProp) {
77
71
  return 'exited';
78
72
  }
@@ -84,7 +78,6 @@ export const useCSSTransition = <Ref extends Element = Element>(
84
78
 
85
79
  return 'entered';
86
80
  });
87
- const prevState = usePrevious(state);
88
81
 
89
82
  useEffect(
90
83
  function updateState() {
@@ -158,6 +151,7 @@ export const useCSSTransition = <Ref extends Element = Element>(
158
151
 
159
152
  state,
160
153
  prevState,
154
+ setState,
161
155
 
162
156
  enableAppear,
163
157
  enableEnter,