@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,4 +1,5 @@
1
- import { BREAKPOINTS } from "./breakpoints.js";
1
+ import { getWindow } from "../dom.js";
2
+ import { BREAKPOINTS, MEDIA_QUERIES } from "./breakpoints.js";
2
3
  import { VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP, ViewHeight, ViewWidth } from "./constants.js";
3
4
  /**
4
5
  * @public
@@ -77,6 +78,11 @@ export function tryToCheckIsDesktop(viewWidth, viewHeight, hasPointer, platform)
77
78
  const otherParametersIsLikeDesktop = hasPointer || (viewHeight !== undefined ? viewHeight >= ViewHeight.MEDIUM : false);
78
79
  return widthIsLikeDesktop && otherParametersIsLikeDesktop || IS_VKCOM_CRUTCH;
79
80
  }
81
+ export function isSmallTablePlus(el) {
82
+ const win = getWindow(el);
83
+ // eslint-disable-next-line no-restricted-properties
84
+ return win ? win.matchMedia(MEDIA_QUERIES.SMALL_TABLET_PLUS).matches : false;
85
+ }
80
86
  /**
81
87
  * Конвертирует `viewWidth` в CSS брейкпоинты (см. тесты для наглядности).
82
88
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/adaptivity/functions.ts"],"sourcesContent":["import type { Exact } from '../../types';\nimport { type PlatformType } from '../platform';\nimport { BREAKPOINTS } from './breakpoints';\nimport {\n type SizeTypeValues,\n VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP,\n ViewHeight,\n type ViewHeightType,\n ViewWidth,\n type ViewWidthType,\n} from './constants';\nimport type { CSSBreakpointsClassNames, MediaQueries } from './types';\n\n/**\n * @public\n */\nexport function getViewWidthByViewportWidth(viewportWidth: number): ViewWidthType {\n if (viewportWidth >= BREAKPOINTS.DESKTOP) {\n return ViewWidth.DESKTOP;\n }\n if (viewportWidth >= BREAKPOINTS.TABLET) {\n return ViewWidth.TABLET;\n }\n if (viewportWidth >= BREAKPOINTS.SMALL_TABLET) {\n return ViewWidth.SMALL_TABLET;\n }\n if (viewportWidth >= BREAKPOINTS.MOBILE) {\n return ViewWidth.MOBILE;\n }\n return ViewWidth.SMALL_MOBILE;\n}\n\nexport function getViewWidthByMediaQueries(mediaQueries: MediaQueries): ViewWidthType {\n /* eslint-disable no-restricted-properties */\n if (mediaQueries.desktopPlus.matches) {\n return ViewWidth.DESKTOP;\n }\n if (mediaQueries.tablet.matches) {\n return ViewWidth.TABLET;\n }\n if (mediaQueries.smallTablet.matches) {\n return ViewWidth.SMALL_TABLET;\n }\n if (mediaQueries.mobile.matches) {\n return ViewWidth.MOBILE;\n }\n /* eslint-enable no-restricted-properties */\n return ViewWidth.SMALL_MOBILE;\n}\n\n/**\n * @public\n */\nexport function getViewHeightByViewportHeight(viewportHeight: number): ViewHeightType {\n if (viewportHeight >= BREAKPOINTS.MEDIUM_HEIGHT) {\n return ViewHeight.MEDIUM;\n }\n if (viewportHeight >= BREAKPOINTS.MOBILE_LANDSCAPE_HEIGHT) {\n return ViewHeight.SMALL;\n }\n return ViewHeight.EXTRA_SMALL;\n}\n\nexport function getViewHeightByMediaQueries(mediaQueries: MediaQueries): ViewHeightType {\n /* eslint-disable no-restricted-properties */\n if (mediaQueries.mediumHeight.matches) {\n return ViewHeight.MEDIUM;\n }\n if (mediaQueries.mobileLandscapeHeight.matches) {\n return ViewHeight.SMALL;\n }\n /* eslint-enable no-restricted-properties */\n return ViewHeight.EXTRA_SMALL;\n}\n\nexport function getSizeX(viewWidth: ViewWidthType): SizeTypeValues {\n return viewWidth <= ViewWidth.MOBILE ? 'compact' : 'regular';\n}\n\nexport function isCompactByViewWidth(\n viewWidth: ViewWidthType | undefined,\n hasPointer?: boolean,\n): boolean | undefined {\n return viewWidth !== undefined && viewWidth >= ViewWidth.SMALL_TABLET && hasPointer;\n}\n\nexport function isCompactByViewHeight(viewHeight: ViewHeightType | undefined): boolean {\n return viewHeight !== undefined && viewHeight <= ViewHeight.EXTRA_SMALL;\n}\n\nexport function getSizeY(\n viewWidth: ViewWidthType,\n viewHeight: ViewHeightType,\n hasPointer: boolean,\n): SizeTypeValues {\n if (isCompactByViewWidth(viewWidth, hasPointer) || isCompactByViewHeight(viewHeight)) {\n return 'compact';\n }\n return 'regular';\n}\n\n/**\n * Проверка на Desktop.\n *\n * Функция гарантировано вернёт `boolean` или `null` в зависимости от условий.\n *\n * Возвращаем `null` в случае, если у нас недостаточно данных, чтобы определить платформу.\n *\n * ⚠️ При передаче 'vkcom' всегда будет возвращать `true`.\n */\nexport function tryToCheckIsDesktop(viewWidth: ViewWidthType, viewHeight: ViewHeightType, hasPointer: undefined | boolean, platform?: PlatformType): boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: ViewWidthType, viewHeight: undefined, hasPointer: boolean, platform?: PlatformType): boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined | ViewWidthType, viewHeight: undefined, hasPointer: undefined, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined, viewHeight: undefined | ViewHeightType, hasPointer: undefined, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined, viewHeight: undefined, hasPointer: undefined | boolean, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined | ViewWidthType, viewHeight: undefined | ViewHeightType, hasPointer: undefined | boolean, platform?: PlatformType): null | boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(\n viewWidth: undefined | ViewWidthType,\n viewHeight: undefined | ViewHeightType,\n hasPointer: undefined | boolean,\n platform?: PlatformType,\n): null | boolean {\n // см. https://github.com/VKCOM/VKUI/pull/2473\n const IS_VKCOM_CRUTCH = platform === 'vkcom';\n\n if (\n ((viewWidth === undefined || hasPointer === undefined) &&\n (viewWidth === undefined || viewHeight === undefined)) ||\n (hasPointer === undefined && viewHeight === undefined)\n ) {\n return IS_VKCOM_CRUTCH ? true : null;\n }\n\n const widthIsLikeDesktop = viewWidth >= ViewWidth.SMALL_TABLET;\n const otherParametersIsLikeDesktop =\n hasPointer || (viewHeight !== undefined ? viewHeight >= ViewHeight.MEDIUM : false);\n\n return (widthIsLikeDesktop && otherParametersIsLikeDesktop) || IS_VKCOM_CRUTCH;\n}\n\n/**\n * Конвертирует `viewWidth` в CSS брейкпоинты (см. тесты для наглядности).\n *\n * > Note: используется восклицательный знак (!), чтобы принудить TS поверить, что св-во точно не может быть\n * > `undefined`. Это всё из-за применения `Partial<...>` для объекта.\n */\nexport function viewWidthToClassName<T extends Partial<CSSBreakpointsClassNames>>(\n breakpointClassNames: Exact<CSSBreakpointsClassNames, T>,\n viewWidth: ViewWidthType | 'none' = 'none',\n): string | null {\n if (viewWidth === 'none') {\n return breakpointClassNames.hasOwnProperty('none') ? breakpointClassNames['none']! : null;\n }\n\n const breakpoints: string[] = [];\n const breakpointName = VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP[viewWidth];\n\n if (breakpointClassNames.hasOwnProperty(breakpointName)) {\n breakpoints.push(breakpointClassNames[breakpointName]!);\n }\n\n if (viewWidth >= ViewWidth.MOBILE) {\n if (breakpointClassNames.hasOwnProperty('mobilePlus')) {\n breakpoints.push(breakpointClassNames['mobilePlus']!);\n }\n }\n\n if (viewWidth >= ViewWidth.SMALL_TABLET) {\n if (breakpointClassNames.hasOwnProperty('smallTabletPlus')) {\n breakpoints.push(breakpointClassNames['smallTabletPlus']!);\n }\n } else {\n if (breakpointClassNames.hasOwnProperty('smallTabletMinus')) {\n breakpoints.push(breakpointClassNames['smallTabletMinus']!);\n }\n }\n\n if (viewWidth >= ViewWidth.TABLET) {\n if (breakpointClassNames.hasOwnProperty('tabletPlus')) {\n breakpoints.push(breakpointClassNames['tabletPlus']!);\n }\n } else {\n if (breakpointClassNames.hasOwnProperty('tabletMinus')) {\n breakpoints.push(breakpointClassNames['tabletMinus']!);\n }\n }\n\n return breakpoints.length > 0 ? breakpoints.join(' ') : null;\n}\n"],"names":["BREAKPOINTS","VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP","ViewHeight","ViewWidth","getViewWidthByViewportWidth","viewportWidth","DESKTOP","TABLET","SMALL_TABLET","MOBILE","SMALL_MOBILE","getViewWidthByMediaQueries","mediaQueries","desktopPlus","matches","tablet","smallTablet","mobile","getViewHeightByViewportHeight","viewportHeight","MEDIUM_HEIGHT","MEDIUM","MOBILE_LANDSCAPE_HEIGHT","SMALL","EXTRA_SMALL","getViewHeightByMediaQueries","mediumHeight","mobileLandscapeHeight","getSizeX","viewWidth","isCompactByViewWidth","hasPointer","undefined","isCompactByViewHeight","viewHeight","getSizeY","tryToCheckIsDesktop","platform","IS_VKCOM_CRUTCH","widthIsLikeDesktop","otherParametersIsLikeDesktop","viewWidthToClassName","breakpointClassNames","hasOwnProperty","breakpoints","breakpointName","push","length","join"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/adaptivity/functions.ts"],"sourcesContent":["import type { Exact } from '../../types';\nimport { getWindow } from '../dom';\nimport { type PlatformType } from '../platform';\nimport { BREAKPOINTS, MEDIA_QUERIES } from './breakpoints';\nimport {\n type SizeTypeValues,\n VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP,\n ViewHeight,\n type ViewHeightType,\n ViewWidth,\n type ViewWidthType,\n} from './constants';\nimport type { CSSBreakpointsClassNames, MediaQueries } from './types';\n\n/**\n * @public\n */\nexport function getViewWidthByViewportWidth(viewportWidth: number): ViewWidthType {\n if (viewportWidth >= BREAKPOINTS.DESKTOP) {\n return ViewWidth.DESKTOP;\n }\n if (viewportWidth >= BREAKPOINTS.TABLET) {\n return ViewWidth.TABLET;\n }\n if (viewportWidth >= BREAKPOINTS.SMALL_TABLET) {\n return ViewWidth.SMALL_TABLET;\n }\n if (viewportWidth >= BREAKPOINTS.MOBILE) {\n return ViewWidth.MOBILE;\n }\n return ViewWidth.SMALL_MOBILE;\n}\n\nexport function getViewWidthByMediaQueries(mediaQueries: MediaQueries): ViewWidthType {\n /* eslint-disable no-restricted-properties */\n if (mediaQueries.desktopPlus.matches) {\n return ViewWidth.DESKTOP;\n }\n if (mediaQueries.tablet.matches) {\n return ViewWidth.TABLET;\n }\n if (mediaQueries.smallTablet.matches) {\n return ViewWidth.SMALL_TABLET;\n }\n if (mediaQueries.mobile.matches) {\n return ViewWidth.MOBILE;\n }\n /* eslint-enable no-restricted-properties */\n return ViewWidth.SMALL_MOBILE;\n}\n\n/**\n * @public\n */\nexport function getViewHeightByViewportHeight(viewportHeight: number): ViewHeightType {\n if (viewportHeight >= BREAKPOINTS.MEDIUM_HEIGHT) {\n return ViewHeight.MEDIUM;\n }\n if (viewportHeight >= BREAKPOINTS.MOBILE_LANDSCAPE_HEIGHT) {\n return ViewHeight.SMALL;\n }\n return ViewHeight.EXTRA_SMALL;\n}\n\nexport function getViewHeightByMediaQueries(mediaQueries: MediaQueries): ViewHeightType {\n /* eslint-disable no-restricted-properties */\n if (mediaQueries.mediumHeight.matches) {\n return ViewHeight.MEDIUM;\n }\n if (mediaQueries.mobileLandscapeHeight.matches) {\n return ViewHeight.SMALL;\n }\n /* eslint-enable no-restricted-properties */\n return ViewHeight.EXTRA_SMALL;\n}\n\nexport function getSizeX(viewWidth: ViewWidthType): SizeTypeValues {\n return viewWidth <= ViewWidth.MOBILE ? 'compact' : 'regular';\n}\n\nexport function isCompactByViewWidth(\n viewWidth: ViewWidthType | undefined,\n hasPointer?: boolean,\n): boolean | undefined {\n return viewWidth !== undefined && viewWidth >= ViewWidth.SMALL_TABLET && hasPointer;\n}\n\nexport function isCompactByViewHeight(viewHeight: ViewHeightType | undefined): boolean {\n return viewHeight !== undefined && viewHeight <= ViewHeight.EXTRA_SMALL;\n}\n\nexport function getSizeY(\n viewWidth: ViewWidthType,\n viewHeight: ViewHeightType,\n hasPointer: boolean,\n): SizeTypeValues {\n if (isCompactByViewWidth(viewWidth, hasPointer) || isCompactByViewHeight(viewHeight)) {\n return 'compact';\n }\n return 'regular';\n}\n\n/**\n * Проверка на Desktop.\n *\n * Функция гарантировано вернёт `boolean` или `null` в зависимости от условий.\n *\n * Возвращаем `null` в случае, если у нас недостаточно данных, чтобы определить платформу.\n *\n * ⚠️ При передаче 'vkcom' всегда будет возвращать `true`.\n */\nexport function tryToCheckIsDesktop(viewWidth: ViewWidthType, viewHeight: ViewHeightType, hasPointer: undefined | boolean, platform?: PlatformType): boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: ViewWidthType, viewHeight: undefined, hasPointer: boolean, platform?: PlatformType): boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined | ViewWidthType, viewHeight: undefined, hasPointer: undefined, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined, viewHeight: undefined | ViewHeightType, hasPointer: undefined, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined, viewHeight: undefined, hasPointer: undefined | boolean, platform?: PlatformType): null; // prettier-ignore\nexport function tryToCheckIsDesktop(viewWidth: undefined | ViewWidthType, viewHeight: undefined | ViewHeightType, hasPointer: undefined | boolean, platform?: PlatformType): null | boolean; // prettier-ignore\nexport function tryToCheckIsDesktop(\n viewWidth: undefined | ViewWidthType,\n viewHeight: undefined | ViewHeightType,\n hasPointer: undefined | boolean,\n platform?: PlatformType,\n): null | boolean {\n // см. https://github.com/VKCOM/VKUI/pull/2473\n const IS_VKCOM_CRUTCH = platform === 'vkcom';\n\n if (\n ((viewWidth === undefined || hasPointer === undefined) &&\n (viewWidth === undefined || viewHeight === undefined)) ||\n (hasPointer === undefined && viewHeight === undefined)\n ) {\n return IS_VKCOM_CRUTCH ? true : null;\n }\n\n const widthIsLikeDesktop = viewWidth >= ViewWidth.SMALL_TABLET;\n const otherParametersIsLikeDesktop =\n hasPointer || (viewHeight !== undefined ? viewHeight >= ViewHeight.MEDIUM : false);\n\n return (widthIsLikeDesktop && otherParametersIsLikeDesktop) || IS_VKCOM_CRUTCH;\n}\n\nexport function isSmallTablePlus(el: HTMLElement) {\n const win = getWindow(el);\n // eslint-disable-next-line no-restricted-properties\n return win ? win.matchMedia(MEDIA_QUERIES.SMALL_TABLET_PLUS).matches : false;\n}\n\n/**\n * Конвертирует `viewWidth` в CSS брейкпоинты (см. тесты для наглядности).\n *\n * > Note: используется восклицательный знак (!), чтобы принудить TS поверить, что св-во точно не может быть\n * > `undefined`. Это всё из-за применения `Partial<...>` для объекта.\n */\nexport function viewWidthToClassName<T extends Partial<CSSBreakpointsClassNames>>(\n breakpointClassNames: Exact<CSSBreakpointsClassNames, T>,\n viewWidth: ViewWidthType | 'none' = 'none',\n): string | null {\n if (viewWidth === 'none') {\n return breakpointClassNames.hasOwnProperty('none') ? breakpointClassNames['none']! : null;\n }\n\n const breakpoints: string[] = [];\n const breakpointName = VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP[viewWidth];\n\n if (breakpointClassNames.hasOwnProperty(breakpointName)) {\n breakpoints.push(breakpointClassNames[breakpointName]!);\n }\n\n if (viewWidth >= ViewWidth.MOBILE) {\n if (breakpointClassNames.hasOwnProperty('mobilePlus')) {\n breakpoints.push(breakpointClassNames['mobilePlus']!);\n }\n }\n\n if (viewWidth >= ViewWidth.SMALL_TABLET) {\n if (breakpointClassNames.hasOwnProperty('smallTabletPlus')) {\n breakpoints.push(breakpointClassNames['smallTabletPlus']!);\n }\n } else {\n if (breakpointClassNames.hasOwnProperty('smallTabletMinus')) {\n breakpoints.push(breakpointClassNames['smallTabletMinus']!);\n }\n }\n\n if (viewWidth >= ViewWidth.TABLET) {\n if (breakpointClassNames.hasOwnProperty('tabletPlus')) {\n breakpoints.push(breakpointClassNames['tabletPlus']!);\n }\n } else {\n if (breakpointClassNames.hasOwnProperty('tabletMinus')) {\n breakpoints.push(breakpointClassNames['tabletMinus']!);\n }\n }\n\n return breakpoints.length > 0 ? breakpoints.join(' ') : null;\n}\n"],"names":["getWindow","BREAKPOINTS","MEDIA_QUERIES","VIEW_WIDTH_TO_CSS_BREAKPOINT_MAP","ViewHeight","ViewWidth","getViewWidthByViewportWidth","viewportWidth","DESKTOP","TABLET","SMALL_TABLET","MOBILE","SMALL_MOBILE","getViewWidthByMediaQueries","mediaQueries","desktopPlus","matches","tablet","smallTablet","mobile","getViewHeightByViewportHeight","viewportHeight","MEDIUM_HEIGHT","MEDIUM","MOBILE_LANDSCAPE_HEIGHT","SMALL","EXTRA_SMALL","getViewHeightByMediaQueries","mediumHeight","mobileLandscapeHeight","getSizeX","viewWidth","isCompactByViewWidth","hasPointer","undefined","isCompactByViewHeight","viewHeight","getSizeY","tryToCheckIsDesktop","platform","IS_VKCOM_CRUTCH","widthIsLikeDesktop","otherParametersIsLikeDesktop","isSmallTablePlus","el","win","matchMedia","SMALL_TABLET_PLUS","viewWidthToClassName","breakpointClassNames","hasOwnProperty","breakpoints","breakpointName","push","length","join"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCSSKeyframesAnimationController.d.ts","sourceRoot":"","sources":["../../../src/lib/animation/useCSSKeyframesAnimationController.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,iCAAiC,GAAG;IAC9C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9F,MAAM,MAAM,iBAAiB,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,YAAY,CAAA;CAAE,CAAC;AAEjG,eAAO,MAAM,kCAAkC,cAClC,OAAO,GAAG,MAAM,8FAQxB,iCAAiC,qCAEnC,CAAC,cAAc,EAAE,iBAAiB,CAiEpC,CAAC"}
1
+ {"version":3,"file":"useCSSKeyframesAnimationController.d.ts","sourceRoot":"","sources":["../../../src/lib/animation/useCSSKeyframesAnimationController.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iCAAiC,GAAG;IAC9C,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9F,MAAM,MAAM,iBAAiB,GAAG;IAAE,gBAAgB,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,YAAY,CAAA;CAAE,CAAC;AAEjG,eAAO,MAAM,kCAAkC,cAClC,OAAO,GAAG,MAAM,8FAQxB,iCAAiC,qCAEnC,CAAC,cAAc,EAAE,iBAAiB,CAuEpC,CAAC"}
@@ -1,11 +1,13 @@
1
- import { useState } from "react";
1
+ import * as React from "react";
2
2
  import { noop } from "@vkontakte/vkjs";
3
- import { usePrevious } from "../../hooks/usePrevious.js";
4
3
  import { useStableCallback } from "../../hooks/useStableCallback.js";
5
4
  import { useIsomorphicLayoutEffect } from "../useIsomorphicLayoutEffect.js";
6
5
  export const useCSSKeyframesAnimationController = (stateProp, { onEnter: onEnterProp, onEntering, onEntered, onExit: onExitProp, onExiting, onExited } = {}, disableInitAnimation = false)=>{
7
- const [state, setState] = useState(()=>disableInitAnimation ? stateProp === 'enter' ? 'entered' : 'exited' : stateProp);
8
- const prevState = usePrevious(stateProp);
6
+ const [state, setState] = React.useState(()=>disableInitAnimation ? stateProp === 'enter' ? 'entered' : 'exited' : stateProp);
7
+ const prevStateRef = React.useRef(undefined);
8
+ React.useEffect(()=>{
9
+ prevStateRef.current = stateProp;
10
+ });
9
11
  const onAnimationStart = ()=>{
10
12
  if (state === 'enter') {
11
13
  setState('entering');
@@ -35,6 +37,7 @@ export const useCSSKeyframesAnimationController = (stateProp, { onEnter: onEnter
35
37
  const onEnter = useStableCallback(onEnterProp || noop);
36
38
  const onExit = useStableCallback(onExitProp || noop);
37
39
  useIsomorphicLayoutEffect(function updateState() {
40
+ const prevState = prevStateRef.current;
38
41
  if (prevState === stateProp) {
39
42
  return;
40
43
  }
@@ -56,7 +59,6 @@ export const useCSSKeyframesAnimationController = (stateProp, { onEnter: onEnter
56
59
  }
57
60
  }, [
58
61
  state,
59
- prevState,
60
62
  stateProp,
61
63
  onEnter,
62
64
  onExit
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/animation/useCSSKeyframesAnimationController.ts"],"sourcesContent":["import { useState } from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\n\nexport type UseCSSAnimationControllerCallback = {\n onEnter?: VoidFunction;\n onEntering?: VoidFunction;\n onEntered?: VoidFunction;\n onExit?: VoidFunction;\n onExiting?: VoidFunction;\n onExited?: VoidFunction;\n};\n\nexport type AnimationState = 'enter' | 'entering' | 'entered' | 'exit' | 'exiting' | 'exited';\n\nexport type AnimationHandlers = { onAnimationStart: VoidFunction; onAnimationEnd: VoidFunction };\n\nexport const useCSSKeyframesAnimationController = (\n stateProp: 'enter' | 'exit',\n {\n onEnter: onEnterProp,\n onEntering,\n onEntered,\n onExit: onExitProp,\n onExiting,\n onExited,\n }: UseCSSAnimationControllerCallback = {},\n disableInitAnimation = false,\n): [AnimationState, AnimationHandlers] => {\n const [state, setState] = useState<AnimationState>(() =>\n disableInitAnimation ? (stateProp === 'enter' ? 'entered' : 'exited') : stateProp,\n );\n const prevState = usePrevious(stateProp);\n\n const onAnimationStart = () => {\n if (state === 'enter') {\n setState('entering');\n if (onEntering) {\n onEntering();\n }\n } else if (state === 'exit') {\n setState('exiting');\n if (onExiting) {\n onExiting();\n }\n }\n };\n\n const onAnimationEnd = () => {\n if (state === 'entering') {\n setState('entered');\n if (onEntered) {\n onEntered();\n }\n } else if (state === 'exiting') {\n setState('exited');\n if (onExited) {\n onExited();\n }\n }\n };\n\n const onEnter = useStableCallback(onEnterProp || noop);\n const onExit = useStableCallback(onExitProp || noop);\n\n useIsomorphicLayoutEffect(\n function updateState() {\n if (prevState === stateProp) {\n return;\n }\n switch (stateProp) {\n case 'enter':\n if (state === 'entering' || state === 'entered') {\n break;\n }\n\n setState('enter');\n onEnter();\n break;\n case 'exit':\n if (state === 'exiting' || state === 'exited') {\n break;\n }\n\n setState('exit');\n onExit();\n break;\n }\n },\n [state, prevState, stateProp, onEnter, onExit],\n );\n\n return [state, { onAnimationStart, onAnimationEnd }];\n};\n"],"names":["useState","noop","usePrevious","useStableCallback","useIsomorphicLayoutEffect","useCSSKeyframesAnimationController","stateProp","onEnter","onEnterProp","onEntering","onEntered","onExit","onExitProp","onExiting","onExited","disableInitAnimation","state","setState","prevState","onAnimationStart","onAnimationEnd","updateState"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,QAAQ;AACjC,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,yBAAyB,QAAQ,kCAA+B;AAezE,OAAO,MAAMC,qCAAqC,CAChDC,WACA,EACEC,SAASC,WAAW,EACpBC,UAAU,EACVC,SAAS,EACTC,QAAQC,UAAU,EAClBC,SAAS,EACTC,QAAQ,EAC0B,GAAG,CAAC,CAAC,EACzCC,uBAAuB,KAAK;IAE5B,MAAM,CAACC,OAAOC,SAAS,GAAGjB,SAAyB,IACjDe,uBAAwBT,cAAc,UAAU,YAAY,WAAYA;IAE1E,MAAMY,YAAYhB,YAAYI;IAE9B,MAAMa,mBAAmB;QACvB,IAAIH,UAAU,SAAS;YACrBC,SAAS;YACT,IAAIR,YAAY;gBACdA;YACF;QACF,OAAO,IAAIO,UAAU,QAAQ;YAC3BC,SAAS;YACT,IAAIJ,WAAW;gBACbA;YACF;QACF;IACF;IAEA,MAAMO,iBAAiB;QACrB,IAAIJ,UAAU,YAAY;YACxBC,SAAS;YACT,IAAIP,WAAW;gBACbA;YACF;QACF,OAAO,IAAIM,UAAU,WAAW;YAC9BC,SAAS;YACT,IAAIH,UAAU;gBACZA;YACF;QACF;IACF;IAEA,MAAMP,UAAUJ,kBAAkBK,eAAeP;IACjD,MAAMU,SAASR,kBAAkBS,cAAcX;IAE/CG,0BACE,SAASiB;QACP,IAAIH,cAAcZ,WAAW;YAC3B;QACF;QACA,OAAQA;YACN,KAAK;gBACH,IAAIU,UAAU,cAAcA,UAAU,WAAW;oBAC/C;gBACF;gBAEAC,SAAS;gBACTV;gBACA;YACF,KAAK;gBACH,IAAIS,UAAU,aAAaA,UAAU,UAAU;oBAC7C;gBACF;gBAEAC,SAAS;gBACTN;gBACA;QACJ;IACF,GACA;QAACK;QAAOE;QAAWZ;QAAWC;QAASI;KAAO;IAGhD,OAAO;QAACK;QAAO;YAAEG;YAAkBC;QAAe;KAAE;AACtD,EAAE"}
1
+ {"version":3,"sources":["../../../src/lib/animation/useCSSKeyframesAnimationController.ts"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\n\nexport type UseCSSAnimationControllerCallback = {\n onEnter?: VoidFunction;\n onEntering?: VoidFunction;\n onEntered?: VoidFunction;\n onExit?: VoidFunction;\n onExiting?: VoidFunction;\n onExited?: VoidFunction;\n};\n\nexport type AnimationState = 'enter' | 'entering' | 'entered' | 'exit' | 'exiting' | 'exited';\n\nexport type AnimationHandlers = { onAnimationStart: VoidFunction; onAnimationEnd: VoidFunction };\n\nexport const useCSSKeyframesAnimationController = (\n stateProp: 'enter' | 'exit',\n {\n onEnter: onEnterProp,\n onEntering,\n onEntered,\n onExit: onExitProp,\n onExiting,\n onExited,\n }: UseCSSAnimationControllerCallback = {},\n disableInitAnimation = false,\n): [AnimationState, AnimationHandlers] => {\n const [state, setState] = React.useState<AnimationState>(() =>\n disableInitAnimation ? (stateProp === 'enter' ? 'entered' : 'exited') : stateProp,\n );\n\n const prevStateRef = React.useRef<'enter' | 'exit' | undefined>(undefined);\n React.useEffect(() => {\n prevStateRef.current = stateProp;\n });\n\n const onAnimationStart = () => {\n if (state === 'enter') {\n setState('entering');\n if (onEntering) {\n onEntering();\n }\n } else if (state === 'exit') {\n setState('exiting');\n if (onExiting) {\n onExiting();\n }\n }\n };\n\n const onAnimationEnd = () => {\n if (state === 'entering') {\n setState('entered');\n if (onEntered) {\n onEntered();\n }\n } else if (state === 'exiting') {\n setState('exited');\n if (onExited) {\n onExited();\n }\n }\n };\n\n const onEnter = useStableCallback(onEnterProp || noop);\n const onExit = useStableCallback(onExitProp || noop);\n\n useIsomorphicLayoutEffect(\n function updateState() {\n const prevState = prevStateRef.current;\n\n if (prevState === stateProp) {\n return;\n }\n switch (stateProp) {\n case 'enter':\n if (state === 'entering' || state === 'entered') {\n break;\n }\n\n setState('enter');\n onEnter();\n break;\n case 'exit':\n if (state === 'exiting' || state === 'exited') {\n break;\n }\n\n setState('exit');\n onExit();\n break;\n }\n },\n [state, stateProp, onEnter, onExit],\n );\n\n return [state, { onAnimationStart, onAnimationEnd }];\n};\n"],"names":["React","noop","useStableCallback","useIsomorphicLayoutEffect","useCSSKeyframesAnimationController","stateProp","onEnter","onEnterProp","onEntering","onEntered","onExit","onExitProp","onExiting","onExited","disableInitAnimation","state","setState","useState","prevStateRef","useRef","undefined","useEffect","current","onAnimationStart","onAnimationEnd","updateState","prevState"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,yBAAyB,QAAQ,kCAA+B;AAezE,OAAO,MAAMC,qCAAqC,CAChDC,WACA,EACEC,SAASC,WAAW,EACpBC,UAAU,EACVC,SAAS,EACTC,QAAQC,UAAU,EAClBC,SAAS,EACTC,QAAQ,EAC0B,GAAG,CAAC,CAAC,EACzCC,uBAAuB,KAAK;IAE5B,MAAM,CAACC,OAAOC,SAAS,GAAGhB,MAAMiB,QAAQ,CAAiB,IACvDH,uBAAwBT,cAAc,UAAU,YAAY,WAAYA;IAG1E,MAAMa,eAAelB,MAAMmB,MAAM,CAA+BC;IAChEpB,MAAMqB,SAAS,CAAC;QACdH,aAAaI,OAAO,GAAGjB;IACzB;IAEA,MAAMkB,mBAAmB;QACvB,IAAIR,UAAU,SAAS;YACrBC,SAAS;YACT,IAAIR,YAAY;gBACdA;YACF;QACF,OAAO,IAAIO,UAAU,QAAQ;YAC3BC,SAAS;YACT,IAAIJ,WAAW;gBACbA;YACF;QACF;IACF;IAEA,MAAMY,iBAAiB;QACrB,IAAIT,UAAU,YAAY;YACxBC,SAAS;YACT,IAAIP,WAAW;gBACbA;YACF;QACF,OAAO,IAAIM,UAAU,WAAW;YAC9BC,SAAS;YACT,IAAIH,UAAU;gBACZA;YACF;QACF;IACF;IAEA,MAAMP,UAAUJ,kBAAkBK,eAAeN;IACjD,MAAMS,SAASR,kBAAkBS,cAAcV;IAE/CE,0BACE,SAASsB;QACP,MAAMC,YAAYR,aAAaI,OAAO;QAEtC,IAAII,cAAcrB,WAAW;YAC3B;QACF;QACA,OAAQA;YACN,KAAK;gBACH,IAAIU,UAAU,cAAcA,UAAU,WAAW;oBAC/C;gBACF;gBAEAC,SAAS;gBACTV;gBACA;YACF,KAAK;gBACH,IAAIS,UAAU,aAAaA,UAAU,UAAU;oBAC7C;gBACF;gBAEAC,SAAS;gBACTN;gBACA;QACJ;IACF,GACA;QAACK;QAAOV;QAAWC;QAASI;KAAO;IAGrC,OAAO;QAACK;QAAO;YAAEQ;YAAkBC;QAAe;KAAE;AACtD,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCSSTransition.d.ts","sourceRoot":"","sources":["../../../src/lib/animation/useCSSTransition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAI5B,MAAM,OAAO,CAAC;AAQf,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,WAAW,GACX,UAAU,GACV,OAAO,GACP,UAAU,GACV,SAAS,GACT,MAAM,GACN,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,IAAI;IAC5D,KAAK,EAAE,qBAAqB;IAC5B;QACE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,eAAe,CAAC,EAAE,sBAAsB,CAAC;KAC1C;CACF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,OAAO,qBACzC,OAAO,iMAWb,uBAAuB,KACzB,gBAAgB,CAAC,GAAG,CA6ItB,CAAC"}
1
+ {"version":3,"file":"useCSSTransition.d.ts","sourceRoot":"","sources":["../../../src/lib/animation/useCSSTransition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,sBAAsB,EAAqB,MAAM,OAAO,CAAC;AAQ7F,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,WAAW,GACX,UAAU,GACV,OAAO,GACP,UAAU,GACV,SAAS,GACT,MAAM,GACN,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,GAAG,SAAS,OAAO,GAAG,OAAO,IAAI;IAC5D,KAAK,EAAE,qBAAqB;IAC5B;QACE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC1B,eAAe,CAAC,EAAE,sBAAsB,CAAC;KAC1C;CACF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,OAAO,qBACzC,OAAO,iMAWb,uBAAuB,KACzB,gBAAgB,CAAC,GAAG,CA6ItB,CAAC"}
@@ -1,7 +1,7 @@
1
- import { useEffect, useRef, useState } from "react";
1
+ import { useEffect, useRef } from "react";
2
2
  import { noop } from "@vkontakte/vkjs";
3
- import { usePrevious } from "../../hooks/usePrevious.js";
4
3
  import { useStableCallback } from "../../hooks/useStableCallback.js";
4
+ import { useStateWithPrev } from "../../hooks/useStateWithPrev.js";
5
5
  /* istanbul ignore next: особенность рендера в браузере когда меняется className, в Jest не воспроизвести */ const forceReflowForFixNewMountedElement = (node)=>void (node === null || node === void 0 ? void 0 : node.scrollTop);
6
6
  /**
7
7
  * Хук основан на компоненте `CSSTransition` из библиотеки `react-transition-group`.
@@ -17,7 +17,7 @@ import { useStableCallback } from "../../hooks/useStableCallback.js";
17
17
  const onExiting = useStableCallback(onExitingProp || noop);
18
18
  const onExited = useStableCallback(onExitedProp || noop);
19
19
  const ref = useRef(null);
20
- const [state, setState] = useState(()=>{
20
+ const [[state, prevState], setState] = useStateWithPrev(()=>{
21
21
  if (!inProp) {
22
22
  return 'exited';
23
23
  }
@@ -27,7 +27,6 @@ import { useStableCallback } from "../../hooks/useStableCallback.js";
27
27
  }
28
28
  return 'entered';
29
29
  });
30
- const prevState = usePrevious(state);
31
30
  useEffect(function updateState() {
32
31
  if (inProp) {
33
32
  switch(state){
@@ -93,6 +92,7 @@ import { useStableCallback } from "../../hooks/useStableCallback.js";
93
92
  inProp,
94
93
  state,
95
94
  prevState,
95
+ setState,
96
96
  enableAppear,
97
97
  enableEnter,
98
98
  onEnter,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/animation/useCSSTransition.ts"],"sourcesContent":["import {\n type TransitionEvent,\n type TransitionEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useStableCallback } from '../../hooks/useStableCallback';\n\n/* istanbul ignore next: особенность рендера в браузере когда меняется className, в Jest не воспроизвести */\nconst forceReflowForFixNewMountedElement = (node: Element | null) => void node?.scrollTop;\n\nexport type UseCSSTransitionState =\n | 'appear'\n | 'appearing'\n | 'appeared'\n | 'enter'\n | 'entering'\n | 'entered'\n | 'exit'\n | 'exiting'\n | 'exited';\n\nexport type UseCSSTransitionOptions = {\n enableAppear?: boolean;\n enableEnter?: boolean;\n enableExit?: boolean;\n onEnter?: (appear?: boolean) => void;\n onEntering?: (appear?: boolean) => void;\n onEntered?: (propertyName?: string, appear?: boolean) => void;\n onExit?: () => void;\n onExiting?: () => void;\n onExited?: (propertyName?: string) => void;\n};\n\nexport type UseCSSTransition<Ref extends Element = Element> = [\n state: UseCSSTransitionState,\n {\n ref: React.RefObject<Ref>;\n onTransitionEnd?: TransitionEventHandler;\n },\n];\n\n/**\n * Хук основан на компоненте `CSSTransition` из библиотеки `react-transition-group`.\n *\n * @link https://reactcommunity.org/react-transition-group/css-transition\n *\n * @private\n */\nexport const useCSSTransition = <Ref extends Element = Element>(\n inProp?: boolean,\n {\n enableAppear = false,\n enableEnter = true,\n enableExit = true,\n onEnter: onEnterProp,\n onEntering: onEnteringProp,\n onEntered: onEnteredProp,\n onExit: onExitProp,\n onExiting: onExitingProp,\n onExited: onExitedProp,\n }: UseCSSTransitionOptions = {},\n): UseCSSTransition<Ref> => {\n const onEnter = useStableCallback(onEnterProp || noop);\n const onEntering = useStableCallback(onEnteringProp || noop);\n const onEntered = useStableCallback(onEnteredProp || noop);\n const onExit = useStableCallback(onExitProp || noop);\n const onExiting = useStableCallback(onExitingProp || noop);\n const onExited = useStableCallback(onExitedProp || noop);\n\n const ref = useRef<Ref | null>(null);\n const [state, setState] = useState<UseCSSTransitionState>(() => {\n if (!inProp) {\n return 'exited';\n }\n\n if (enableAppear) {\n onEnter(true);\n return 'appear';\n }\n\n return 'entered';\n });\n const prevState = usePrevious(state);\n\n useEffect(\n function updateState() {\n if (inProp) {\n switch (state) {\n case 'appear':\n forceReflowForFixNewMountedElement(ref.current);\n setState('appearing');\n onEntering(true);\n break;\n case 'enter':\n forceReflowForFixNewMountedElement(ref.current);\n setState('entering');\n onEntering();\n break;\n case 'exiting':\n if (enableEnter) {\n setState('entering');\n onEntering();\n break;\n }\n\n setState('entered');\n onEntered();\n break;\n case 'exited':\n if (enableEnter) {\n setState('enter');\n onEnter();\n break;\n }\n\n setState('entered');\n onEntered();\n break;\n }\n } else {\n switch (state) {\n case 'exit':\n forceReflowForFixNewMountedElement(ref.current);\n setState('exiting');\n onExiting();\n break;\n case 'appearing':\n case 'entering':\n if (enableExit) {\n setState('exiting');\n onExiting();\n break;\n }\n\n setState('exited');\n onExited();\n break;\n case 'appeared':\n case 'entered':\n if (enableExit) {\n setState('exit');\n onExit();\n break;\n }\n\n setState('exited');\n onExited();\n break;\n }\n }\n },\n [\n inProp,\n\n state,\n prevState,\n\n enableAppear,\n enableEnter,\n onEnter,\n onEntering,\n onEntered,\n\n enableExit,\n onExit,\n onExiting,\n onExited,\n ],\n );\n\n const onTransitionEnd = (event: TransitionEvent) => {\n /* istanbul ignore if: на всякий случай предупреждаем всплытие, нет смысла проверять условие */\n if (event.target !== ref.current) {\n return;\n }\n\n switch (state) {\n case 'appearing':\n setState('appeared');\n onEntered(event.propertyName, true);\n break;\n case 'entering':\n setState('entered');\n onEntered(event.propertyName);\n break;\n case 'exiting':\n setState('exited');\n onExited(event.propertyName);\n break;\n }\n };\n\n return [\n state,\n {\n ref,\n onTransitionEnd:\n state !== 'appeared' && state !== 'entered' && state !== 'exited'\n ? onTransitionEnd\n : undefined,\n },\n ];\n};\n"],"names":["useEffect","useRef","useState","noop","usePrevious","useStableCallback","forceReflowForFixNewMountedElement","node","scrollTop","useCSSTransition","inProp","enableAppear","enableEnter","enableExit","onEnter","onEnterProp","onEntering","onEnteringProp","onEntered","onEnteredProp","onExit","onExitProp","onExiting","onExitingProp","onExited","onExitedProp","ref","state","setState","prevState","updateState","current","onTransitionEnd","event","target","propertyName","undefined"],"mappings":"AAAA,SAGEA,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,QAAQ;AACf,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,mCAAgC;AAElE,0GAA0G,GAC1G,MAAMC,qCAAqC,CAACC,OAAyB,MAAKA,iBAAAA,2BAAAA,KAAMC,SAAS;AAiCzF;;;;;;CAMC,GACD,OAAO,MAAMC,mBAAmB,CAC9BC,QACA,EACEC,eAAe,KAAK,EACpBC,cAAc,IAAI,EAClBC,aAAa,IAAI,EACjBC,SAASC,WAAW,EACpBC,YAAYC,cAAc,EAC1BC,WAAWC,aAAa,EACxBC,QAAQC,UAAU,EAClBC,WAAWC,aAAa,EACxBC,UAAUC,YAAY,EACE,GAAG,CAAC,CAAC;IAE/B,MAAMX,UAAUT,kBAAkBU,eAAeZ;IACjD,MAAMa,aAAaX,kBAAkBY,kBAAkBd;IACvD,MAAMe,YAAYb,kBAAkBc,iBAAiBhB;IACrD,MAAMiB,SAASf,kBAAkBgB,cAAclB;IAC/C,MAAMmB,YAAYjB,kBAAkBkB,iBAAiBpB;IACrD,MAAMqB,WAAWnB,kBAAkBoB,gBAAgBtB;IAEnD,MAAMuB,MAAMzB,OAAmB;IAC/B,MAAM,CAAC0B,OAAOC,SAAS,GAAG1B,SAAgC;QACxD,IAAI,CAACQ,QAAQ;YACX,OAAO;QACT;QAEA,IAAIC,cAAc;YAChBG,QAAQ;YACR,OAAO;QACT;QAEA,OAAO;IACT;IACA,MAAMe,YAAYzB,YAAYuB;IAE9B3B,UACE,SAAS8B;QACP,IAAIpB,QAAQ;YACV,OAAQiB;gBACN,KAAK;oBACHrB,mCAAmCoB,IAAIK,OAAO;oBAC9CH,SAAS;oBACTZ,WAAW;oBACX;gBACF,KAAK;oBACHV,mCAAmCoB,IAAIK,OAAO;oBAC9CH,SAAS;oBACTZ;oBACA;gBACF,KAAK;oBACH,IAAIJ,aAAa;wBACfgB,SAAS;wBACTZ;wBACA;oBACF;oBAEAY,SAAS;oBACTV;oBACA;gBACF,KAAK;oBACH,IAAIN,aAAa;wBACfgB,SAAS;wBACTd;wBACA;oBACF;oBAEAc,SAAS;oBACTV;oBACA;YACJ;QACF,OAAO;YACL,OAAQS;gBACN,KAAK;oBACHrB,mCAAmCoB,IAAIK,OAAO;oBAC9CH,SAAS;oBACTN;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,IAAIT,YAAY;wBACde,SAAS;wBACTN;wBACA;oBACF;oBAEAM,SAAS;oBACTJ;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,IAAIX,YAAY;wBACde,SAAS;wBACTR;wBACA;oBACF;oBAEAQ,SAAS;oBACTJ;oBACA;YACJ;QACF;IACF,GACA;QACEd;QAEAiB;QACAE;QAEAlB;QACAC;QACAE;QACAE;QACAE;QAEAL;QACAO;QACAE;QACAE;KACD;IAGH,MAAMQ,kBAAkB,CAACC;QACvB,6FAA6F,GAC7F,IAAIA,MAAMC,MAAM,KAAKR,IAAIK,OAAO,EAAE;YAChC;QACF;QAEA,OAAQJ;YACN,KAAK;gBACHC,SAAS;gBACTV,UAAUe,MAAME,YAAY,EAAE;gBAC9B;YACF,KAAK;gBACHP,SAAS;gBACTV,UAAUe,MAAME,YAAY;gBAC5B;YACF,KAAK;gBACHP,SAAS;gBACTJ,SAASS,MAAME,YAAY;gBAC3B;QACJ;IACF;IAEA,OAAO;QACLR;QACA;YACED;YACAM,iBACEL,UAAU,cAAcA,UAAU,aAAaA,UAAU,WACrDK,kBACAI;QACR;KACD;AACH,EAAE"}
1
+ {"version":3,"sources":["../../../src/lib/animation/useCSSTransition.ts"],"sourcesContent":["import { type TransitionEvent, type TransitionEventHandler, useEffect, useRef } from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useStateWithPrev } from '../../hooks/useStateWithPrev';\n\n/* istanbul ignore next: особенность рендера в браузере когда меняется className, в Jest не воспроизвести */\nconst forceReflowForFixNewMountedElement = (node: Element | null) => void node?.scrollTop;\n\nexport type UseCSSTransitionState =\n | 'appear'\n | 'appearing'\n | 'appeared'\n | 'enter'\n | 'entering'\n | 'entered'\n | 'exit'\n | 'exiting'\n | 'exited';\n\nexport type UseCSSTransitionOptions = {\n enableAppear?: boolean;\n enableEnter?: boolean;\n enableExit?: boolean;\n onEnter?: (appear?: boolean) => void;\n onEntering?: (appear?: boolean) => void;\n onEntered?: (propertyName?: string, appear?: boolean) => void;\n onExit?: () => void;\n onExiting?: () => void;\n onExited?: (propertyName?: string) => void;\n};\n\nexport type UseCSSTransition<Ref extends Element = Element> = [\n state: UseCSSTransitionState,\n {\n ref: React.RefObject<Ref>;\n onTransitionEnd?: TransitionEventHandler;\n },\n];\n\n/**\n * Хук основан на компоненте `CSSTransition` из библиотеки `react-transition-group`.\n *\n * @link https://reactcommunity.org/react-transition-group/css-transition\n *\n * @private\n */\nexport const useCSSTransition = <Ref extends Element = Element>(\n inProp?: boolean,\n {\n enableAppear = false,\n enableEnter = true,\n enableExit = true,\n onEnter: onEnterProp,\n onEntering: onEnteringProp,\n onEntered: onEnteredProp,\n onExit: onExitProp,\n onExiting: onExitingProp,\n onExited: onExitedProp,\n }: UseCSSTransitionOptions = {},\n): UseCSSTransition<Ref> => {\n const onEnter = useStableCallback(onEnterProp || noop);\n const onEntering = useStableCallback(onEnteringProp || noop);\n const onEntered = useStableCallback(onEnteredProp || noop);\n const onExit = useStableCallback(onExitProp || noop);\n const onExiting = useStableCallback(onExitingProp || noop);\n const onExited = useStableCallback(onExitedProp || noop);\n\n const ref = useRef<Ref | null>(null);\n const [[state, prevState], setState] = useStateWithPrev<UseCSSTransitionState>(() => {\n if (!inProp) {\n return 'exited';\n }\n\n if (enableAppear) {\n onEnter(true);\n return 'appear';\n }\n\n return 'entered';\n });\n\n useEffect(\n function updateState() {\n if (inProp) {\n switch (state) {\n case 'appear':\n forceReflowForFixNewMountedElement(ref.current);\n setState('appearing');\n onEntering(true);\n break;\n case 'enter':\n forceReflowForFixNewMountedElement(ref.current);\n setState('entering');\n onEntering();\n break;\n case 'exiting':\n if (enableEnter) {\n setState('entering');\n onEntering();\n break;\n }\n\n setState('entered');\n onEntered();\n break;\n case 'exited':\n if (enableEnter) {\n setState('enter');\n onEnter();\n break;\n }\n\n setState('entered');\n onEntered();\n break;\n }\n } else {\n switch (state) {\n case 'exit':\n forceReflowForFixNewMountedElement(ref.current);\n setState('exiting');\n onExiting();\n break;\n case 'appearing':\n case 'entering':\n if (enableExit) {\n setState('exiting');\n onExiting();\n break;\n }\n\n setState('exited');\n onExited();\n break;\n case 'appeared':\n case 'entered':\n if (enableExit) {\n setState('exit');\n onExit();\n break;\n }\n\n setState('exited');\n onExited();\n break;\n }\n }\n },\n [\n inProp,\n\n state,\n prevState,\n setState,\n\n enableAppear,\n enableEnter,\n onEnter,\n onEntering,\n onEntered,\n\n enableExit,\n onExit,\n onExiting,\n onExited,\n ],\n );\n\n const onTransitionEnd = (event: TransitionEvent) => {\n /* istanbul ignore if: на всякий случай предупреждаем всплытие, нет смысла проверять условие */\n if (event.target !== ref.current) {\n return;\n }\n\n switch (state) {\n case 'appearing':\n setState('appeared');\n onEntered(event.propertyName, true);\n break;\n case 'entering':\n setState('entered');\n onEntered(event.propertyName);\n break;\n case 'exiting':\n setState('exited');\n onExited(event.propertyName);\n break;\n }\n };\n\n return [\n state,\n {\n ref,\n onTransitionEnd:\n state !== 'appeared' && state !== 'entered' && state !== 'exited'\n ? onTransitionEnd\n : undefined,\n },\n ];\n};\n"],"names":["useEffect","useRef","noop","useStableCallback","useStateWithPrev","forceReflowForFixNewMountedElement","node","scrollTop","useCSSTransition","inProp","enableAppear","enableEnter","enableExit","onEnter","onEnterProp","onEntering","onEnteringProp","onEntered","onEnteredProp","onExit","onExitProp","onExiting","onExitingProp","onExited","onExitedProp","ref","state","prevState","setState","updateState","current","onTransitionEnd","event","target","propertyName","undefined"],"mappings":"AAAA,SAA4DA,SAAS,EAAEC,MAAM,QAAQ,QAAQ;AAC7F,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,gBAAgB,QAAQ,kCAA+B;AAEhE,0GAA0G,GAC1G,MAAMC,qCAAqC,CAACC,OAAyB,MAAKA,iBAAAA,2BAAAA,KAAMC,SAAS;AAiCzF;;;;;;CAMC,GACD,OAAO,MAAMC,mBAAmB,CAC9BC,QACA,EACEC,eAAe,KAAK,EACpBC,cAAc,IAAI,EAClBC,aAAa,IAAI,EACjBC,SAASC,WAAW,EACpBC,YAAYC,cAAc,EAC1BC,WAAWC,aAAa,EACxBC,QAAQC,UAAU,EAClBC,WAAWC,aAAa,EACxBC,UAAUC,YAAY,EACE,GAAG,CAAC,CAAC;IAE/B,MAAMX,UAAUV,kBAAkBW,eAAeZ;IACjD,MAAMa,aAAaZ,kBAAkBa,kBAAkBd;IACvD,MAAMe,YAAYd,kBAAkBe,iBAAiBhB;IACrD,MAAMiB,SAAShB,kBAAkBiB,cAAclB;IAC/C,MAAMmB,YAAYlB,kBAAkBmB,iBAAiBpB;IACrD,MAAMqB,WAAWpB,kBAAkBqB,gBAAgBtB;IAEnD,MAAMuB,MAAMxB,OAAmB;IAC/B,MAAM,CAAC,CAACyB,OAAOC,UAAU,EAAEC,SAAS,GAAGxB,iBAAwC;QAC7E,IAAI,CAACK,QAAQ;YACX,OAAO;QACT;QAEA,IAAIC,cAAc;YAChBG,QAAQ;YACR,OAAO;QACT;QAEA,OAAO;IACT;IAEAb,UACE,SAAS6B;QACP,IAAIpB,QAAQ;YACV,OAAQiB;gBACN,KAAK;oBACHrB,mCAAmCoB,IAAIK,OAAO;oBAC9CF,SAAS;oBACTb,WAAW;oBACX;gBACF,KAAK;oBACHV,mCAAmCoB,IAAIK,OAAO;oBAC9CF,SAAS;oBACTb;oBACA;gBACF,KAAK;oBACH,IAAIJ,aAAa;wBACfiB,SAAS;wBACTb;wBACA;oBACF;oBAEAa,SAAS;oBACTX;oBACA;gBACF,KAAK;oBACH,IAAIN,aAAa;wBACfiB,SAAS;wBACTf;wBACA;oBACF;oBAEAe,SAAS;oBACTX;oBACA;YACJ;QACF,OAAO;YACL,OAAQS;gBACN,KAAK;oBACHrB,mCAAmCoB,IAAIK,OAAO;oBAC9CF,SAAS;oBACTP;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,IAAIT,YAAY;wBACdgB,SAAS;wBACTP;wBACA;oBACF;oBAEAO,SAAS;oBACTL;oBACA;gBACF,KAAK;gBACL,KAAK;oBACH,IAAIX,YAAY;wBACdgB,SAAS;wBACTT;wBACA;oBACF;oBAEAS,SAAS;oBACTL;oBACA;YACJ;QACF;IACF,GACA;QACEd;QAEAiB;QACAC;QACAC;QAEAlB;QACAC;QACAE;QACAE;QACAE;QAEAL;QACAO;QACAE;QACAE;KACD;IAGH,MAAMQ,kBAAkB,CAACC;QACvB,6FAA6F,GAC7F,IAAIA,MAAMC,MAAM,KAAKR,IAAIK,OAAO,EAAE;YAChC;QACF;QAEA,OAAQJ;YACN,KAAK;gBACHE,SAAS;gBACTX,UAAUe,MAAME,YAAY,EAAE;gBAC9B;YACF,KAAK;gBACHN,SAAS;gBACTX,UAAUe,MAAME,YAAY;gBAC5B;YACF,KAAK;gBACHN,SAAS;gBACTL,SAASS,MAAME,YAAY;gBAC3B;QACJ;IACF;IAEA,OAAO;QACLR;QACA;YACED;YACAM,iBACEL,UAAU,cAAcA,UAAU,aAAaA,UAAU,WACrDK,kBACAI;QACR;KACD;AACH,EAAE"}
package/dist/lib/dom.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- export { getWindow, getNodeScroll, isHTMLElement, isElement, } from '@vkontakte/vkui-floating-ui/utils/dom';
2
+ export { getWindow, getNodeScroll, isHTMLElement, isElement, getParentNode, } from '@vkontakte/vkui-floating-ui/utils/dom';
3
3
  export { canUseDOM, canUseEventListeners, onDOMLoaded } from '@vkontakte/vkjs';
4
4
  export interface DOMContextInterface {
5
5
  /**
@@ -12,7 +12,6 @@ export interface DOMContextInterface {
12
12
  document?: Document;
13
13
  }
14
14
  export type DOMProps = DOMContextInterface;
15
- export declare const getDOM: () => DOMContextInterface;
16
15
  export declare const DOMContext: React.Context<DOMContextInterface>;
17
16
  export declare const useDOM: () => DOMContextInterface;
18
17
  /**
@@ -33,11 +32,15 @@ export declare function getTransformedParentCoords(element: Element): {
33
32
  export declare const getBoundingClientRect: (node: Element | Window, isFixedStrategy?: boolean) => DOMRect;
34
33
  export declare const getRelativeBoundingClientRect: (parent: Element, child: Element) => DOMRect;
35
34
  /**
36
- * Адаптер над getNearestOverflowAncestor из @floating-ui/utils/dom.
35
+ * Переписанный `getNearestOverflowAncestor` из @floating-ui/utils/dom.
37
36
  *
38
- * document.body подменяем на window, т.к. на document.body нельзя применить скролл.
37
+ * [1] добавляем ноду, на которой нужно остановить рекурсию
38
+ * [2] document.body подменяем на window, т.к. на document.body нельзя применить скролл.
39
+ *
40
+ * @link https://github.com/floating-ui/floating-ui/blob/%40floating-ui/dom%401.6.3/packages/utils/src/dom.ts#L143
39
41
  */
40
- export declare const getNearestOverflowAncestor: (childEl: Node) => HTMLElement | Window | null;
42
+ export declare function getNearestOverflowAncestor(node: Node): HTMLElement | Window | null;
43
+ export declare function getNearestOverflowAncestor(node: Node, terminalNode: Node): HTMLElement | null;
41
44
  export declare const getScrollHeight: (node: Element | Window) => number;
42
45
  export declare const getScrollRect: (node: Element | Window) => {
43
46
  relative: DOMRect;
@@ -64,4 +67,16 @@ export declare const getFirstTouchEventData: (event: UIEvent | React.UIEvent<HTM
64
67
  * данных.
65
68
  */
66
69
  export declare const initializeBrowserGesturePreventionEffect: (window: Window) => VoidFunction;
70
+ export declare const isHTMLContentEditableElement: (el: Element | null) => el is HTMLInputElement | HTMLTextAreaElement | HTMLElement;
71
+ export type VisualViewport = {
72
+ offsetTop: number;
73
+ offsetLeft: number;
74
+ width: number;
75
+ height: number;
76
+ };
77
+ /**
78
+ * Фоллбек `visualViewport` для **Safari 12**.
79
+ */
80
+ export declare function getVisualViewport(win: Window): VisualViewport;
81
+ export declare const hasSelectionWithRangeType: (node: unknown) => boolean;
67
82
  //# sourceMappingURL=dom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/lib/dom.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/lib/dom.tsx"],"names":[],"mappings":"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"}
package/dist/lib/dom.js CHANGED
@@ -4,10 +4,10 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import * as React from "react";
5
5
  import { canUseDOM } from "@vkontakte/vkjs";
6
6
  import { rectToClientRect } from "@vkontakte/vkui-floating-ui/core";
7
- import { getNearestOverflowAncestor as getNearestOverflowAncestorLib, getWindow, isElement, isHTMLElement } from "@vkontakte/vkui-floating-ui/utils/dom";
8
- export { getWindow, getNodeScroll, isHTMLElement, isElement } from "@vkontakte/vkui-floating-ui/utils/dom";
7
+ import { getParentNode, getWindow, isElement, isHTMLElement, isLastTraversableNode, isOverflowElement } from "@vkontakte/vkui-floating-ui/utils/dom";
8
+ export { getWindow, getNodeScroll, isHTMLElement, isElement, getParentNode } from "@vkontakte/vkui-floating-ui/utils/dom";
9
9
  export { canUseDOM, canUseEventListeners, onDOMLoaded } from "@vkontakte/vkjs";
10
- /* eslint-disable no-restricted-globals */ export const getDOM = ()=>({
10
+ /* eslint-disable no-restricted-globals */ const getDOM = ()=>({
11
11
  window: canUseDOM ? window : undefined,
12
12
  document: canUseDOM ? document : undefined
13
13
  });
@@ -105,14 +105,19 @@ export const getRelativeBoundingClientRect = (parent, child)=>{
105
105
  height: childRect.height
106
106
  });
107
107
  };
108
- /**
109
- * Адаптер над getNearestOverflowAncestor из @floating-ui/utils/dom.
110
- *
111
- * document.body подменяем на window, т.к. на document.body нельзя применить скролл.
112
- */ export const getNearestOverflowAncestor = (childEl)=>{
113
- const foundAncestor = getNearestOverflowAncestorLib(childEl);
114
- return isBody(foundAncestor) ? getWindow(foundAncestor) : isHTMLElement(childEl) ? foundAncestor : null;
115
- };
108
+ export function getNearestOverflowAncestor(node, terminalNode) {
109
+ const parentNode = getParentNode(node);
110
+ if (terminalNode === parentNode) {
111
+ return null; /* [1] */
112
+ }
113
+ if (isLastTraversableNode(parentNode)) {
114
+ return getWindow(parentNode); /* [2] */
115
+ }
116
+ if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
117
+ return parentNode;
118
+ }
119
+ return getNearestOverflowAncestor(parentNode, terminalNode);
120
+ }
116
121
  export const getScrollHeight = (node)=>{
117
122
  return isWindow(node) ? node.document.documentElement.scrollHeight : node.scrollHeight;
118
123
  };
@@ -202,5 +207,54 @@ export const getFirstTouchEventData = (event)=>{
202
207
  window1.removeEventListener('touchmove', handleWindowTouchMove, options);
203
208
  };
204
209
  };
210
+ const nonTextInputTypes = {
211
+ button: true,
212
+ submit: true,
213
+ reset: true,
214
+ color: true,
215
+ file: true,
216
+ image: true,
217
+ checkbox: true,
218
+ radio: true
219
+ }; // prettier-ignore
220
+ export const isHTMLContentEditableElement = (el)=>{
221
+ if (el === null) {
222
+ return false;
223
+ }
224
+ if (el.tagName === 'INPUT') {
225
+ // @ts-expect-error: TS2339 за счёт `tagName` удовлетворяемся, что это `HTMLInputElement`
226
+ return !nonTextInputTypes[el.type]; // prettier-ignore
227
+ }
228
+ return el.tagName === 'TEXTAREA' || // eslint-disable-next-line no-restricted-properties
229
+ el.closest('[contenteditable=true]') !== null;
230
+ };
231
+ /**
232
+ * Фоллбек `visualViewport` для **Safari 12**.
233
+ */ export function getVisualViewport(win) {
234
+ const result = {
235
+ offsetTop: 0,
236
+ offsetLeft: 0,
237
+ width: 0,
238
+ height: 0
239
+ };
240
+ if (win.visualViewport) {
241
+ const { offsetTop, offsetLeft, width, height } = win.visualViewport;
242
+ result.offsetTop = Math.round(offsetTop);
243
+ result.offsetLeft = offsetLeft;
244
+ result.width = width;
245
+ result.height = Math.round(height);
246
+ return result;
247
+ }
248
+ // TODO[Safari@>=13] Удалить фоллбек
249
+ result.offsetTop = win.pageYOffset;
250
+ result.offsetLeft = win.pageXOffset;
251
+ result.width = win.innerWidth; // note: вызывает reflow в отличии от visualViewport
252
+ result.height = win.innerHeight; // note: вызывает reflow в отличии от visualViewport
253
+ return result;
254
+ }
255
+ export const hasSelectionWithRangeType = (node)=>{
256
+ const selection = getWindow(node).getSelection();
257
+ return selection ? selection.type === 'Range' : false;
258
+ };
205
259
 
206
260
  //# sourceMappingURL=dom.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/dom.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { canUseDOM } from '@vkontakte/vkjs';\nimport { rectToClientRect } from '@vkontakte/vkui-floating-ui/core';\nimport {\n getNearestOverflowAncestor as getNearestOverflowAncestorLib,\n getWindow,\n isElement,\n isHTMLElement,\n} from '@vkontakte/vkui-floating-ui/utils/dom';\n\nexport {\n getWindow,\n getNodeScroll,\n isHTMLElement,\n isElement,\n} from '@vkontakte/vkui-floating-ui/utils/dom';\n\nexport { canUseDOM, canUseEventListeners, onDOMLoaded } from '@vkontakte/vkjs';\nexport interface DOMContextInterface {\n /**\n * @ignore\n */\n window?: Window;\n /**\n * @ignore\n */\n document?: Document;\n}\n\nexport type DOMProps = DOMContextInterface;\n\n/* eslint-disable no-restricted-globals */\nexport const getDOM = (): DOMContextInterface => ({\n window: canUseDOM ? window : undefined,\n document: canUseDOM ? document : undefined,\n});\n/* eslint-enable no-restricted-globals */\n\nexport const DOMContext: React.Context<DOMContextInterface> =\n React.createContext<DOMContextInterface>(getDOM());\n\nexport const useDOM = (): DOMContextInterface => {\n return React.useContext(DOMContext);\n};\n\n/**\n * В случае, если используется DOMContext, при проверке 'node instanceOf Window' – Window может быть\n * другим объектом.\n */\nexport const isWindow = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is Window => {\n return node !== null && node !== undefined && 'navigator' in node;\n};\n\nexport const isBody = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is HTMLBodyElement => {\n return node !== null && node !== undefined && 'tagName' in node && node.tagName === 'BODY';\n};\n\nexport const isDocumentElement = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is HTMLHtmlElement => {\n return node !== null && node !== undefined && 'tagName' in node && node.tagName === 'HTML';\n};\n\nexport function withDOM<Props>(\n Component: React.ComponentType<Props & DOMProps>,\n): React.ComponentType<Props> {\n const WithDOM = (props: Props) => {\n const dom = useDOM();\n return <Component {...props} {...dom} />;\n };\n return WithDOM;\n}\n\nexport function blurActiveElement(document: Document | undefined): void {\n if (document && document.activeElement) {\n (document.activeElement as HTMLElement).blur();\n }\n}\n\nexport const TRANSFORM_DEFAULT_VALUES: string[] = ['none', 'initial', 'inherit', 'unset'];\nexport const WILL_CHANGE_DEFAULT_VALUES: string[] = ['auto', 'initial', 'inherit', 'unset'];\nexport function getTransformedParentCoords(element: Element): {\n x: number;\n y: number;\n} {\n let parentNode = element.parentNode;\n while (parentNode !== null) {\n if (isHTMLElement(parentNode)) {\n const { transform, willChange } = getComputedStyle(parentNode);\n if (\n !TRANSFORM_DEFAULT_VALUES.includes(transform) ||\n !WILL_CHANGE_DEFAULT_VALUES.includes(willChange)\n ) {\n const { x, y } = parentNode.getBoundingClientRect();\n return { x, y };\n }\n }\n parentNode = parentNode.parentNode;\n }\n return { x: 0, y: 0 };\n}\n\nexport const getBoundingClientRect = (node: Element | Window, isFixedStrategy = false) => {\n const element = isWindow(node) ? node.document.documentElement : node;\n const clientRect = element.getBoundingClientRect();\n\n if (isDocumentElement(element)) {\n /**\n * Если на странице не используется `html, body { height: 100% }` (или `height: 100vh`), то\n * `height`, полученный из `document.documentElement.getBoundingClientRect()`, будет возвращать\n * `scrollHeight`, а не `clientHeight`. Поэтому перебиваем `height` на `clientHeight`.\n */\n clientRect.height = element.clientHeight;\n }\n\n let offsetX = 0;\n let offsetY = 0;\n if (isFixedStrategy) {\n const { x, y } = getTransformedParentCoords(element);\n offsetX = x;\n offsetY = y;\n }\n\n return rectToClientRect({\n x: clientRect.left - offsetX,\n y: clientRect.top - offsetY,\n width: clientRect.width,\n height: clientRect.height,\n }) as DOMRect;\n};\n\nexport const getRelativeBoundingClientRect = (parent: Element, child: Element) => {\n const parentRect = getBoundingClientRect(parent);\n const childRect = getBoundingClientRect(child);\n return rectToClientRect({\n x: childRect.left - parentRect.left,\n y: childRect.top - parentRect.top,\n width: childRect.width,\n height: childRect.height,\n }) as DOMRect;\n};\n\n/**\n * Адаптер над getNearestOverflowAncestor из @floating-ui/utils/dom.\n *\n * document.body подменяем на window, т.к. на document.body нельзя применить скролл.\n */\nexport const getNearestOverflowAncestor = (childEl: Node): HTMLElement | Window | null => {\n const foundAncestor = getNearestOverflowAncestorLib(childEl);\n\n return isBody(foundAncestor)\n ? getWindow(foundAncestor)\n : isHTMLElement(childEl)\n ? foundAncestor\n : null;\n};\n\nexport const getScrollHeight = (node: Element | Window): number => {\n return isWindow(node) ? node.document.documentElement.scrollHeight : node.scrollHeight;\n};\n\nexport const getScrollRect = (\n node: Element | Window,\n): {\n relative: DOMRect;\n edges: {\n y: [number, number];\n };\n} => {\n const window = isElement(node) ? getWindow(node) : node;\n const scrollElRect = getBoundingClientRect(node);\n\n const edgeTop = window.scrollY + scrollElRect.top;\n const edgeBottom = edgeTop + scrollElRect.height;\n const y: [number, number] = [edgeTop, edgeBottom];\n\n return {\n relative: scrollElRect,\n edges: { y },\n };\n};\n\nexport const getDocumentBody = (node?: any): HTMLElement => getWindow(node).document.body;\n\nexport const getActiveElementByAnotherElement = (el: Element | null): Element | null =>\n el ? el.ownerDocument.activeElement : null;\n\nexport const contains = (parent?: Element | null, child?: Element | null): boolean => {\n return parent && child ? parent.contains(child) : false;\n};\n\nexport const getFirstTouchEventData = (\n event: UIEvent | React.UIEvent<HTMLElement>,\n): {\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n} => {\n let dataRaw = (function resolveData() {\n switch (event.type) {\n case 'touchend':\n return (event as TouchEvent).changedTouches[0];\n case 'touchstart':\n case 'touchmove':\n case 'touchcancel':\n return (event as TouchEvent).touches[0];\n case 'mousedown':\n case 'mousemove':\n case 'mouseup':\n case 'mouseleave':\n return event as MouseEvent;\n default:\n return { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0 };\n }\n })();\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'test') {\n dataRaw = dataRaw\n ? dataRaw\n : { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0 };\n }\n return {\n screenX: dataRaw.screenX || 0,\n screenY: dataRaw.screenY || 0,\n clientX: dataRaw.clientX || 0,\n clientY: dataRaw.clientY || 0,\n pageX: dataRaw.pageX || 0,\n pageY: dataRaw.pageY || 0,\n };\n};\n\n/**\n * ⚠️ В частности, необходимо для iOS 15. Начиная с этой версии в Safari добавили\n * pull-to-refresh. CSS св-во `overflow-behavior` появился только с iOS 16.\n *\n * Во вторую очередь, полезна блокированием скролла, чтобы пользователь дождался обновления\n * данных.\n */\nexport const initializeBrowserGesturePreventionEffect = (window: Window): VoidFunction => {\n const options: AddEventListenerOptions & EventListenerOptions = { passive: false };\n const handleWindowTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n window.document.documentElement.classList.add('vkui--disable-overscroll-behavior'); // eslint-disable-line no-restricted-properties\n window.addEventListener('touchmove', handleWindowTouchMove, options);\n\n return function dispose() {\n window.document.documentElement.classList.remove('vkui--disable-overscroll-behavior'); // eslint-disable-line no-restricted-properties\n window.removeEventListener('touchmove', handleWindowTouchMove, options);\n };\n};\n"],"names":["React","canUseDOM","rectToClientRect","getNearestOverflowAncestor","getNearestOverflowAncestorLib","getWindow","isElement","isHTMLElement","getNodeScroll","canUseEventListeners","onDOMLoaded","getDOM","window","undefined","document","DOMContext","createContext","useDOM","useContext","isWindow","node","isBody","tagName","isDocumentElement","withDOM","Component","WithDOM","props","dom","blurActiveElement","activeElement","blur","TRANSFORM_DEFAULT_VALUES","WILL_CHANGE_DEFAULT_VALUES","getTransformedParentCoords","element","parentNode","transform","willChange","getComputedStyle","includes","x","y","getBoundingClientRect","isFixedStrategy","documentElement","clientRect","height","clientHeight","offsetX","offsetY","left","top","width","getRelativeBoundingClientRect","parent","child","parentRect","childRect","childEl","foundAncestor","getScrollHeight","scrollHeight","getScrollRect","scrollElRect","edgeTop","scrollY","edgeBottom","relative","edges","getDocumentBody","body","getActiveElementByAnotherElement","el","ownerDocument","contains","getFirstTouchEventData","event","dataRaw","resolveData","type","changedTouches","touches","screenX","screenY","clientX","clientY","pageX","pageY","process","env","NODE_ENV","initializeBrowserGesturePreventionEffect","options","passive","handleWindowTouchMove","preventDefault","stopPropagation","classList","add","addEventListener","dispose","remove","removeEventListener"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/dom.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { canUseDOM } from '@vkontakte/vkjs';\nimport { rectToClientRect } from '@vkontakte/vkui-floating-ui/core';\nimport {\n getParentNode,\n getWindow,\n isElement,\n isHTMLElement,\n isLastTraversableNode,\n isOverflowElement,\n} from '@vkontakte/vkui-floating-ui/utils/dom';\n\nexport {\n getWindow,\n getNodeScroll,\n isHTMLElement,\n isElement,\n getParentNode,\n} from '@vkontakte/vkui-floating-ui/utils/dom';\n\nexport { canUseDOM, canUseEventListeners, onDOMLoaded } from '@vkontakte/vkjs';\nexport interface DOMContextInterface {\n /**\n * @ignore\n */\n window?: Window;\n /**\n * @ignore\n */\n document?: Document;\n}\n\nexport type DOMProps = DOMContextInterface;\n\n/* eslint-disable no-restricted-globals */\nconst getDOM = (): DOMContextInterface => ({\n window: canUseDOM ? window : undefined,\n document: canUseDOM ? document : undefined,\n});\n/* eslint-enable no-restricted-globals */\n\nexport const DOMContext: React.Context<DOMContextInterface> =\n React.createContext<DOMContextInterface>(getDOM());\n\nexport const useDOM = (): DOMContextInterface => {\n return React.useContext(DOMContext);\n};\n\n/**\n * В случае, если используется DOMContext, при проверке 'node instanceOf Window' – Window может быть\n * другим объектом.\n */\nexport const isWindow = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is Window => {\n return node !== null && node !== undefined && 'navigator' in node;\n};\n\nexport const isBody = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is HTMLBodyElement => {\n return node !== null && node !== undefined && 'tagName' in node && node.tagName === 'BODY';\n};\n\nexport const isDocumentElement = (\n node: Element | Window | VisualViewport | undefined | null,\n): node is HTMLHtmlElement => {\n return node !== null && node !== undefined && 'tagName' in node && node.tagName === 'HTML';\n};\n\nexport function withDOM<Props>(\n Component: React.ComponentType<Props & DOMProps>,\n): React.ComponentType<Props> {\n const WithDOM = (props: Props) => {\n const dom = useDOM();\n return <Component {...props} {...dom} />;\n };\n return WithDOM;\n}\n\nexport function blurActiveElement(document: Document | undefined): void {\n if (document && document.activeElement) {\n (document.activeElement as HTMLElement).blur();\n }\n}\n\nexport const TRANSFORM_DEFAULT_VALUES: string[] = ['none', 'initial', 'inherit', 'unset'];\nexport const WILL_CHANGE_DEFAULT_VALUES: string[] = ['auto', 'initial', 'inherit', 'unset'];\nexport function getTransformedParentCoords(element: Element): {\n x: number;\n y: number;\n} {\n let parentNode = element.parentNode;\n while (parentNode !== null) {\n if (isHTMLElement(parentNode)) {\n const { transform, willChange } = getComputedStyle(parentNode);\n if (\n !TRANSFORM_DEFAULT_VALUES.includes(transform) ||\n !WILL_CHANGE_DEFAULT_VALUES.includes(willChange)\n ) {\n const { x, y } = parentNode.getBoundingClientRect();\n return { x, y };\n }\n }\n parentNode = parentNode.parentNode;\n }\n return { x: 0, y: 0 };\n}\n\nexport const getBoundingClientRect = (node: Element | Window, isFixedStrategy = false) => {\n const element = isWindow(node) ? node.document.documentElement : node;\n const clientRect = element.getBoundingClientRect();\n\n if (isDocumentElement(element)) {\n /**\n * Если на странице не используется `html, body { height: 100% }` (или `height: 100vh`), то\n * `height`, полученный из `document.documentElement.getBoundingClientRect()`, будет возвращать\n * `scrollHeight`, а не `clientHeight`. Поэтому перебиваем `height` на `clientHeight`.\n */\n clientRect.height = element.clientHeight;\n }\n\n let offsetX = 0;\n let offsetY = 0;\n if (isFixedStrategy) {\n const { x, y } = getTransformedParentCoords(element);\n offsetX = x;\n offsetY = y;\n }\n\n return rectToClientRect({\n x: clientRect.left - offsetX,\n y: clientRect.top - offsetY,\n width: clientRect.width,\n height: clientRect.height,\n }) as DOMRect;\n};\n\nexport const getRelativeBoundingClientRect = (parent: Element, child: Element) => {\n const parentRect = getBoundingClientRect(parent);\n const childRect = getBoundingClientRect(child);\n return rectToClientRect({\n x: childRect.left - parentRect.left,\n y: childRect.top - parentRect.top,\n width: childRect.width,\n height: childRect.height,\n }) as DOMRect;\n};\n\n/**\n * Переписанный `getNearestOverflowAncestor` из @floating-ui/utils/dom.\n *\n * [1] добавляем ноду, на которой нужно остановить рекурсию\n * [2] document.body подменяем на window, т.к. на document.body нельзя применить скролл.\n *\n * @link https://github.com/floating-ui/floating-ui/blob/%40floating-ui/dom%401.6.3/packages/utils/src/dom.ts#L143\n */\nexport function getNearestOverflowAncestor(node: Node): HTMLElement | Window | null;\nexport function getNearestOverflowAncestor(node: Node, terminalNode: Node): HTMLElement | null;\nexport function getNearestOverflowAncestor(node: Node, terminalNode?: any): any {\n const parentNode = getParentNode(node);\n\n if (terminalNode === parentNode) {\n return null; /* [1] */\n }\n\n if (isLastTraversableNode(parentNode)) {\n return getWindow(parentNode); /* [2] */\n }\n\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n\n return getNearestOverflowAncestor(parentNode, terminalNode);\n}\n\nexport const getScrollHeight = (node: Element | Window): number => {\n return isWindow(node) ? node.document.documentElement.scrollHeight : node.scrollHeight;\n};\n\nexport const getScrollRect = (\n node: Element | Window,\n): {\n relative: DOMRect;\n edges: {\n y: [number, number];\n };\n} => {\n const window = isElement(node) ? getWindow(node) : node;\n const scrollElRect = getBoundingClientRect(node);\n\n const edgeTop = window.scrollY + scrollElRect.top;\n const edgeBottom = edgeTop + scrollElRect.height;\n const y: [number, number] = [edgeTop, edgeBottom];\n\n return {\n relative: scrollElRect,\n edges: { y },\n };\n};\n\nexport const getDocumentBody = (node?: any): HTMLElement => getWindow(node).document.body;\n\nexport const getActiveElementByAnotherElement = (el: Element | null): Element | null =>\n el ? el.ownerDocument.activeElement : null;\n\nexport const contains = (parent?: Element | null, child?: Element | null): boolean => {\n return parent && child ? parent.contains(child) : false;\n};\n\nexport const getFirstTouchEventData = (\n event: UIEvent | React.UIEvent<HTMLElement>,\n): {\n screenX: number;\n screenY: number;\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n} => {\n let dataRaw = (function resolveData() {\n switch (event.type) {\n case 'touchend':\n return (event as TouchEvent).changedTouches[0];\n case 'touchstart':\n case 'touchmove':\n case 'touchcancel':\n return (event as TouchEvent).touches[0];\n case 'mousedown':\n case 'mousemove':\n case 'mouseup':\n case 'mouseleave':\n return event as MouseEvent;\n default:\n return { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0 };\n }\n })();\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'test') {\n dataRaw = dataRaw\n ? dataRaw\n : { screenX: 0, screenY: 0, clientX: 0, clientY: 0, pageX: 0, pageY: 0 };\n }\n return {\n screenX: dataRaw.screenX || 0,\n screenY: dataRaw.screenY || 0,\n clientX: dataRaw.clientX || 0,\n clientY: dataRaw.clientY || 0,\n pageX: dataRaw.pageX || 0,\n pageY: dataRaw.pageY || 0,\n };\n};\n\n/**\n * ⚠️ В частности, необходимо для iOS 15. Начиная с этой версии в Safari добавили\n * pull-to-refresh. CSS св-во `overflow-behavior` появился только с iOS 16.\n *\n * Во вторую очередь, полезна блокированием скролла, чтобы пользователь дождался обновления\n * данных.\n */\nexport const initializeBrowserGesturePreventionEffect = (window: Window): VoidFunction => {\n const options: AddEventListenerOptions & EventListenerOptions = { passive: false };\n const handleWindowTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n window.document.documentElement.classList.add('vkui--disable-overscroll-behavior'); // eslint-disable-line no-restricted-properties\n window.addEventListener('touchmove', handleWindowTouchMove, options);\n\n return function dispose() {\n window.document.documentElement.classList.remove('vkui--disable-overscroll-behavior'); // eslint-disable-line no-restricted-properties\n window.removeEventListener('touchmove', handleWindowTouchMove, options);\n };\n};\n\nconst nonTextInputTypes = { button: true, submit: true, reset: true, color: true, file: true, image: true, checkbox: true, radio: true }; // prettier-ignore\n\nexport const isHTMLContentEditableElement = (\n el: Element | null,\n): el is HTMLInputElement | HTMLTextAreaElement | HTMLElement => {\n if (el === null) {\n return false;\n }\n\n if (el.tagName === 'INPUT') {\n // @ts-expect-error: TS2339 за счёт `tagName` удовлетворяемся, что это `HTMLInputElement`\n return !nonTextInputTypes[el.type]; // prettier-ignore\n }\n\n return (\n el.tagName === 'TEXTAREA' ||\n // eslint-disable-next-line no-restricted-properties\n el.closest('[contenteditable=true]') !== null\n );\n};\n\nexport type VisualViewport = {\n offsetTop: number;\n offsetLeft: number;\n width: number;\n height: number;\n};\n\n/**\n * Фоллбек `visualViewport` для **Safari 12**.\n */\nexport function getVisualViewport(win: Window): VisualViewport {\n const result: VisualViewport = { offsetTop: 0, offsetLeft: 0, width: 0, height: 0 };\n if (win.visualViewport) {\n const { offsetTop, offsetLeft, width, height } = win.visualViewport;\n result.offsetTop = Math.round(offsetTop);\n result.offsetLeft = offsetLeft;\n result.width = width;\n result.height = Math.round(height);\n\n return result;\n }\n\n // TODO[Safari@>=13] Удалить фоллбек\n result.offsetTop = win.pageYOffset;\n result.offsetLeft = win.pageXOffset;\n result.width = win.innerWidth; // note: вызывает reflow в отличии от visualViewport\n result.height = win.innerHeight; // note: вызывает reflow в отличии от visualViewport\n return result;\n}\n\nexport const hasSelectionWithRangeType = (node: unknown) => {\n const selection = getWindow(node).getSelection();\n return selection ? selection.type === 'Range' : false;\n};\n"],"names":["React","canUseDOM","rectToClientRect","getParentNode","getWindow","isElement","isHTMLElement","isLastTraversableNode","isOverflowElement","getNodeScroll","canUseEventListeners","onDOMLoaded","getDOM","window","undefined","document","DOMContext","createContext","useDOM","useContext","isWindow","node","isBody","tagName","isDocumentElement","withDOM","Component","WithDOM","props","dom","blurActiveElement","activeElement","blur","TRANSFORM_DEFAULT_VALUES","WILL_CHANGE_DEFAULT_VALUES","getTransformedParentCoords","element","parentNode","transform","willChange","getComputedStyle","includes","x","y","getBoundingClientRect","isFixedStrategy","documentElement","clientRect","height","clientHeight","offsetX","offsetY","left","top","width","getRelativeBoundingClientRect","parent","child","parentRect","childRect","getNearestOverflowAncestor","terminalNode","getScrollHeight","scrollHeight","getScrollRect","scrollElRect","edgeTop","scrollY","edgeBottom","relative","edges","getDocumentBody","body","getActiveElementByAnotherElement","el","ownerDocument","contains","getFirstTouchEventData","event","dataRaw","resolveData","type","changedTouches","touches","screenX","screenY","clientX","clientY","pageX","pageY","process","env","NODE_ENV","initializeBrowserGesturePreventionEffect","options","passive","handleWindowTouchMove","preventDefault","stopPropagation","classList","add","addEventListener","dispose","remove","removeEventListener","nonTextInputTypes","button","submit","reset","color","file","image","checkbox","radio","isHTMLContentEditableElement","closest","getVisualViewport","win","result","offsetTop","offsetLeft","visualViewport","Math","round","pageYOffset","pageXOffset","innerWidth","innerHeight","hasSelectionWithRangeType","selection","getSelection"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePlacementChangeCallback.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/usePlacementChangeCallback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,iBAAiB,EACnC,iBAAiB,EAAE,SAAS,EAC5B,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,GAC/C,IAAI,CAeN"}
1
+ {"version":3,"file":"usePlacementChangeCallback.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/usePlacementChangeCallback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,iBAAiB,EACnC,iBAAiB,EAAE,SAAS,EAC5B,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,GAC/C,IAAI,CAqBN"}
@@ -1,18 +1,21 @@
1
- import { usePrevious } from "../../hooks/usePrevious.js";
1
+ import * as React from "react";
2
2
  import { useIsomorphicLayoutEffect } from "../useIsomorphicLayoutEffect.js";
3
3
  export function usePlacementChangeCallback(initialPlacement, resolvedPlacement, onPlacementChange) {
4
- const prevPlacement = usePrevious(resolvedPlacement);
4
+ const prevPlacementRef = React.useRef(undefined);
5
+ React.useEffect(()=>{
6
+ prevPlacementRef.current = resolvedPlacement;
7
+ });
5
8
  useIsomorphicLayoutEffect(()=>{
6
9
  if (!onPlacementChange) {
7
10
  return;
8
11
  }
12
+ const prevPlacement = prevPlacementRef.current;
9
13
  const isInitialPlacementChanged = prevPlacement === undefined && initialPlacement !== resolvedPlacement;
10
14
  const isResolvedPlacementChanged = prevPlacement !== undefined && prevPlacement !== resolvedPlacement;
11
15
  if (isInitialPlacementChanged || isResolvedPlacementChanged) {
12
16
  onPlacementChange(resolvedPlacement);
13
17
  }
14
18
  }, [
15
- prevPlacement,
16
19
  initialPlacement,
17
20
  resolvedPlacement,
18
21
  onPlacementChange
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/floating/usePlacementChangeCallback.ts"],"sourcesContent":["import { usePrevious } from '../../hooks/usePrevious';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport type { OnPlacementChange, Placement, PlacementWithAuto } from './types/common';\n\nexport function usePlacementChangeCallback(\n initialPlacement: PlacementWithAuto,\n resolvedPlacement: Placement,\n onPlacementChange: OnPlacementChange | undefined,\n): void {\n const prevPlacement = usePrevious(resolvedPlacement);\n\n useIsomorphicLayoutEffect(() => {\n if (!onPlacementChange) {\n return;\n }\n const isInitialPlacementChanged =\n prevPlacement === undefined && initialPlacement !== resolvedPlacement;\n const isResolvedPlacementChanged =\n prevPlacement !== undefined && prevPlacement !== resolvedPlacement;\n if (isInitialPlacementChanged || isResolvedPlacementChanged) {\n onPlacementChange(resolvedPlacement);\n }\n }, [prevPlacement, initialPlacement, resolvedPlacement, onPlacementChange]);\n}\n"],"names":["usePrevious","useIsomorphicLayoutEffect","usePlacementChangeCallback","initialPlacement","resolvedPlacement","onPlacementChange","prevPlacement","isInitialPlacementChanged","undefined","isResolvedPlacementChanged"],"mappings":"AAAA,SAASA,WAAW,QAAQ,6BAA0B;AACtD,SAASC,yBAAyB,QAAQ,kCAA+B;AAGzE,OAAO,SAASC,2BACdC,gBAAmC,EACnCC,iBAA4B,EAC5BC,iBAAgD;IAEhD,MAAMC,gBAAgBN,YAAYI;IAElCH,0BAA0B;QACxB,IAAI,CAACI,mBAAmB;YACtB;QACF;QACA,MAAME,4BACJD,kBAAkBE,aAAaL,qBAAqBC;QACtD,MAAMK,6BACJH,kBAAkBE,aAAaF,kBAAkBF;QACnD,IAAIG,6BAA6BE,4BAA4B;YAC3DJ,kBAAkBD;QACpB;IACF,GAAG;QAACE;QAAeH;QAAkBC;QAAmBC;KAAkB;AAC5E"}
1
+ {"version":3,"sources":["../../../src/lib/floating/usePlacementChangeCallback.ts"],"sourcesContent":["import * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport type { OnPlacementChange, Placement, PlacementWithAuto } from './types/common';\n\nexport function usePlacementChangeCallback(\n initialPlacement: PlacementWithAuto,\n resolvedPlacement: Placement,\n onPlacementChange: OnPlacementChange | undefined,\n): void {\n const prevPlacementRef = React.useRef<Placement | undefined>(undefined);\n React.useEffect(() => {\n prevPlacementRef.current = resolvedPlacement;\n });\n\n useIsomorphicLayoutEffect(() => {\n if (!onPlacementChange) {\n return;\n }\n\n const prevPlacement = prevPlacementRef.current;\n\n const isInitialPlacementChanged =\n prevPlacement === undefined && initialPlacement !== resolvedPlacement;\n const isResolvedPlacementChanged =\n prevPlacement !== undefined && prevPlacement !== resolvedPlacement;\n if (isInitialPlacementChanged || isResolvedPlacementChanged) {\n onPlacementChange(resolvedPlacement);\n }\n }, [initialPlacement, resolvedPlacement, onPlacementChange]);\n}\n"],"names":["React","useIsomorphicLayoutEffect","usePlacementChangeCallback","initialPlacement","resolvedPlacement","onPlacementChange","prevPlacementRef","useRef","undefined","useEffect","current","prevPlacement","isInitialPlacementChanged","isResolvedPlacementChanged"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,kCAA+B;AAGzE,OAAO,SAASC,2BACdC,gBAAmC,EACnCC,iBAA4B,EAC5BC,iBAAgD;IAEhD,MAAMC,mBAAmBN,MAAMO,MAAM,CAAwBC;IAC7DR,MAAMS,SAAS,CAAC;QACdH,iBAAiBI,OAAO,GAAGN;IAC7B;IAEAH,0BAA0B;QACxB,IAAI,CAACI,mBAAmB;YACtB;QACF;QAEA,MAAMM,gBAAgBL,iBAAiBI,OAAO;QAE9C,MAAME,4BACJD,kBAAkBH,aAAaL,qBAAqBC;QACtD,MAAMS,6BACJF,kBAAkBH,aAAaG,kBAAkBP;QACnD,IAAIQ,6BAA6BC,4BAA4B;YAC3DR,kBAAkBD;QACpB;IACF,GAAG;QAACD;QAAkBC;QAAmBC;KAAkB;AAC7D"}
@@ -0,0 +1,28 @@
1
+ /** @public */
2
+ export declare const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY = "data-vkui-block-sheet-behavior";
3
+ /** @public */
4
+ export declare const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE: {
5
+ "data-vkui-block-sheet-behavior": boolean;
6
+ };
7
+ /** @private */
8
+ export declare const DRAG_THRESHOLDS: {
9
+ DISTANCE_FOR_MOVING_START: 12;
10
+ VELOCITY: 500;
11
+ };
12
+ /** @private */
13
+ export declare const SNAP_POINT_SAFE_RANGE: {
14
+ LOWER: 25;
15
+ HIGHEST: 90;
16
+ };
17
+ /** @private */
18
+ export declare const SNAP_POINT_DETENTS: {
19
+ MIN: 0;
20
+ MEDIUM: 50;
21
+ LARGE: 100;
22
+ };
23
+ /** @private */
24
+ export declare const DYNAMIC_SNAP_POINT_DATA: {
25
+ IDLE_POINT_VALUE: 0;
26
+ COMPUTED_INDEX: 1;
27
+ };
28
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/sheet/constants.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AAExF,cAAc;AACd,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,qBAAqB;;;CAGjC,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,uBAAuB;;;CAGnC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** @public */ export const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY = 'data-vkui-block-sheet-behavior';
2
+ /** @public */ export const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE = {
3
+ [BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY]: true
4
+ };
5
+ /** @private */ export const DRAG_THRESHOLDS = {
6
+ DISTANCE_FOR_MOVING_START: 12,
7
+ VELOCITY: 500
8
+ };
9
+ /** @private */ export const SNAP_POINT_SAFE_RANGE = {
10
+ LOWER: 25,
11
+ HIGHEST: 90
12
+ };
13
+ /** @private */ export const SNAP_POINT_DETENTS = {
14
+ MIN: 0,
15
+ MEDIUM: 50,
16
+ LARGE: 100
17
+ };
18
+ /** @private */ export const DYNAMIC_SNAP_POINT_DATA = {
19
+ IDLE_POINT_VALUE: 0,
20
+ COMPUTED_INDEX: 1
21
+ };
22
+
23
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/sheet/constants.ts"],"sourcesContent":["/** @public */\nexport const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY = 'data-vkui-block-sheet-behavior';\n\n/** @public */\nexport const BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE = {\n [BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY]: true,\n};\n\n/** @private */\nexport const DRAG_THRESHOLDS = {\n DISTANCE_FOR_MOVING_START: 12 as const,\n VELOCITY: 500 as const,\n};\n\n/** @private */\nexport const SNAP_POINT_SAFE_RANGE = {\n LOWER: 25 as const,\n HIGHEST: 90 as const,\n};\n\n/** @private */\nexport const SNAP_POINT_DETENTS = {\n MIN: 0 as const,\n MEDIUM: 50 as const,\n LARGE: 100 as const,\n};\n\n/** @private */\nexport const DYNAMIC_SNAP_POINT_DATA = {\n IDLE_POINT_VALUE: 0 as const,\n COMPUTED_INDEX: 1 as const,\n};\n"],"names":["BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE_KEY","BLOCK_SHEET_BEHAVIOR_DATA_ATTRIBUTE","DRAG_THRESHOLDS","DISTANCE_FOR_MOVING_START","VELOCITY","SNAP_POINT_SAFE_RANGE","LOWER","HIGHEST","SNAP_POINT_DETENTS","MIN","MEDIUM","LARGE","DYNAMIC_SNAP_POINT_DATA","IDLE_POINT_VALUE","COMPUTED_INDEX"],"mappings":"AAAA,YAAY,GACZ,OAAO,MAAMA,0CAA0C,iCAAiC;AAExF,YAAY,GACZ,OAAO,MAAMC,sCAAsC;IACjD,CAACD,wCAAwC,EAAE;AAC7C,EAAE;AAEF,aAAa,GACb,OAAO,MAAME,kBAAkB;IAC7BC,2BAA2B;IAC3BC,UAAU;AACZ,EAAE;AAEF,aAAa,GACb,OAAO,MAAMC,wBAAwB;IACnCC,OAAO;IACPC,SAAS;AACX,EAAE;AAEF,aAAa,GACb,OAAO,MAAMC,qBAAqB;IAChCC,KAAK;IACLC,QAAQ;IACRC,OAAO;AACT,EAAE;AAEF,aAAa,GACb,OAAO,MAAMC,0BAA0B;IACrCC,kBAAkB;IAClBC,gBAAgB;AAClB,EAAE"}