@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 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { type DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport type { ModalRootWithDOMProps, ModalsStateEntry, TranslateRange } from './types';\nimport { type ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === 'ios' ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const enteringState = this.props.getModalState(this.props.enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState) {\n if (enteringState.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.onEntered(enteringState);\n }\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (enabled) {\n // восстанавливаем значение overscroll behavior\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.remove('vkui--disable-overscroll-behavior');\n } else {\n // отключаем нативный pull-to-refresh при открытом модальном окне\n // чтобы он не срабатывал при закрытии модалки смахиванием вниз\n // eslint-disable-next-line no-restricted-properties\n this.document.documentElement.classList.add('vkui--disable-overscroll-behavior');\n }\n }\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page' && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === 'page') {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n onEntered({ id, modalElement }: ModalsStateEntry) {\n if (\n !this.props.noFocusToDialog &&\n modalElement &&\n !modalElement.contains(this.document.activeElement)\n ) {\n modalElement.focus();\n }\n\n this.props.onEntered(id);\n }\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === 'page';\n\n const prevIsPage = !!prevModalState && prevModalState.type === 'page';\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n prevModalState.expandable = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: CustomTouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === 'page') {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === 'card') {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== 'ios');\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: CustomTouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === 'page') {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === 'card') {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: CustomTouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = modalState.preventClose ? modalState.translateYFrom ?? 0 : 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75 && !modalState.preventClose) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: CustomTouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === 'page' && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n const el = modalState ? modalState.innerElement : null;\n if (el) {\n el.addEventListener('transitionend', eventHandler, { once: true });\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n if (!modalState.innerElement) {\n return;\n }\n modalState.innerElement.style.transform = `translate3d(0, ${percent}%, 0)`;\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal, modalOverlayTestId } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles.host,\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles.hasCustomPanelHeaderAfterSlot,\n touchDown && classNames(styles.touched, 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles.switching, 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles.mask}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles.viewport} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === 'page';\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles.modal,\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n autoFocus={false}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch: React.FC<ModalRootWithDOMProps> = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case 'page':\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case 'card':\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = calculateModalContentHeight(\n contentElement?.firstElementChild as HTMLElement,\n modalState.expandable,\n );\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n let prevExpandable = modalState.expandable;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) || modalState.settlingHeight === 100;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Свойство expandable может измениться из-за высоты контента, в таком случае на всю высоту не разворачиваем\n const shouldExpand = prevExpandable && modalState.expandable;\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if ((shouldExpand && translateY > (prevTranslateY ?? 100)) || modalState.settlingHeight === 100) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n\nfunction calculateModalContentHeight(\n element: HTMLElement,\n isExpandable: ModalsStateEntry['expandable'],\n) {\n if (!isExpandable) {\n return element.scrollHeight;\n }\n\n /*\n * В режиме expandable мы назначаем контейнеру контента высоту 100%, что не даёт\n * получить реальную высоту контента.\n * Поэтому мы пересчитываем высоту, временно устанавливая height: auto;\n * */\n const currentHeightStyle = element.style.height;\n element.style.height = 'auto';\n\n const elementHeight = element.scrollHeight;\n element.style.height = currentHeightStyle;\n\n return elementHeight;\n}\n"],"names":["React","classNames","clamp","withContext","withPlatform","withDOM","getNavId","rubber","warnOnce","ConfigProviderContext","FocusTrap","Touch","TouchRootContext","ModalRootContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","withModalManager","styles","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","Component","constructor","props","state","touchDown","dragging","modalOpenedLog","maskElementRef","createRef","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","getModalState","onClose","onExit","isInsideModal","frameIds","viewportRef","maskAnimationFrame","undefined","restoreFocusTo","timeout","platform","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","exitingModal","closeModal","enteringModal","enteringState","onEnter","waitTransitionFinish","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeModal","activeElement","focus","enabled","documentElement","classList","remove","add","checkPageContentHeight","modalState","type","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","requestAnimationFrame","noFocusToDialog","contains","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","onTouchMove","e","onPageTouchMove","onCardTouchMove","event","shiftY","originalEvent","target","isY","current","preventDefault","stopPropagation","contentScrolled","collapsed","expanded","touchStartContentScrollTop","contentElement","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","onTouchEnd","onPageTouchEnd","onCardTouchEnd","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","preventClose","hidden","onScroll","contentScrollStopTimeout","clearTimeout","setTimeout","eventHandler","el","once","percent","frameId","cancelAnimationFrame","transform","forceOpacity","history","opacity","toString","render","modalOverlayTestId","Provider","value","className","host","configProvider","hasCustomPanelHeaderAfter","hasCustomPanelHeaderAfterSlot","touched","switching","onMove","onEnd","div","data-testid","mask","onClick","ref","viewport","map","Modal","modalId","_modalState","isPage","key","modal","autoFocus","restoreFocus","ModalRootTouch","initModal","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","calculateModalContentHeight","firstElementChild","bottomInsetHeight","contentHeight","prevTranslateY","prevExpandable","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement","shouldExpand","element","isExpandable","scrollHeight","currentHeightStyle","elementHeight"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ModalPopoutPortal } from '../AppRoot/ModalPopoutPortal';\nimport { ModalOverlay } from '../ModalOverlay/ModalOverlay';\nimport { ModalRootContext, ModalRootOverlayContext } from './ModalRootContext';\nimport type { ModalRootProps } from './types';\n\nconst warn = warnOnce('ModalRoot');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalRoot\n */\nexport const ModalRoot = ({\n activeModal,\n children,\n modalOverlayTestId,\n noFocusToDialog,\n usePortal,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n}: ModalRootProps): React.ReactNode => {\n const contextValue = React.useMemo(\n () => ({\n isInsideModal: true,\n\n // base props\n activeModal,\n modalOverlayTestId,\n noFocusToDialog,\n\n // callbacks\n onOpen,\n onOpened,\n onClose,\n onClosed,\n\n // TODO [>=8] Удалить метод\n updateModalHeight:\n /* istanbul ignore next: deprecated */\n process.env.NODE_ENV === 'development'\n ? () => {\n warn('Метод updateModalHeight() устарел и будет удалён в VKUI v8');\n }\n : noop,\n\n // TODO [>=8] Удалить метод\n registerModal:\n /* istanbul ignore next: deprecated */\n process.env.NODE_ENV === 'development'\n ? () => {\n warn('Метод registerModal() устарел и будет удалён в VKUI v8');\n }\n : noop,\n }),\n [activeModal, modalOverlayTestId, noFocusToDialog, onClose, onClosed, onOpen, onOpened],\n );\n const modalOverlayRef = React.useRef<HTMLDivElement>(null);\n return (\n <ModalPopoutPortal usePortal={usePortal}>\n <ModalRootContext.Provider value={contextValue}>\n <ModalRootOverlayContext.Provider value={modalOverlayRef}>\n <ModalOverlay visible={typeof activeModal === 'string'} getRootRef={modalOverlayRef} />\n {children}\n </ModalRootOverlayContext.Provider>\n </ModalRootContext.Provider>\n </ModalPopoutPortal>\n );\n};\n"],"names":["React","noop","warnOnce","ModalPopoutPortal","ModalOverlay","ModalRootContext","ModalRootOverlayContext","warn","ModalRoot","activeModal","children","modalOverlayTestId","noFocusToDialog","usePortal","onOpen","onOpened","onClose","onClosed","contextValue","useMemo","isInsideModal","updateModalHeight","process","env","NODE_ENV","registerModal","modalOverlayRef","useRef","Provider","value","visible","getRootRef"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,iBAAiB,QAAQ,kCAA+B;AACjE,SAASC,YAAY,QAAQ,kCAA+B;AAC5D,SAASC,gBAAgB,EAAEC,uBAAuB,QAAQ,wBAAqB;AAG/E,MAAMC,OAAOL,SAAS;AAEtB;;CAEC,GACD,OAAO,MAAMM,YAAY,CAAC,EACxBC,WAAW,EACXC,QAAQ,EACRC,kBAAkB,EAClBC,eAAe,EACfC,SAAS,EACTC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACO;IACf,MAAMC,eAAelB,MAAMmB,OAAO,CAChC,IAAO,CAAA;YACLC,eAAe;YAEf,aAAa;YACbX;YACAE;YACAC;YAEA,YAAY;YACZE;YACAC;YACAC;YACAC;YAEA,2BAA2B;YAC3BI,mBACE,oCAAoC,GACpCC,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACrB;gBACEjB,KAAK;YACP,IACAN;YAEN,2BAA2B;YAC3BwB,eACE,oCAAoC,GACpCH,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACrB;gBACEjB,KAAK;YACP,IACAN;QACR,CAAA,GACA;QAACQ;QAAaE;QAAoBC;QAAiBI;QAASC;QAAUH;QAAQC;KAAS;IAEzF,MAAMW,kBAAkB1B,MAAM2B,MAAM,CAAiB;IACrD,qBACE,KAACxB;QAAkBU,WAAWA;kBAC5B,cAAA,KAACR,iBAAiBuB,QAAQ;YAACC,OAAOX;sBAChC,cAAA,MAACZ,wBAAwBsB,QAAQ;gBAACC,OAAOH;;kCACvC,KAACtB;wBAAa0B,SAAS,OAAOrB,gBAAgB;wBAAUsB,YAAYL;;oBACnEhB;;;;;AAKX,EAAE"}
@@ -1,44 +1,17 @@
1
- import * as React from "react";
2
- import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
3
- export const ModalRootContext = /*#__PURE__*/ React.createContext({
4
- updateModalHeight: ()=>undefined,
5
- registerModal: ()=>undefined,
1
+ import { createContext } from "react";
2
+ import { noop } from "@vkontakte/vkjs";
3
+ /**
4
+ * Сохраняем `ref` компонента `ModalOverlay` из `ModalRoot` в контекст, чтобы можно было пробросить
5
+ * его до `ModalPage` и `ModalCard`.
6
+ *
7
+ * @private
8
+ */ export const ModalRootOverlayContext = /*#__PURE__*/ createContext({
9
+ current: null
10
+ });
11
+ export const ModalRootContext = /*#__PURE__*/ createContext({
12
+ updateModalHeight: noop,
13
+ registerModal: noop,
6
14
  isInsideModal: false
7
15
  });
8
- /**
9
- * All referenced elements must be static
10
- */ export function useModalRegistry(id, type) {
11
- const modalContext = React.useContext(ModalRootContext);
12
- const elements = React.useRef({}).current;
13
- useIsomorphicLayoutEffect(()=>{
14
- if (id !== undefined) {
15
- modalContext.registerModal({
16
- ...elements,
17
- type,
18
- id
19
- });
20
- // unset refs on unmount to prevent leak
21
- const reset = Object.keys(elements).reduce((acc, k)=>({
22
- ...acc,
23
- [k]: null
24
- }), {
25
- type,
26
- id
27
- });
28
- return ()=>modalContext.registerModal(reset);
29
- }
30
- return undefined;
31
- }, []);
32
- const refs = React.useRef({
33
- modalElement: (e)=>elements.modalElement = e,
34
- innerElement: (e)=>elements.innerElement = e,
35
- headerElement: (e)=>elements.headerElement = e,
36
- contentElement: (e)=>elements.contentElement = e,
37
- bottomInset: (e)=>elements.bottomInset = e
38
- }).current;
39
- return {
40
- refs
41
- };
42
- }
43
16
 
44
17
  //# sourceMappingURL=ModalRootContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { ModalElements, ModalsStateEntry, ModalType } from './types';\n\nexport type ModalRegistryEntry = ModalElements & Required<Pick<ModalsStateEntry, 'type' | 'id'>>;\ntype ModalRefs = { [k in keyof ModalElements]: (e: ModalElements[k]) => void };\n\nexport interface ModalRootContextInterface {\n updateModalHeight: VoidFunction;\n registerModal: (data: ModalRegistryEntry) => void;\n onClose?: VoidFunction;\n isInsideModal: boolean;\n}\n\nexport const ModalRootContext: React.Context<ModalRootContextInterface> =\n React.createContext<ModalRootContextInterface>({\n updateModalHeight: () => undefined,\n registerModal: () => undefined,\n isInsideModal: false,\n });\n\n/**\n * All referenced elements must be static\n */\nexport function useModalRegistry(\n id: string | undefined,\n type: ModalType,\n): {\n refs: Required<ModalRefs>;\n} {\n const modalContext = React.useContext(ModalRootContext);\n const elements = React.useRef<ModalElements>({}).current;\n useIsomorphicLayoutEffect(() => {\n if (id !== undefined) {\n modalContext.registerModal({ ...elements, type, id });\n // unset refs on unmount to prevent leak\n const reset = Object.keys(elements).reduce<ModalRegistryEntry>(\n (acc, k) => ({ ...acc, [k]: null }),\n { type, id },\n );\n return () => modalContext.registerModal(reset);\n }\n return undefined;\n }, []);\n\n const refs = React.useRef<Required<ModalRefs>>({\n modalElement: (e) => (elements.modalElement = e),\n innerElement: (e) => (elements.innerElement = e),\n headerElement: (e) => (elements.headerElement = e),\n contentElement: (e) => (elements.contentElement = e),\n bottomInset: (e) => (elements.bottomInset = e),\n }).current;\n return { refs };\n}\n"],"names":["React","useIsomorphicLayoutEffect","ModalRootContext","createContext","updateModalHeight","undefined","registerModal","isInsideModal","useModalRegistry","id","type","modalContext","useContext","elements","useRef","current","reset","Object","keys","reduce","acc","k","refs","modalElement","e","innerElement","headerElement","contentElement","bottomInset"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,yCAAsC;AAahF,OAAO,MAAMC,iCACXF,MAAMG,aAAa,CAA4B;IAC7CC,mBAAmB,IAAMC;IACzBC,eAAe,IAAMD;IACrBE,eAAe;AACjB,GAAG;AAEL;;CAEC,GACD,OAAO,SAASC,iBACdC,EAAsB,EACtBC,IAAe;IAIf,MAAMC,eAAeX,MAAMY,UAAU,CAACV;IACtC,MAAMW,WAAWb,MAAMc,MAAM,CAAgB,CAAC,GAAGC,OAAO;IACxDd,0BAA0B;QACxB,IAAIQ,OAAOJ,WAAW;YACpBM,aAAaL,aAAa,CAAC;gBAAE,GAAGO,QAAQ;gBAAEH;gBAAMD;YAAG;YACnD,yCAAyC;YACzC,MAAMO,QAAQC,OAAOC,IAAI,CAACL,UAAUM,MAAM,CACxC,CAACC,KAAKC,IAAO,CAAA;oBAAE,GAAGD,GAAG;oBAAE,CAACC,EAAE,EAAE;gBAAK,CAAA,GACjC;gBAAEX;gBAAMD;YAAG;YAEb,OAAO,IAAME,aAAaL,aAAa,CAACU;QAC1C;QACA,OAAOX;IACT,GAAG,EAAE;IAEL,MAAMiB,OAAOtB,MAAMc,MAAM,CAAsB;QAC7CS,cAAc,CAACC,IAAOX,SAASU,YAAY,GAAGC;QAC9CC,cAAc,CAACD,IAAOX,SAASY,YAAY,GAAGD;QAC9CE,eAAe,CAACF,IAAOX,SAASa,aAAa,GAAGF;QAChDG,gBAAgB,CAACH,IAAOX,SAASc,cAAc,GAAGH;QAClDI,aAAa,CAACJ,IAAOX,SAASe,WAAW,GAAGJ;IAC9C,GAAGT,OAAO;IACV,OAAO;QAAEO;IAAK;AAChB"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootContext.tsx"],"sourcesContent":["import { createContext, type RefObject } from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport type { ModalRootContextInterface } from './types';\n\n/**\n * Сохраняем `ref` компонента `ModalOverlay` из `ModalRoot` в контекст, чтобы можно было пробросить\n * его до `ModalPage` и `ModalCard`.\n *\n * @private\n */\nexport const ModalRootOverlayContext = createContext<RefObject<HTMLDivElement>>({ current: null });\n\nexport const ModalRootContext = createContext<ModalRootContextInterface>({\n updateModalHeight: noop,\n registerModal: noop,\n isInsideModal: false,\n});\n"],"names":["createContext","noop","ModalRootOverlayContext","current","ModalRootContext","updateModalHeight","registerModal","isInsideModal"],"mappings":"AAAA,SAASA,aAAa,QAAwB,QAAQ;AACtD,SAASC,IAAI,QAAQ,kBAAkB;AAGvC;;;;;CAKC,GACD,OAAO,MAAMC,wCAA0BF,cAAyC;IAAEG,SAAS;AAAK,GAAG;AAEnG,OAAO,MAAMC,iCAAmBJ,cAAyC;IACvEK,mBAAmBJ;IACnBK,eAAeL;IACfM,eAAe;AACjB,GAAG"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useContext } from "react";
4
+ import { setRef } from "../../../lib/utils.js";
5
+ import { ModalRootOverlayContext } from "../ModalRootContext.js";
6
+ import styles from "./VisuallyHiddenModalOverlay.module.css";
7
+ /**
8
+ * `ModalRoot` выставляет общий `ModalOverlay` для всех потомков, и чтобы не нарушить логику
9
+ * в `ModalPage` и `ModalCard`, в них прокидывается данный компонент, который визуально не виден,
10
+ * но при этом на нём сохраняется возможность взаимодействия.
11
+ *
12
+ * В `getRooRef` отдаёт ссылку на DOM общего `ModalOverlay`.
13
+ *
14
+ * @private
15
+ */ export const VisuallyHiddenModalOverlay = ({ visible: visibleExcluded, position: positionExcluded, getRootRef, ...restProps })=>{
16
+ const ref = useContext(ModalRootOverlayContext);
17
+ return /*#__PURE__*/ _jsx("div", {
18
+ ...restProps,
19
+ "aria-hidden": "true",
20
+ className: styles.host,
21
+ ref: function handleCurrentRefForForwardContextRef() {
22
+ setRef(ref.current, getRootRef);
23
+ }
24
+ });
25
+ };
26
+
27
+ //# sourceMappingURL=VisuallyHiddenModalOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx"],"sourcesContent":["'use client';\n\nimport { useContext } from 'react';\nimport { setRef } from '../../../lib/utils';\nimport type { ModalOverlayProps } from '../../ModalOverlay/ModalOverlay';\nimport { ModalRootOverlayContext } from '../ModalRootContext';\nimport styles from './VisuallyHiddenModalOverlay.module.css';\n\nexport type VisuallyHiddenModalOverlayProps = ModalOverlayProps;\n\n/**\n * `ModalRoot` выставляет общий `ModalOverlay` для всех потомков, и чтобы не нарушить логику\n * в `ModalPage` и `ModalCard`, в них прокидывается данный компонент, который визуально не виден,\n * но при этом на нём сохраняется возможность взаимодействия.\n *\n * В `getRooRef` отдаёт ссылку на DOM общего `ModalOverlay`.\n *\n * @private\n */\nexport const VisuallyHiddenModalOverlay = ({\n visible: visibleExcluded,\n position: positionExcluded,\n getRootRef,\n ...restProps\n}: VisuallyHiddenModalOverlayProps) => {\n const ref = useContext(ModalRootOverlayContext);\n return (\n <div\n {...restProps}\n aria-hidden=\"true\"\n className={styles.host}\n ref={function handleCurrentRefForForwardContextRef() {\n setRef(ref.current, getRootRef);\n }}\n />\n );\n};\n"],"names":["useContext","setRef","ModalRootOverlayContext","styles","VisuallyHiddenModalOverlay","visible","visibleExcluded","position","positionExcluded","getRootRef","restProps","ref","div","aria-hidden","className","host","handleCurrentRefForForwardContextRef","current"],"mappings":"AAAA;;AAEA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,MAAM,QAAQ,wBAAqB;AAE5C,SAASC,uBAAuB,QAAQ,yBAAsB;AAC9D,OAAOC,YAAY,0CAA0C;AAI7D;;;;;;;;CAQC,GACD,OAAO,MAAMC,6BAA6B,CAAC,EACzCC,SAASC,eAAe,EACxBC,UAAUC,gBAAgB,EAC1BC,UAAU,EACV,GAAGC,WAC6B;IAChC,MAAMC,MAAMX,WAAWE;IACvB,qBACE,KAACU;QACE,GAAGF,SAAS;QACbG,eAAY;QACZC,WAAWX,OAAOY,IAAI;QACtBJ,KAAK,SAASK;YACZf,OAAOU,IAAIM,OAAO,EAAER;QACtB;;AAGN,EAAE"}
@@ -0,0 +1,8 @@
1
+ .host {
2
+ position: absolute;
3
+ inset: 0;
4
+ -webkit-user-select: none;
5
+ -moz-user-select: none;
6
+ user-select: none;
7
+ -webkit-tap-highlight-color: transparent;
8
+ }
@@ -1,3 +1,3 @@
1
- export { };
1
+ /** TODO [>=8] Удалить deprecated типы */ export { };
2
2
 
3
3
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["import type { DOMContextInterface } from '../../lib/dom';\nimport type { HasPlatform } from '../../types';\nimport type { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\n\nexport type ModalType = 'page' | 'card';\n\nexport type TranslateRange = [number, number];\n\nexport type ModalsState = { [index: string]: ModalsStateEntry };\n\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n bottomInset?: HTMLElement | null;\n}\n\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n /**\n * Отключает возможность закрыть модалку стандартными способами\n */\n preventClose?: boolean;\n}\n\nexport interface ModalRootProps {\n activeModal?: string | null;\n children: React.ReactElement | Iterable<React.ReactElement>;\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?: (modalId: string) => void;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?: (modalId: string) => void;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?: (modalId: string) => void;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?: (modalId: string) => void;\n\n /**\n * `data-testid` для маски\n */\n modalOverlayTestId?: string;\n\n /**\n * Отключает фокус на контейнер диалогового окна при открытии.\n */\n noFocusToDialog?: boolean;\n}\n\nexport interface ModalRootWithDOMProps extends HasPlatform, ModalRootProps, DOMContextInterface {\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n}\n"],"names":[],"mappings":"AA6GA,WAKC"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/types.ts"],"sourcesContent":["/** TODO [>=8] Удалить deprecated типы */\nimport type { AppRootPortalProps } from '../AppRoot/AppRootPortal';\n\n/**\n * @deprecated будет удалён в **VKUI v8**\n */\nexport type ModalType = 'page' | 'card';\n\n/**\n * @deprecated будет удалён в **VKUI v8**\n */\nexport type TranslateRange = [number, number];\n\n/**\n * @deprecated будет удалён в **VKUI v8**\n */\nexport interface ModalElements {\n modalElement?: HTMLElement | null;\n innerElement?: HTMLElement | null;\n headerElement?: HTMLElement | null;\n contentElement?: HTMLElement | null;\n bottomInset?: HTMLElement | null;\n}\n\n/**\n * @deprecated будет удалён в **VKUI v8**\n */\nexport interface ModalsStateEntry extends ModalElements {\n id: string | null;\n /**\n * Событие начала открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Событие открытия модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Событие начала закрытия модалки.\n */\n onClose?: VoidFunction;\n /**\n * Событие закрытия модалки.\n */\n onClosed?: VoidFunction;\n type?: ModalType;\n\n settlingHeight?: number;\n expandable?: boolean;\n\n /**\n * Процент текущего сдвига модалки\n */\n translateY?: number;\n /**\n * Процент сдвига модалки в изначальном состоянии\n */\n translateYFrom?: number;\n /**\n * Процент сдвига модалки во время взаимодействия с ней (потянуть, чтобы открыть или закрыть)\n */\n translateYCurrent?: number;\n\n touchStartContentScrollTop?: number;\n touchMovePositive?: boolean | null;\n touchShiftYPercent?: number;\n\n expanded?: boolean;\n collapsed?: boolean;\n hidden?: boolean;\n\n contentScrolled?: boolean;\n contentScrollStopTimeout?: ReturnType<typeof setTimeout>;\n\n expandedRange?: TranslateRange;\n collapsedRange?: TranslateRange;\n hiddenRange?: TranslateRange;\n /**\n * Отключает возможность закрыть модалку стандартными способами\n */\n preventClose?: boolean;\n}\n\nexport type ModalRootActiveModal = string | null;\n\nexport type ModalRootCallbackFunction = (modalId: string) => void;\n\ntype ModalRootBaseProps = {\n activeModal?: ModalRootActiveModal;\n\n /**\n * `data-testid` для маски\n */\n modalOverlayTestId?: string;\n\n /**\n * Отключает фокус на контейнер диалогового окна при открытии.\n */\n noFocusToDialog?: boolean;\n\n usePortal?: AppRootPortalProps['usePortal'];\n\n /**\n * Будет вызвано при начале открытия активной модалки с её id\n */\n onOpen?: ModalRootCallbackFunction;\n\n /**\n * Будет вызвано при окончательном открытии активной модалки с её id\n */\n onOpened?: ModalRootCallbackFunction;\n\n /**\n * Будет вызвано при начале закрытия активной модалки с её id\n */\n onClose?: ModalRootCallbackFunction;\n\n /**\n * Будет вызвано при окончательном закрытии активной модалки с её id\n */\n onClosed?: ModalRootCallbackFunction;\n};\n\nexport interface ModalRootProps extends ModalRootBaseProps {\n children: React.ReactElement | Iterable<React.ReactElement>;\n}\n\ntype ModalRootContextBaseInterface = {\n /**\n * Обозначает, в контексте ли модального окна мы сейчас.\n */\n isInsideModal: boolean;\n\n /**\n * С **VKUI v7** задача с обновлением высоты контента при `dynamicContentHeight` решается через CSS.\n *\n * @deprecated будет удалён в **VKUI v8**\n */\n updateModalHeight: VoidFunction;\n\n /**\n * С **VKUI v7** регистрация модальных окон больше не требуется.\n *\n * @deprecated будет удалён в **VKUI v8**\n */\n registerModal: (data: ModalElements & Required<Pick<ModalsStateEntry, 'type' | 'id'>>) => void;\n};\n\nexport interface ModalRootContextInterface\n extends ModalRootContextBaseInterface,\n ModalRootBaseProps {}\n\nexport interface UseModalRootContext extends ModalRootContextBaseInterface {\n onClose?: VoidFunction;\n}\n"],"names":[],"mappings":"AAAA,uCAAuC,GAwJvC,WAEC"}
@@ -1,206 +1,48 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import { isFunction, noop } from "@vkontakte/vkjs";
5
- import { getNavId } from "../../lib/getNavId.js";
1
+ import { useContext, useState } from "react";
6
2
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
7
- import { warnOnce } from "../../lib/warnOnce.js";
8
- function getModals(children) {
9
- return React.Children.toArray(children);
10
- }
11
- const warn = warnOnce('ModalRoot');
12
- export function modalTransitionReducer(state, action) {
13
- if (action.type === 'setActive' && action.id !== state.activeModal) {
14
- const nextModal = action.id;
15
- // preserve exiting modal if switching mid-transition
16
- const prevModal = state.exitingModal || state.activeModal;
17
- let history = state.history ? [
18
- ...state.history
19
- ] : [];
20
- const isBack = Boolean(nextModal && history.includes(nextModal));
21
- if (nextModal === null) {
22
- history = [];
23
- } else if (isBack) {
24
- history = history.splice(0, history.indexOf(nextModal) + 1);
25
- } else {
26
- history.push(nextModal);
3
+ import { ModalOverlay } from "../ModalOverlay/ModalOverlay.js";
4
+ import { ModalRootContext } from "./ModalRootContext.js";
5
+ import { VisuallyHiddenModalOverlay } from "./VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js";
6
+ export const useModalManager = ({ id, open, keepMounted, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed })=>{
7
+ const context = useContext(ModalRootContext);
8
+ const opened = context.isInsideModal ? context.activeModal === id : open;
9
+ const [unmounted, setUnmounted] = useState(keepMounted ? false : !opened);
10
+ useIsomorphicLayoutEffect(function unsetUnmounted() {
11
+ if (!keepMounted && opened) {
12
+ setUnmounted((prev)=>prev ? false : prev);
27
13
  }
14
+ }, [
15
+ opened,
16
+ keepMounted
17
+ ]);
18
+ if (unmounted) {
28
19
  return {
29
- activeModal: nextModal,
30
- // not entering yet
31
- enteringModal: null,
32
- exitingModal: prevModal,
33
- history,
34
- isBack
35
- };
36
- }
37
- if (action.type === 'entered' && action.id === state.enteringModal) {
38
- return {
39
- ...state,
40
- enteringModal: null
41
- };
42
- }
43
- if (action.type === 'exited' && action.id === state.exitingModal) {
44
- return {
45
- ...state,
46
- exitingModal: null
47
- };
48
- }
49
- if (action.type === 'inited' && action.id === state.activeModal) {
50
- return {
51
- ...state,
52
- enteringModal: action.id
20
+ mounted: false
53
21
  };
54
22
  }
55
- return state;
56
- }
57
- /**
58
- * Реализует переход модалок. При смене activeModal m1 -> m2:
59
- * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода
60
- * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода
61
- * одновременный переход между ModalPage:
62
- * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2
63
- * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации
64
- * ИЛИ дожидаемся скрытия ModalCard
65
- * 3b. activeModal: m2, exitingModal: null, enteringModal: m2
66
- * 4b. enteringModal переходит в null после завершения анимации
67
- * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен
68
- */ export function useModalManager(activeModal, children, onOpen = noop, onOpened = noop, onClose = noop, onClosed = noop, initModal = noop) {
69
- const modalsState = React.useRef({}).current;
70
- getModals(children).forEach((Modal)=>{
71
- const modalProps = Modal.props;
72
- const id = getNavId(modalProps, warn);
73
- const state = id !== undefined && modalsState[id] || {
74
- id: id ?? null
75
- };
76
- state.onOpen = Modal.props.onOpen;
77
- state.onOpened = Modal.props.onOpened;
78
- state.onClose = Modal.props.onClose;
79
- state.onClosed = Modal.props.onClosed;
80
- state.preventClose = Modal.props.preventClose;
81
- // ModalPage props
82
- if (typeof modalProps.settlingHeight === 'number') {
83
- state.settlingHeight = modalProps.settlingHeight;
84
- }
85
- if (state.id !== null) {
86
- modalsState[state.id] = state;
87
- }
88
- });
89
- const isMissing = activeModal && !modalsState[activeModal];
90
- const safeActiveModal = isMissing ? null : activeModal;
91
- const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {
92
- activeModal: safeActiveModal,
93
- enteringModal: null,
94
- exitingModal: null,
95
- history: safeActiveModal ? [
96
- safeActiveModal
97
- ] : [],
98
- isBack: false
99
- });
100
- // Map props to state, render activeModal for init
101
- useIsomorphicLayoutEffect(()=>{
102
- // ignore non-existent activeModal
103
- if (process.env.NODE_ENV === 'development' && isMissing) {
104
- warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');
105
- }
106
- dispatchTransition({
107
- type: 'setActive',
108
- id: safeActiveModal ?? null
109
- });
110
- }, [
111
- activeModal
112
- ]);
113
- // Init activeModal & set enteringModal
114
- useIsomorphicLayoutEffect(()=>{
115
- if (transitionState.activeModal) {
116
- initModal(modalsState[transitionState.activeModal]);
117
- dispatchTransition({
118
- type: 'inited',
119
- id: transitionState.activeModal
120
- });
121
- }
122
- }, [
123
- transitionState.activeModal
124
- ]);
125
- const isCard = (id)=>id != null && modalsState[id]?.type === 'card';
126
- const onEntered = React.useCallback((id)=>{
127
- if (id) {
128
- const modalState = modalsState[id];
129
- if (isFunction(modalState.onOpened)) {
130
- modalState.onOpened();
131
- } else if (isFunction(onOpened)) {
132
- onOpened(id);
133
- }
134
- }
135
- dispatchTransition({
136
- type: 'entered',
137
- id
138
- });
139
- }, [
140
- modalsState,
141
- onOpened
142
- ]);
143
- const onExited = React.useCallback((id)=>{
144
- if (id) {
145
- const modalState = modalsState[id];
146
- if (isFunction(modalState.onClosed)) {
147
- modalState.onClosed();
148
- } else if (isFunction(onClosed)) {
149
- onClosed(id);
150
- }
151
- }
152
- dispatchTransition({
153
- type: 'exited',
154
- id
155
- });
156
- }, [
157
- modalsState,
158
- onClosed
159
- ]);
160
- const delayEnter = Boolean(transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)));
161
- const getModalState = React.useCallback((id)=>id ? modalsState[id] : undefined, [
162
- modalsState
163
- ]);
164
- function onEnter() {
165
- const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];
166
- if (modalState) {
167
- if (isFunction(modalState.onOpen)) {
168
- modalState.onOpen();
169
- } else if (isFunction(onOpen) && modalState.id) {
170
- onOpen(modalState.id);
23
+ return {
24
+ mounted: true,
25
+ open: opened,
26
+ noFocusToDialog: noFocusToDialog || context.noFocusToDialog,
27
+ modalOverlayTestId: modalOverlayTestId || context.modalOverlayTestId,
28
+ ModalOverlay: context.isInsideModal ? VisuallyHiddenModalOverlay : ModalOverlay,
29
+ onOpen: onOpen || getContextCallback(id, context.onOpen),
30
+ onOpened: onOpened || getContextCallback(id, context.onOpened),
31
+ onClose: onClose || getContextCallback(id, context.onClose),
32
+ onClosed: function handleClosed(...args) {
33
+ if (!keepMounted) {
34
+ setUnmounted(true);
171
35
  }
172
- }
173
- }
174
- function onExit() {
175
- const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];
176
- if (modalState && !modalState.preventClose) {
177
- if (isFunction(modalState.onClose)) {
178
- modalState.onClose();
179
- } else if (isFunction(onClose) && modalState.id) {
180
- onClose(modalState.id);
36
+ if (onClosed) {
37
+ onClosed(...args);
38
+ } else {
39
+ context.onClosed?.(id);
181
40
  }
182
41
  }
183
- }
184
- return {
185
- onEnter,
186
- onEntered,
187
- onExit,
188
- onExited,
189
- ...transitionState,
190
- delayEnter,
191
- getModalState
192
- };
193
- }
194
- export function withModalManager(initModal = noop) {
195
- return function(Wrapped) {
196
- return function WithModalManager(props) {
197
- const transitionManager = useModalManager(props.activeModal, props.children, props.onOpen, props.onOpened, props.onClose, props.onClosed, initModal);
198
- return /*#__PURE__*/ _jsx(Wrapped, {
199
- ...props,
200
- ...transitionManager
201
- });
202
- };
203
42
  };
43
+ };
44
+ function getContextCallback(id, fn) {
45
+ return fn ? ()=>fn(id) : undefined;
204
46
  }
205
47
 
206
48
  //# sourceMappingURL=useModalManager.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\nimport { getNavId } from '../../lib/getNavId';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasChildren } from '../../types';\nimport type { ModalsState, ModalsStateEntry } from './types';\n\ninterface ModalTransitionState {\n activeModal?: string | null;\n enteringModal?: string | null;\n exitingModal?: string | null;\n history?: string[];\n isBack?: boolean | null;\n}\n\nexport interface ModalTransitionProps extends ModalTransitionState {\n onEnter: VoidFunction;\n onEntered: (id: string | null) => void;\n onExit: VoidFunction;\n onExited: (id: string | null) => void;\n getModalState: (id: string | undefined | null) => ModalsStateEntry | undefined;\n delayEnter: boolean;\n}\n\nfunction getModals(children: React.ReactNode | React.ReactNode[]) {\n return React.Children.toArray(children) as React.ReactElement[];\n}\n\nconst warn = warnOnce('ModalRoot');\n\nexport function modalTransitionReducer(\n state: ModalTransitionState,\n action: {\n type: 'setActive' | 'entered' | 'exited' | 'inited';\n id: string | null;\n },\n): ModalTransitionState {\n if (action.type === 'setActive' && action.id !== state.activeModal) {\n const nextModal = action.id;\n // preserve exiting modal if switching mid-transition\n const prevModal = state.exitingModal || state.activeModal;\n let history = state.history ? [...state.history] : [];\n const isBack = Boolean(nextModal && history.includes(nextModal));\n\n if (nextModal === null) {\n history = [];\n } else if (isBack) {\n history = history.splice(0, history.indexOf(nextModal) + 1);\n } else {\n history.push(nextModal);\n }\n\n return {\n activeModal: nextModal,\n // not entering yet\n enteringModal: null,\n exitingModal: prevModal,\n history,\n isBack,\n };\n }\n if (action.type === 'entered' && action.id === state.enteringModal) {\n return { ...state, enteringModal: null };\n }\n if (action.type === 'exited' && action.id === state.exitingModal) {\n return { ...state, exitingModal: null };\n }\n if (action.type === 'inited' && action.id === state.activeModal) {\n return { ...state, enteringModal: action.id };\n }\n return state;\n}\n\n/**\n * Реализует переход модалок. При смене activeModal m1 -> m2:\n * 1. activeModal: m1, exitingModal: null, enteringModal: null, триггер перехода\n * 2. activeModal: m2, exitingModal: m1, enteringModal: null, рендерим m2 чтобы прошел init, начинаем анимацию выхода\n * одновременный переход между ModalPage:\n * 3a. activeModal: m2, exitingModal: m1, enteringModal: m2\n * 4a. exitingModal и enteringModal переходят в null в порядке завершения анимации\n * ИЛИ дожидаемся скрытия ModalCard\n * 3b. activeModal: m2, exitingModal: null, enteringModal: m2\n * 4b. enteringModal переходит в null после завершения анимации\n * 5. activeModal: m2, exitingModal: null, enteringModal: null, переход закончен\n */\nexport function useModalManager(\n activeModal: string | null | undefined,\n children: React.ReactNode | React.ReactNode[],\n onOpen: (id: string) => void = noop,\n onOpened: (id: string) => void = noop,\n onClose: (id: string) => void = noop,\n onClosed: (id: string) => void = noop,\n initModal: (state: ModalsStateEntry) => void = noop,\n): ModalTransitionProps {\n const modalsState = React.useRef<ModalsState>({}).current;\n getModals(children).forEach((Modal) => {\n const modalProps = Modal.props;\n const id = getNavId(modalProps, warn);\n const state: ModalsStateEntry = (id !== undefined && modalsState[id]) || {\n id: id ?? null,\n };\n\n state.onOpen = Modal.props.onOpen;\n state.onOpened = Modal.props.onOpened;\n state.onClose = Modal.props.onClose;\n state.onClosed = Modal.props.onClosed;\n state.preventClose = Modal.props.preventClose;\n // ModalPage props\n if (typeof modalProps.settlingHeight === 'number') {\n state.settlingHeight = modalProps.settlingHeight;\n }\n\n if (state.id !== null) {\n modalsState[state.id] = state;\n }\n });\n\n const isMissing = activeModal && !modalsState[activeModal];\n const safeActiveModal = isMissing ? null : activeModal;\n const [transitionState, dispatchTransition] = React.useReducer(modalTransitionReducer, {\n activeModal: safeActiveModal,\n enteringModal: null,\n exitingModal: null,\n history: safeActiveModal ? [safeActiveModal] : [],\n isBack: false,\n });\n\n // Map props to state, render activeModal for init\n useIsomorphicLayoutEffect(() => {\n // ignore non-existent activeModal\n if (process.env.NODE_ENV === 'development' && isMissing) {\n warn(`Переход невозможен - модальное окно (страница) ${activeModal} не существует`, 'error');\n }\n dispatchTransition({ type: 'setActive', id: safeActiveModal ?? null });\n }, [activeModal]);\n\n // Init activeModal & set enteringModal\n useIsomorphicLayoutEffect(() => {\n if (transitionState.activeModal) {\n initModal(modalsState[transitionState.activeModal]);\n dispatchTransition({ type: 'inited', id: transitionState.activeModal });\n }\n }, [transitionState.activeModal]);\n\n const isCard = (id: string | null | undefined) => id != null && modalsState[id]?.type === 'card';\n const onEntered = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onOpened)) {\n modalState.onOpened();\n } else if (isFunction(onOpened)) {\n onOpened(id);\n }\n }\n\n dispatchTransition({ type: 'entered', id });\n },\n [modalsState, onOpened],\n );\n const onExited = React.useCallback(\n (id: string | null) => {\n if (id) {\n const modalState = modalsState[id];\n\n if (isFunction(modalState.onClosed)) {\n modalState.onClosed();\n } else if (isFunction(onClosed)) {\n onClosed(id);\n }\n }\n\n dispatchTransition({ type: 'exited', id });\n },\n [modalsState, onClosed],\n );\n const delayEnter = Boolean(\n transitionState.exitingModal && (isCard(activeModal) || isCard(transitionState.exitingModal)),\n );\n const getModalState = React.useCallback(\n (id: string | undefined | null) => (id ? modalsState[id] : undefined),\n [modalsState],\n );\n\n function onEnter() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState) {\n if (isFunction(modalState.onOpen)) {\n modalState.onOpen();\n } else if (isFunction(onOpen) && modalState.id) {\n onOpen(modalState.id);\n }\n }\n }\n\n function onExit() {\n const modalState = transitionState.activeModal && modalsState[transitionState.activeModal];\n if (modalState && !modalState.preventClose) {\n if (isFunction(modalState.onClose)) {\n modalState.onClose();\n } else if (isFunction(onClose) && modalState.id) {\n onClose(modalState.id);\n }\n }\n }\n\n return {\n onEnter,\n onEntered,\n onExit,\n onExited,\n ...transitionState,\n delayEnter,\n getModalState,\n };\n}\n\ntype WithModalManager<Props extends ModalTransitionProps> = HasChildren &\n Omit<Props, keyof ModalTransitionProps> & {\n activeModal?: string | null;\n };\n\nexport function withModalManager(initModal: (a: ModalsStateEntry) => void = noop) {\n return function <Props extends ModalTransitionProps>(\n Wrapped: React.ComponentType<Props>,\n ): React.ComponentType<WithModalManager<Props>> {\n return function WithModalManager(props) {\n const transitionManager = useModalManager(\n props.activeModal,\n props.children,\n (props as any).onOpen,\n (props as any).onOpened,\n (props as any).onClose,\n (props as any).onClosed,\n initModal,\n );\n return <Wrapped {...(props as any)} {...transitionManager} />;\n };\n };\n}\n"],"names":["React","isFunction","noop","getNavId","useIsomorphicLayoutEffect","warnOnce","getModals","children","Children","toArray","warn","modalTransitionReducer","state","action","type","id","activeModal","nextModal","prevModal","exitingModal","history","isBack","Boolean","includes","splice","indexOf","push","enteringModal","useModalManager","onOpen","onOpened","onClose","onClosed","initModal","modalsState","useRef","current","forEach","Modal","modalProps","props","undefined","preventClose","settlingHeight","isMissing","safeActiveModal","transitionState","dispatchTransition","useReducer","process","env","NODE_ENV","isCard","onEntered","useCallback","modalState","onExited","delayEnter","getModalState","onEnter","onExit","withModalManager","Wrapped","WithModalManager","transitionManager"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/useModalManager.tsx"],"sourcesContent":["import { useContext, useState } from 'react';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { AnyFunction } from '../../types';\nimport { ModalOverlay, type ModalOverlayProps } from '../ModalOverlay/ModalOverlay';\nimport { ModalRootContext } from './ModalRootContext';\nimport { VisuallyHiddenModalOverlay } from './VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay';\nimport type { ModalRootCallbackFunction } from './types';\n\nexport interface UseModalManager {\n id: string;\n open: boolean;\n keepMounted: boolean;\n modalOverlayTestId?: string;\n noFocusToDialog?: boolean;\n onOpen?: AnyFunction;\n onOpened?: AnyFunction;\n onClose?: AnyFunction;\n onClosed?: AnyFunction;\n}\n\nexport interface UseModalManagerResolvedProps {\n open: boolean;\n noFocusToDialog?: boolean;\n modalOverlayTestId?: string;\n ModalOverlay: React.ComponentType<ModalOverlayProps>;\n onOpen?: AnyFunction;\n onOpened?: AnyFunction;\n onClose?: AnyFunction;\n onClosed?: AnyFunction;\n}\n\nexport type UseModalManagerResult =\n | { mounted: false }\n | ({ mounted: true } & UseModalManagerResolvedProps);\n\nexport const useModalManager = ({\n id,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n}: UseModalManager): UseModalManagerResult => {\n const context = useContext(ModalRootContext);\n const opened = context.isInsideModal ? context.activeModal === id : open;\n\n const [unmounted, setUnmounted] = useState(keepMounted ? false : !opened);\n\n useIsomorphicLayoutEffect(\n function unsetUnmounted() {\n if (!keepMounted && opened) {\n setUnmounted((prev) => (prev ? false : prev));\n }\n },\n [opened, keepMounted],\n );\n\n if (unmounted) {\n return { mounted: false };\n }\n\n return {\n mounted: true,\n open: opened,\n noFocusToDialog: noFocusToDialog || context.noFocusToDialog,\n modalOverlayTestId: modalOverlayTestId || context.modalOverlayTestId,\n ModalOverlay: context.isInsideModal ? VisuallyHiddenModalOverlay : ModalOverlay,\n onOpen: onOpen || getContextCallback(id, context.onOpen),\n onOpened: onOpened || getContextCallback(id, context.onOpened),\n onClose: onClose || getContextCallback(id, context.onClose),\n onClosed: function handleClosed(...args: any[]) {\n if (!keepMounted) {\n setUnmounted(true);\n }\n\n if (onClosed) {\n onClosed(...args);\n } else {\n context.onClosed?.(id);\n }\n },\n };\n};\n\nfunction getContextCallback(id: string, fn: ModalRootCallbackFunction | undefined) {\n return fn ? () => fn(id) : undefined;\n}\n"],"names":["useContext","useState","useIsomorphicLayoutEffect","ModalOverlay","ModalRootContext","VisuallyHiddenModalOverlay","useModalManager","id","open","keepMounted","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","context","opened","isInsideModal","activeModal","unmounted","setUnmounted","unsetUnmounted","prev","mounted","getContextCallback","handleClosed","args","fn","undefined"],"mappings":"AAAA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,QAAQ;AAC7C,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAASC,YAAY,QAAgC,kCAA+B;AACpF,SAASC,gBAAgB,QAAQ,wBAAqB;AACtD,SAASC,0BAA0B,QAAQ,6DAA0D;AA8BrG,OAAO,MAAMC,kBAAkB,CAAC,EAC9BC,EAAE,EACFC,IAAI,EACJC,WAAW,EACXC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACQ;IAChB,MAAMC,UAAUhB,WAAWI;IAC3B,MAAMa,SAASD,QAAQE,aAAa,GAAGF,QAAQG,WAAW,KAAKZ,KAAKC;IAEpE,MAAM,CAACY,WAAWC,aAAa,GAAGpB,SAASQ,cAAc,QAAQ,CAACQ;IAElEf,0BACE,SAASoB;QACP,IAAI,CAACb,eAAeQ,QAAQ;YAC1BI,aAAa,CAACE,OAAUA,OAAO,QAAQA;QACzC;IACF,GACA;QAACN;QAAQR;KAAY;IAGvB,IAAIW,WAAW;QACb,OAAO;YAAEI,SAAS;QAAM;IAC1B;IAEA,OAAO;QACLA,SAAS;QACThB,MAAMS;QACNN,iBAAiBA,mBAAmBK,QAAQL,eAAe;QAC3DD,oBAAoBA,sBAAsBM,QAAQN,kBAAkB;QACpEP,cAAca,QAAQE,aAAa,GAAGb,6BAA6BF;QACnES,QAAQA,UAAUa,mBAAmBlB,IAAIS,QAAQJ,MAAM;QACvDC,UAAUA,YAAYY,mBAAmBlB,IAAIS,QAAQH,QAAQ;QAC7DC,SAASA,WAAWW,mBAAmBlB,IAAIS,QAAQF,OAAO;QAC1DC,UAAU,SAASW,aAAa,GAAGC,IAAW;YAC5C,IAAI,CAAClB,aAAa;gBAChBY,aAAa;YACf;YAEA,IAAIN,UAAU;gBACZA,YAAYY;YACd,OAAO;gBACLX,QAAQD,QAAQ,GAAGR;YACrB;QACF;IACF;AACF,EAAE;AAEF,SAASkB,mBAAmBlB,EAAU,EAAEqB,EAAyC;IAC/E,OAAOA,KAAK,IAAMA,GAAGrB,MAAMsB;AAC7B"}
@@ -1,5 +1,21 @@
1
- import * as React from "react";
1
+ import { useCallback, useContext } from "react";
2
2
  import { ModalRootContext } from "./ModalRootContext.js";
3
- export const useModalRootContext = ()=>React.useContext(ModalRootContext);
3
+ export const useModalRootContext = ()=>{
4
+ const { activeModal, isInsideModal, onClose: onCloseContext, updateModalHeight, registerModal } = useContext(ModalRootContext);
5
+ const onClose = useCallback(()=>{
6
+ if (onCloseContext && activeModal !== null && activeModal !== undefined) {
7
+ onCloseContext(activeModal);
8
+ }
9
+ }, [
10
+ activeModal,
11
+ onCloseContext
12
+ ]);
13
+ return {
14
+ isInsideModal,
15
+ onClose,
16
+ updateModalHeight,
17
+ registerModal
18
+ };
19
+ };
4
20
 
5
21
  //# sourceMappingURL=useModalRootContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/useModalRootContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\n\nexport const useModalRootContext = (): ModalRootContextInterface =>\n React.useContext(ModalRootContext);\n"],"names":["React","ModalRootContext","useModalRootContext","useContext"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,QAAwC,wBAAqB;AAEtF,OAAO,MAAMC,sBAAsB,IACjCF,MAAMG,UAAU,CAACF,kBAAkB"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/useModalRootContext.ts"],"sourcesContent":["import { useCallback, useContext } from 'react';\nimport { ModalRootContext } from './ModalRootContext';\nimport type { UseModalRootContext } from './types';\n\nexport const useModalRootContext = (): UseModalRootContext => {\n const {\n activeModal,\n isInsideModal,\n onClose: onCloseContext,\n updateModalHeight,\n registerModal,\n } = useContext(ModalRootContext);\n\n const onClose = useCallback(() => {\n if (onCloseContext && activeModal !== null && activeModal !== undefined) {\n onCloseContext(activeModal);\n }\n }, [activeModal, onCloseContext]);\n\n return { isInsideModal, onClose, updateModalHeight, registerModal };\n};\n"],"names":["useCallback","useContext","ModalRootContext","useModalRootContext","activeModal","isInsideModal","onClose","onCloseContext","updateModalHeight","registerModal","undefined"],"mappings":"AAAA,SAASA,WAAW,EAAEC,UAAU,QAAQ,QAAQ;AAChD,SAASC,gBAAgB,QAAQ,wBAAqB;AAGtD,OAAO,MAAMC,sBAAsB;IACjC,MAAM,EACJC,WAAW,EACXC,aAAa,EACbC,SAASC,cAAc,EACvBC,iBAAiB,EACjBC,aAAa,EACd,GAAGR,WAAWC;IAEf,MAAMI,UAAUN,YAAY;QAC1B,IAAIO,kBAAkBH,gBAAgB,QAAQA,gBAAgBM,WAAW;YACvEH,eAAeH;QACjB;IACF,GAAG;QAACA;QAAaG;KAAe;IAEhC,OAAO;QAAEF;QAAeC;QAASE;QAAmBC;IAAc;AACpE,EAAE"}
@@ -1,10 +1,13 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import { useModalRootContext } from "./useModalRootContext.js";
5
- export function withModalRootContext(Component) {
3
+ /** TODO [>=8] Удалить HOC */ import * as React from "react";
4
+ import { ModalRootContext } from "./ModalRootContext.js";
5
+ /**
6
+ * @deprecated HOC не актуален и будет удалён в **VKUI v8**, т.к. вызывать `updateModalHeight()`
7
+ * для модальных окон с `dynamicContentHeight` больше не требуется.
8
+ */ export function withModalRootContext(Component) {
6
9
  function WithModalRootContext(props) {
7
- const { updateModalHeight } = useModalRootContext();
10
+ const { updateModalHeight } = React.useContext(ModalRootContext);
8
11
  return /*#__PURE__*/ _jsx(Component, {
9
12
  ...props,
10
13
  updateModalHeight: updateModalHeight