@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,727 +1,73 @@
1
1
  'use client';
2
2
 
3
3
  import * as React from 'react';
4
- import { classNames } from '@vkontakte/vkjs';
5
- import { clamp } from '../../helpers/math';
6
- import { withContext } from '../../hoc/withContext';
7
- import { withPlatform } from '../../hoc/withPlatform';
8
- import { type DOMProps, withDOM } from '../../lib/dom';
9
- import { getNavId } from '../../lib/getNavId';
10
- import { rubber } from '../../lib/touch';
4
+ import { noop } from '@vkontakte/vkjs';
11
5
  import { warnOnce } from '../../lib/warnOnce';
12
- import { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';
13
- import { FocusTrap } from '../FocusTrap/FocusTrap';
14
- import { type CustomTouchEvent, Touch } from '../Touch/Touch';
15
- import TouchRootContext from '../Touch/TouchContext';
16
- import { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';
17
- import { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';
18
- import type { ModalRootWithDOMProps, ModalsStateEntry, TranslateRange } from './types';
19
- import { type ModalTransitionProps, withModalManager } from './useModalManager';
20
- import styles from './ModalRoot.module.css';
6
+ import { ModalPopoutPortal } from '../AppRoot/ModalPopoutPortal';
7
+ import { ModalOverlay } from '../ModalOverlay/ModalOverlay';
8
+ import { ModalRootContext, ModalRootOverlayContext } from './ModalRootContext';
9
+ import type { ModalRootProps } from './types';
21
10
 
22
11
  const warn = warnOnce('ModalRoot');
23
12
 
24
- function numberInRange(number: number, range: TranslateRange | undefined) {
25
- if (!range) {
26
- return false;
27
- }
28
- return number >= range[0] && number <= range[1];
29
- }
30
-
31
- function rangeTranslate(number: number) {
32
- return clamp(number, 0, 98);
33
- }
34
-
35
- interface ModalRootState {
36
- touchDown?: boolean;
37
- dragging?: boolean;
38
- modalOpenedLog: string[];
39
- }
40
-
41
- class ModalRootTouchComponent extends React.Component<
42
- ModalRootWithDOMProps & DOMProps & ModalTransitionProps,
43
- ModalRootState
44
- > {
45
- constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {
46
- super(props);
47
- this.state = {
48
- touchDown: false,
49
- dragging: false,
50
- modalOpenedLog: [],
51
- };
52
-
53
- this.maskElementRef = React.createRef();
54
-
55
- this.modalRootContext = {
56
- updateModalHeight: this.updateModalHeight,
57
- registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),
58
- onClose: () => this.props.onExit(),
59
- isInsideModal: true,
60
- };
61
-
62
- this.frameIds = {};
63
- }
64
-
65
- private readonly maskElementRef: React.RefObject<HTMLDivElement>;
66
- private readonly viewportRef = React.createRef<HTMLDivElement>();
67
- private maskAnimationFrame: number | undefined = undefined;
68
- private readonly modalRootContext: ModalRootContextInterface;
69
- private readonly frameIds: {
70
- [index: string]: number;
71
- };
72
- private restoreFocusTo: HTMLElement | undefined | null = undefined;
73
-
74
- get timeout(): number {
75
- return this.props.platform === 'ios' ? 400 : 320;
76
- }
77
-
78
- get document(): Document {
79
- return this.props.document as Document;
80
- }
81
-
82
- get window(): Window {
83
- return this.props.window as Window;
84
- }
85
-
86
- getModals() {
87
- return React.Children.toArray(this.props.children) as React.ReactElement[];
88
- }
89
-
90
- componentDidMount() {
91
- // Отслеживаем изменение размеров viewport
92
- this.window?.addEventListener('resize', this.updateModalHeight, false);
93
- }
94
-
95
- componentWillUnmount() {
96
- this.toggleDocumentScrolling(true);
97
- this.window.removeEventListener('resize', this.updateModalHeight, false);
98
- }
99
-
100
- componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {
101
- // transition phase 2: animate exiting modal
102
- if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {
103
- this.closeModal(this.props.exitingModal);
104
- }
105
-
106
- // transition phase 3: animate entering modal
107
- if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {
108
- const enteringState = this.props.getModalState(this.props.enteringModal);
109
- this.props.onEnter();
110
- this.waitTransitionFinish(enteringState, () => {
111
- if (enteringState) {
112
- if (enteringState.innerElement) {
113
- enteringState.innerElement.style.transitionDelay = '';
114
- }
115
- this.onEntered(enteringState);
116
- }
117
- });
118
-
119
- if (enteringState?.innerElement) {
120
- enteringState.innerElement.style.transitionDelay = this.props.delayEnter
121
- ? `${this.timeout}ms`
122
- : '';
123
- this.animateTranslate(enteringState, enteringState.translateY);
124
- this.setMaskOpacity(enteringState, 1);
125
- }
126
- }
127
-
128
- // focus restoration
129
- if (this.props.activeModal && !prevProps.activeModal) {
130
- this.restoreFocusTo = this.document.activeElement as HTMLElement;
131
- }
132
- if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {
133
- this.restoreFocusTo.focus();
134
- this.restoreFocusTo = null;
135
- }
136
-
137
- this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);
138
- }
139
-
140
- /* Отключает скролл документа */
141
- toggleDocumentScrolling(enabled: boolean) {
142
- if (enabled) {
143
- // восстанавливаем значение overscroll behavior
144
- // eslint-disable-next-line no-restricted-properties
145
- this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');
146
- } else {
147
- // отключаем нативный pull-to-refresh при открытом модальном окне
148
- // чтобы он не срабатывал при закрытии модалки смахиванием вниз
149
- // eslint-disable-next-line no-restricted-properties
150
- this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');
151
- }
152
- }
153
-
154
- checkPageContentHeight() {
155
- const modalState = this.props.getModalState(this.props.activeModal);
156
-
157
- if (modalState?.type === 'page' && modalState?.modalElement) {
158
- const prevModalState = { ...modalState };
159
- initPageModal(modalState);
160
- const currentModalState = { ...modalState };
161
-
162
- let needAnimate = false;
163
-
164
- if (prevModalState.expandable === currentModalState.expandable) {
165
- if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {
166
- needAnimate = true;
167
- }
168
- } else {
169
- needAnimate = true;
170
- }
171
-
172
- if (needAnimate) {
173
- this.animateTranslate(modalState, modalState.translateY);
174
- }
175
- }
176
- }
177
-
178
- updateModalHeight = () => {
179
- const modalState = this.props.getModalState(this.props.activeModal);
180
-
181
- if (modalState && modalState.type === 'page') {
182
- if (this.props.enteringModal) {
183
- this.waitTransitionFinish(modalState, () => {
184
- requestAnimationFrame(() => this.checkPageContentHeight());
185
- });
186
- } else {
187
- requestAnimationFrame(() => this.checkPageContentHeight());
188
- }
189
- }
190
- };
191
-
192
- onEntered({ id, modalElement }: ModalsStateEntry) {
193
- if (
194
- !this.props.noFocusToDialog &&
195
- modalElement &&
196
- !modalElement.contains(this.document.activeElement)
197
- ) {
198
- modalElement.focus();
199
- }
200
-
201
- this.props.onEntered(id);
202
- }
203
-
204
- closeModal(id: string) {
205
- // Сбрасываем состояния, которые могут помешать закрытию модального окна
206
- this.setState({ touchDown: false });
207
-
208
- const prevModalState = this.props.getModalState(id);
209
-
210
- if (!prevModalState) {
211
- id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');
212
- return;
213
- }
214
- if (!this.state.modalOpenedLog.length) {
215
- this.setState((prevState) => ({
216
- modalOpenedLog: [...prevState.modalOpenedLog, id],
217
- }));
218
- }
219
- const nextModalState = this.props.getModalState(this.props.activeModal);
220
- const nextIsPage = !!nextModalState && nextModalState.type === 'page';
221
-
222
- const prevIsPage = !!prevModalState && prevModalState.type === 'page';
223
- this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));
224
- const exitTranslate =
225
- prevIsPage &&
226
- nextIsPage &&
227
- (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&
228
- !this.props.isBack
229
- ? (nextModalState?.translateYFrom ?? 0) + 10
230
- : 100;
231
- this.animateTranslate(prevModalState, exitTranslate);
232
-
233
- if (!nextModalState) {
234
- // NOTE: was only for clean exit
235
- this.setMaskOpacity(prevModalState, 0);
236
- this.setState({ modalOpenedLog: [] });
237
- prevModalState.translateY = undefined;
238
- prevModalState.expandable = undefined;
239
- } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {
240
- nextModalState.translateY = undefined;
241
- this.setState((prevState) => ({
242
- modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],
243
- }));
244
- }
245
- }
246
-
247
- onTouchMove = (e: CustomTouchEvent) => {
248
- if (this.props.exitingModal) {
249
- return;
250
- }
251
- const modalState = this.props.getModalState(this.props.activeModal);
252
- if (!modalState) {
253
- return;
254
- }
255
-
256
- if (modalState.type === 'page') {
257
- return this.onPageTouchMove(e, modalState);
258
- }
259
-
260
- if (modalState.type === 'card') {
261
- return this.onCardTouchMove(e, modalState);
262
- }
263
- };
264
-
265
- onPageTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {
266
- const { shiftY, originalEvent } = event;
267
- const target = originalEvent.target as HTMLElement;
268
-
269
- if (!event.isY) {
270
- if (this.viewportRef.current?.contains(target)) {
271
- originalEvent.preventDefault();
272
- }
273
- return;
274
- }
275
-
276
- if (!modalState.innerElement?.contains(target)) {
277
- return originalEvent.preventDefault();
278
- }
279
-
280
- originalEvent.stopPropagation();
281
-
282
- const { expandable, contentScrolled, collapsed, expanded } = modalState;
283
-
284
- if (!this.state.touchDown) {
285
- modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;
286
- this.setState({ touchDown: true });
287
- }
288
-
289
- if (contentScrolled) {
290
- return;
291
- }
292
-
293
- if (modalState.touchMovePositive === null) {
294
- modalState.touchMovePositive = shiftY > 0;
295
- }
296
-
297
- if (
298
- !modalState.expandable ||
299
- collapsed ||
300
- (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||
301
- modalState.headerElement?.contains(target)
302
- ) {
303
- originalEvent.preventDefault();
304
-
305
- if ((!expandable && shiftY < 0) || !this.window) {
306
- return;
307
- }
308
-
309
- !this.state.dragging && this.setState({ dragging: true });
310
-
311
- const shiftYPercent = (shiftY / this.window.innerHeight) * 100;
312
- const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== 'ios');
313
-
314
- modalState.touchShiftYPercent = shiftYPercent;
315
- modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);
316
-
317
- this.animateTranslate(modalState, modalState.translateYCurrent);
318
- this.setMaskOpacity(modalState);
319
- }
320
- }
321
-
322
- onCardTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {
323
- const { originalEvent, shiftY } = event;
324
- const target = originalEvent.target as HTMLElement;
325
- if (modalState.innerElement?.contains(target)) {
326
- if (!this.state.touchDown) {
327
- this.setState({ touchDown: true, dragging: true });
328
- }
329
-
330
- const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;
331
- const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== 'ios');
332
-
333
- modalState.touchShiftYPercent = shiftYPercent;
334
- modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);
335
-
336
- this.animateTranslate(modalState, modalState.translateYCurrent);
337
- this.setMaskOpacity(modalState);
338
- }
339
- }
340
-
341
- onTouchEnd = (e: CustomTouchEvent) => {
342
- const modalState = this.props.getModalState(this.props.activeModal);
343
-
344
- if (modalState?.type === 'page') {
345
- return this.onPageTouchEnd(e, modalState);
346
- }
347
-
348
- if (modalState?.type === 'card') {
349
- return this.onCardTouchEnd(e, modalState);
350
- }
351
- };
352
-
353
- onPageTouchEnd(event: CustomTouchEvent, modalState: ModalsStateEntry) {
354
- const { startY, shiftY } = event;
355
-
356
- modalState.contentScrolled = false;
357
- modalState.touchMovePositive = null;
358
-
359
- let setStateCallback;
360
-
361
- if (this.state.dragging && this.window) {
362
- const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;
363
-
364
- let translateY = modalState.translateYCurrent ?? 0;
365
- const expectTranslateY =
366
- (translateY / event.duration) *
367
- 240 *
368
- 0.6 *
369
- ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);
370
- translateY = rangeTranslate(translateY + expectTranslateY);
371
-
372
- if (modalState.settlingHeight !== 100) {
373
- if (numberInRange(translateY, modalState.expandedRange)) {
374
- translateY = modalState.expandedRange?.[0] ?? 0;
375
- } else if (numberInRange(translateY, modalState.collapsedRange)) {
376
- translateY = modalState.translateYFrom ?? 0;
377
- } else if (numberInRange(translateY, modalState.hiddenRange)) {
378
- translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;
379
- } else {
380
- translateY = modalState.translateYFrom ?? 0;
381
- }
382
- } else {
383
- if (numberInRange(translateY, [0, 25])) {
384
- translateY = 0;
385
- } else {
386
- translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;
387
- }
388
- }
389
-
390
- if (translateY !== 100 && shiftYEndPercent >= 75 && !modalState.preventClose) {
391
- translateY = 100;
392
- }
393
-
394
- modalState.translateY = translateY;
395
- modalState.translateYCurrent = translateY;
396
- modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);
397
- modalState.expanded = translateY === 0;
398
- modalState.hidden = translateY === 100;
399
-
400
- if (modalState.hidden) {
401
- this.props.onExit();
402
- }
403
-
404
- setStateCallback = () => {
405
- if (!modalState.hidden) {
406
- this.animateTranslate(modalState, modalState.translateY);
407
- }
408
-
409
- this.setMaskOpacity(modalState);
410
- };
411
- }
412
-
413
- this.setState(
414
- {
415
- touchDown: false,
416
- dragging: false,
417
- },
418
- setStateCallback,
419
- );
420
- }
421
-
422
- onCardTouchEnd({ duration }: CustomTouchEvent, modalState: ModalsStateEntry) {
423
- let setStateCallback;
424
-
425
- if (this.state.dragging) {
426
- let translateY = modalState.translateYCurrent ?? 0;
427
-
428
- const expectTranslateY =
429
- (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);
430
- translateY = Math.max(0, translateY + expectTranslateY);
431
-
432
- if (translateY >= 30) {
433
- translateY = 100;
434
- } else {
435
- translateY = 0;
436
- }
437
-
438
- modalState.translateY = translateY;
439
- modalState.hidden = translateY === 100;
440
-
441
- if (modalState.hidden) {
442
- this.props.onExit();
443
- }
444
-
445
- setStateCallback = () => {
446
- if (!modalState.hidden) {
447
- this.animateTranslate(modalState, modalState.translateY);
448
- }
449
-
450
- this.setMaskOpacity(modalState);
451
- };
452
- }
453
-
454
- this.setState(
455
- {
456
- touchDown: false,
457
- dragging: false,
458
- },
459
- setStateCallback,
460
- );
461
- }
462
-
463
- onScroll = (e: React.SyntheticEvent) => {
464
- const activeModal = this.props.activeModal;
465
-
466
- const target = e.target as HTMLElement;
467
-
468
- if (!activeModal) {
469
- return;
470
- }
471
- const modalState = this.props.getModalState(activeModal);
472
- if (modalState?.type === 'page' && modalState?.contentElement?.contains(target)) {
473
- modalState.contentScrolled = true;
474
-
475
- if (modalState.contentScrollStopTimeout) {
476
- clearTimeout(modalState.contentScrollStopTimeout);
477
- }
478
-
479
- modalState.contentScrollStopTimeout = setTimeout(() => {
480
- if (modalState.contentScrolled) {
481
- modalState.contentScrolled = false;
482
- }
483
- }, 250);
484
- }
485
- };
486
-
487
- waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {
488
- const el = modalState ? modalState.innerElement : null;
489
- if (el) {
490
- el.addEventListener('transitionend', eventHandler, { once: true });
491
- } else {
492
- setTimeout(eventHandler, this.timeout);
493
- }
494
- }
495
-
496
- /**
497
- * Анимирует сдвиг модалки
498
- *
499
- * @param {ModalsStateEntry} modalState
500
- * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта
501
- */
502
- animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {
503
- const frameId = `animateTranslateFrame${modalState.id}`;
504
-
505
- cancelAnimationFrame(this.frameIds[frameId]);
506
-
507
- this.frameIds[frameId] = requestAnimationFrame(() => {
508
- if (!modalState.innerElement) {
509
- return;
510
- }
511
- modalState.innerElement.style.transform = `translate3d(0, ${percent}%, 0)`;
512
- });
513
- }
514
-
515
- /* Устанавливает прозрачность для полупрозрачной подложки */
516
- setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {
517
- if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {
518
- return;
519
- }
520
- if (this.maskAnimationFrame) {
521
- cancelAnimationFrame(this.maskAnimationFrame);
522
- }
523
- this.maskAnimationFrame = requestAnimationFrame(() => {
524
- if (this.maskElementRef.current) {
525
- const { translateY = 0, translateYCurrent = 0 } = modalState;
526
-
527
- const opacity =
528
- forceOpacity === null
529
- ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0
530
- : forceOpacity;
531
- this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();
532
- this.maskElementRef.current.style.transitionDelay =
533
- opacity && this.props.delayEnter ? `${this.timeout}ms` : '';
534
- }
535
- });
536
- }
537
-
538
- render() {
539
- const { activeModal, exitingModal, enteringModal, modalOverlayTestId } = this.props;
540
- const { touchDown, dragging } = this.state;
541
-
542
- if (!activeModal && !exitingModal) {
543
- return null;
544
- }
545
-
546
- return (
547
- <TouchRootContext.Provider value={true}>
548
- <ModalRootContext.Provider value={this.modalRootContext}>
549
- <Touch
550
- className={classNames(
551
- styles.host,
552
- this.props.configProvider?.hasCustomPanelHeaderAfter &&
553
- styles.hasCustomPanelHeaderAfterSlot,
554
- touchDown && classNames(styles.touched, 'vkuiInternalModalRoot--touched'),
555
- !!(enteringModal || exitingModal) &&
556
- classNames(styles.switching, 'vkuiInternalModalRoot--switching'),
557
- )}
558
- onMove={this.onTouchMove}
559
- onEnd={this.onTouchEnd}
560
- onScroll={this.onScroll}
561
- >
562
- <div
563
- data-testid={modalOverlayTestId}
564
- className={styles.mask}
565
- onClick={this.props.onExit}
566
- ref={this.maskElementRef}
567
- />
568
- <div className={styles.viewport} ref={this.viewportRef}>
569
- {this.getModals().map((Modal) => {
570
- const modalId = getNavId(Modal.props, warn);
571
- const _modalState = this.props.getModalState(modalId);
572
- if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {
573
- return null;
574
- }
575
- const modalState = { ..._modalState };
576
-
577
- const isPage = modalState.type === 'page';
578
- const key = `modal-${modalId}`;
579
-
580
- return (
581
- <FocusTrap
582
- key={key}
583
- onClose={this.props.onExit}
584
- timeout={this.timeout}
585
- className={classNames(
586
- styles.modal,
587
-
588
- dragging && 'vkuiInternalModalRoot__modal--dragging',
589
-
590
- isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',
591
- isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',
592
- )}
593
- autoFocus={false}
594
- restoreFocus={false}
595
- >
596
- {Modal}
597
- </FocusTrap>
598
- );
599
- })}
600
- </div>
601
- </Touch>
602
- </ModalRootContext.Provider>
603
- </TouchRootContext.Provider>
604
- );
605
- }
606
- }
607
-
608
- export const ModalRootTouch: React.FC<ModalRootWithDOMProps> = withContext(
609
- withPlatform(
610
- withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),
611
- ),
612
- ConfigProviderContext,
613
- 'configProvider',
614
- );
615
-
616
13
  /**
617
- * Инициализирует модалку перед анимацией открытия
14
+ * @see https://vkcom.github.io/VKUI/#/ModalRoot
618
15
  */
619
- function initModal(modalState: ModalsStateEntry) {
620
- switch (modalState.type) {
621
- case 'page':
622
- modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;
623
- return initPageModal(modalState);
624
- case 'card':
625
- return initCardModal(modalState);
626
- default:
627
- process.env.NODE_ENV === 'development' &&
628
- warn(`initActiveModal: modalState.type="${modalState.type}" не поддерживается`, 'error');
629
- }
630
- }
16
+ export const ModalRoot = ({
17
+ activeModal,
18
+ children,
19
+ modalOverlayTestId,
20
+ noFocusToDialog,
21
+ usePortal,
22
+ onOpen,
23
+ onOpened,
24
+ onClose,
25
+ onClosed,
26
+ }: ModalRootProps): React.ReactNode => {
27
+ const contextValue = React.useMemo(
28
+ () => ({
29
+ isInsideModal: true,
631
30
 
632
- function initPageModal(modalState: ModalsStateEntry) {
633
- const { contentElement, bottomInset } = modalState;
634
- const contentElementHeight = calculateModalContentHeight(
635
- contentElement?.firstElementChild as HTMLElement,
636
- modalState.expandable,
31
+ // base props
32
+ activeModal,
33
+ modalOverlayTestId,
34
+ noFocusToDialog,
35
+
36
+ // callbacks
37
+ onOpen,
38
+ onOpened,
39
+ onClose,
40
+ onClosed,
41
+
42
+ // TODO [>=8] Удалить метод
43
+ updateModalHeight:
44
+ /* istanbul ignore next: deprecated */
45
+ process.env.NODE_ENV === 'development'
46
+ ? () => {
47
+ warn('Метод updateModalHeight() устарел и будет удалён в VKUI v8');
48
+ }
49
+ : noop,
50
+
51
+ // TODO [>=8] Удалить метод
52
+ registerModal:
53
+ /* istanbul ignore next: deprecated */
54
+ process.env.NODE_ENV === 'development'
55
+ ? () => {
56
+ warn('Метод registerModal() устарел и будет удалён в VKUI v8');
57
+ }
58
+ : noop,
59
+ }),
60
+ [activeModal, modalOverlayTestId, noFocusToDialog, onClose, onClosed, onOpen, onOpened],
637
61
  );
638
- const bottomInsetHeight = bottomInset?.offsetHeight || 0;
639
- const contentHeight = contentElementHeight + bottomInsetHeight;
640
- let prevTranslateY = modalState.translateY;
641
- let prevExpandable = modalState.expandable;
642
-
643
- modalState.expandable =
644
- contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;
645
-
646
- let collapsed = false;
647
- let expanded = false;
648
- let translateYFrom;
649
- let translateY;
650
- let expandedRange: TranslateRange;
651
- let collapsedRange: TranslateRange | undefined;
652
- let hiddenRange: TranslateRange;
653
-
654
- const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);
655
- if (modalState.expandable) {
656
- translateYFrom = 100 - (modalState.settlingHeight ?? 0);
657
-
658
- const shiftHalf = translateYFrom / 2;
659
- const visiblePart = 100 - translateYFrom;
660
-
661
- expandedRange = [0, shiftHalf];
662
- collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;
663
- hiddenRange = [translateYFrom + visiblePart / 4, 100];
664
-
665
- collapsed = hasCollapsedState && translateYFrom > 0;
666
- expanded = translateYFrom <= 0;
667
- translateY = translateYFrom;
668
- } else {
669
- const headerHeight = modalState.headerElement?.offsetHeight ?? 0;
670
- const height = contentHeight + headerHeight;
671
-
672
- translateYFrom =
673
- 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;
674
- translateY = translateYFrom;
675
-
676
- expandedRange = [translateY, translateY + 25];
677
- collapsedRange = undefined;
678
- hiddenRange = [translateY + 25, translateY + 100];
679
- }
680
-
681
- // Свойство expandable может измениться из-за высоты контента, в таком случае на всю высоту не разворачиваем
682
- const shouldExpand = prevExpandable && modalState.expandable;
683
- // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран
684
- if ((shouldExpand && translateY > (prevTranslateY ?? 100)) || modalState.settlingHeight === 100) {
685
- translateY = 0;
686
- }
687
-
688
- // Если модалка уже раскрыта обновляем состояния
689
- if (translateY === 0) {
690
- expanded = true;
691
- collapsed = false;
692
- }
693
-
694
- modalState.expandedRange = expandedRange;
695
- modalState.collapsedRange = collapsedRange;
696
- modalState.hiddenRange = hiddenRange;
697
- modalState.translateY = translateY;
698
- modalState.translateYFrom = translateYFrom;
699
- modalState.collapsed = collapsed;
700
- modalState.expanded = expanded;
701
- }
702
-
703
- function initCardModal(modalState: ModalsStateEntry) {
704
- modalState.translateY = 0;
705
- }
706
-
707
- function calculateModalContentHeight(
708
- element: HTMLElement,
709
- isExpandable: ModalsStateEntry['expandable'],
710
- ) {
711
- if (!isExpandable) {
712
- return element.scrollHeight;
713
- }
714
-
715
- /*
716
- * В режиме expandable мы назначаем контейнеру контента высоту 100%, что не даёт
717
- * получить реальную высоту контента.
718
- * Поэтому мы пересчитываем высоту, временно устанавливая height: auto;
719
- * */
720
- const currentHeightStyle = element.style.height;
721
- element.style.height = 'auto';
722
-
723
- const elementHeight = element.scrollHeight;
724
- element.style.height = currentHeightStyle;
725
-
726
- return elementHeight;
727
- }
62
+ const modalOverlayRef = React.useRef<HTMLDivElement>(null);
63
+ return (
64
+ <ModalPopoutPortal usePortal={usePortal}>
65
+ <ModalRootContext.Provider value={contextValue}>
66
+ <ModalRootOverlayContext.Provider value={modalOverlayRef}>
67
+ <ModalOverlay visible={typeof activeModal === 'string'} getRootRef={modalOverlayRef} />
68
+ {children}
69
+ </ModalRootOverlayContext.Provider>
70
+ </ModalRootContext.Provider>
71
+ </ModalPopoutPortal>
72
+ );
73
+ };