@vkontakte/vkui 6.0.0-beta.1 → 6.0.0-beta.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 (328) hide show
  1. package/README.md +6 -14
  2. package/dist/cjs/components/AppRoot/AppRoot.d.ts +18 -11
  3. package/dist/cjs/components/AppRoot/AppRoot.d.ts.map +1 -1
  4. package/dist/cjs/components/AppRoot/AppRoot.js +85 -148
  5. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  6. package/dist/cjs/components/AppRoot/AppRootContext.d.ts +12 -6
  7. package/dist/cjs/components/AppRoot/AppRootContext.d.ts.map +1 -1
  8. package/dist/cjs/components/AppRoot/AppRootContext.js +20 -6
  9. package/dist/cjs/components/AppRoot/AppRootContext.js.map +1 -1
  10. package/dist/cjs/components/AppRoot/AppRootPortal.js +1 -1
  11. package/dist/cjs/components/AppRoot/AppRootPortal.js.map +1 -1
  12. package/dist/cjs/components/AppRoot/helpers.d.ts +18 -0
  13. package/dist/cjs/components/AppRoot/helpers.d.ts.map +1 -0
  14. package/dist/cjs/components/AppRoot/helpers.js +98 -0
  15. package/dist/cjs/components/AppRoot/helpers.js.map +1 -0
  16. package/dist/cjs/components/AppRoot/types.d.ts +10 -0
  17. package/dist/cjs/components/AppRoot/types.d.ts.map +1 -0
  18. package/dist/cjs/components/AppRoot/types.js +6 -0
  19. package/dist/cjs/components/AppRoot/types.js.map +1 -0
  20. package/dist/cjs/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  21. package/dist/cjs/components/ConfigProvider/ConfigProvider.js +0 -18
  22. package/dist/cjs/components/ConfigProvider/ConfigProvider.js.map +1 -1
  23. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  24. package/dist/cjs/components/CustomSelect/CustomSelect.js +4 -1
  25. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  26. package/dist/cjs/components/CustomSelect/CustomSelectClearButton.js +2 -2
  27. package/dist/cjs/components/CustomSelect/CustomSelectClearButton.js.map +1 -1
  28. package/dist/cjs/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  29. package/dist/cjs/components/CustomSelect/CustomSelectInput.js +15 -10
  30. package/dist/cjs/components/CustomSelect/CustomSelectInput.js.map +1 -1
  31. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.d.ts +1 -1
  32. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  33. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  34. package/dist/cjs/components/ModalCardBase/ModalCardBase.d.ts.map +1 -1
  35. package/dist/cjs/components/ModalCardBase/ModalCardBase.js +8 -3
  36. package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
  37. package/dist/cjs/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  38. package/dist/cjs/components/ModalRoot/ModalRoot.js +1 -0
  39. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  40. package/dist/cjs/components/PopoutRoot/PopoutRoot.d.ts +11 -0
  41. package/dist/cjs/components/PopoutRoot/PopoutRoot.d.ts.map +1 -1
  42. package/dist/cjs/components/PopoutRoot/PopoutRoot.js +31 -9
  43. package/dist/cjs/components/PopoutRoot/PopoutRoot.js.map +1 -1
  44. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.d.ts +18 -1
  45. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  46. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js +0 -6
  47. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  48. package/dist/cjs/components/RootComponent/RootComponent.d.ts +1 -1
  49. package/dist/cjs/components/RootComponent/RootComponent.d.ts.map +1 -1
  50. package/dist/cjs/components/RootComponent/RootComponent.js.map +1 -1
  51. package/dist/cjs/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  52. package/dist/cjs/components/SelectMimicry/SelectMimicry.d.ts.map +1 -1
  53. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  54. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
  55. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js +1 -6
  56. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  57. package/dist/cjs/components/Tappable/Tappable.d.ts +1 -0
  58. package/dist/cjs/components/Tappable/Tappable.d.ts.map +1 -1
  59. package/dist/cjs/components/Tappable/Tappable.js +1 -1
  60. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  61. package/dist/cjs/components/UsersStack/UsersStack.d.ts.map +1 -1
  62. package/dist/cjs/components/UsersStack/UsersStack.js +1 -1
  63. package/dist/cjs/components/UsersStack/UsersStack.js.map +1 -1
  64. package/dist/cjs/hooks/useAutoDetectAppearance.d.ts +1 -1
  65. package/dist/cjs/hooks/useAutoDetectAppearance.d.ts.map +1 -1
  66. package/dist/cjs/hooks/useAutoDetectAppearance.js +4 -10
  67. package/dist/cjs/hooks/useAutoDetectAppearance.js.map +1 -1
  68. package/dist/cjs/hooks/useFocusVisible.d.ts +1 -1
  69. package/dist/cjs/hooks/useObjectMemo.d.ts +0 -1
  70. package/dist/cjs/hooks/useObjectMemo.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useObjectMemo.js +5 -15
  72. package/dist/cjs/hooks/useObjectMemo.js.map +1 -1
  73. package/dist/cjs/index.d.ts +2 -3
  74. package/dist/cjs/index.d.ts.map +1 -1
  75. package/dist/cjs/index.js +0 -4
  76. package/dist/cjs/index.js.map +1 -1
  77. package/dist/cjs/lib/createPortal.d.ts +1 -2
  78. package/dist/cjs/lib/createPortal.d.ts.map +1 -1
  79. package/dist/cjs/lib/createPortal.js.map +1 -1
  80. package/dist/components/AppRoot/AppRoot.d.ts +18 -11
  81. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  82. package/dist/components/AppRoot/AppRoot.js +87 -150
  83. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  84. package/dist/components/AppRoot/AppRootContext.d.ts +12 -6
  85. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  86. package/dist/components/AppRoot/AppRootContext.js +13 -3
  87. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  88. package/dist/components/AppRoot/AppRootPortal.js +1 -1
  89. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  90. package/dist/components/AppRoot/helpers.d.ts +18 -0
  91. package/dist/components/AppRoot/helpers.d.ts.map +1 -0
  92. package/dist/components/AppRoot/helpers.js +71 -0
  93. package/dist/components/AppRoot/helpers.js.map +1 -0
  94. package/dist/components/AppRoot/types.d.ts +10 -0
  95. package/dist/components/AppRoot/types.d.ts.map +1 -0
  96. package/dist/components/AppRoot/types.js +3 -0
  97. package/dist/components/AppRoot/types.js.map +1 -0
  98. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  99. package/dist/components/ConfigProvider/ConfigProvider.js +1 -19
  100. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  101. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  102. package/dist/components/CustomSelect/CustomSelect.js +4 -1
  103. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  104. package/dist/components/CustomSelect/CustomSelectClearButton.js +2 -2
  105. package/dist/components/CustomSelect/CustomSelectClearButton.js.map +1 -1
  106. package/dist/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  107. package/dist/components/CustomSelect/CustomSelectInput.js +15 -10
  108. package/dist/components/CustomSelect/CustomSelectInput.js.map +1 -1
  109. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts +1 -1
  110. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  111. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  112. package/dist/components/ModalCardBase/ModalCardBase.d.ts.map +1 -1
  113. package/dist/components/ModalCardBase/ModalCardBase.js +8 -3
  114. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  115. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  116. package/dist/components/ModalRoot/ModalRoot.js +1 -0
  117. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  118. package/dist/components/PopoutRoot/PopoutRoot.d.ts +11 -0
  119. package/dist/components/PopoutRoot/PopoutRoot.d.ts.map +1 -1
  120. package/dist/components/PopoutRoot/PopoutRoot.js +24 -7
  121. package/dist/components/PopoutRoot/PopoutRoot.js.map +1 -1
  122. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts +18 -1
  123. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  124. package/dist/components/PopoutWrapper/PopoutWrapper.js +0 -6
  125. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  126. package/dist/components/RootComponent/RootComponent.d.ts +1 -1
  127. package/dist/components/RootComponent/RootComponent.d.ts.map +1 -1
  128. package/dist/components/RootComponent/RootComponent.js.map +1 -1
  129. package/dist/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  130. package/dist/components/SelectMimicry/SelectMimicry.d.ts.map +1 -1
  131. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  132. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
  133. package/dist/components/SubnavigationBar/SubnavigationBar.js +1 -6
  134. package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  135. package/dist/components/Tappable/Tappable.d.ts +1 -0
  136. package/dist/components/Tappable/Tappable.d.ts.map +1 -1
  137. package/dist/components/Tappable/Tappable.js +1 -1
  138. package/dist/components/Tappable/Tappable.js.map +1 -1
  139. package/dist/components/UsersStack/UsersStack.d.ts.map +1 -1
  140. package/dist/components/UsersStack/UsersStack.js +1 -1
  141. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  142. package/dist/components.css +16 -17
  143. package/dist/components.css.map +1 -1
  144. package/dist/components.js.tmp +2856 -2953
  145. package/dist/cssm/components/AppRoot/AppRoot.d.ts +18 -11
  146. package/dist/cssm/components/AppRoot/AppRoot.d.ts.map +1 -1
  147. package/dist/cssm/components/AppRoot/AppRoot.js +87 -146
  148. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  149. package/dist/cssm/components/AppRoot/AppRootContext.d.ts +12 -6
  150. package/dist/cssm/components/AppRoot/AppRootContext.d.ts.map +1 -1
  151. package/dist/cssm/components/AppRoot/AppRootContext.js +13 -3
  152. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  153. package/dist/cssm/components/AppRoot/AppRootPortal.js +1 -1
  154. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  155. package/dist/cssm/components/AppRoot/helpers.d.ts +18 -0
  156. package/dist/cssm/components/AppRoot/helpers.d.ts.map +1 -0
  157. package/dist/cssm/components/AppRoot/helpers.js +71 -0
  158. package/dist/cssm/components/AppRoot/helpers.js.map +1 -0
  159. package/dist/cssm/components/AppRoot/types.d.ts +10 -0
  160. package/dist/cssm/components/AppRoot/types.d.ts.map +1 -0
  161. package/dist/cssm/components/AppRoot/types.js +3 -0
  162. package/dist/cssm/components/AppRoot/types.js.map +1 -0
  163. package/dist/cssm/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  164. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +1 -19
  165. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  166. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  167. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -0
  168. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  169. package/dist/cssm/components/CustomSelect/CustomSelectClearButton.js +2 -2
  170. package/dist/cssm/components/CustomSelect/CustomSelectClearButton.js.map +1 -1
  171. package/dist/cssm/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  172. package/dist/cssm/components/CustomSelect/CustomSelectInput.js +15 -11
  173. package/dist/cssm/components/CustomSelect/CustomSelectInput.js.map +1 -1
  174. package/dist/cssm/components/FormField/FormField.module.css +0 -11
  175. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.d.ts +1 -1
  176. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  177. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  178. package/dist/cssm/components/ModalCardBase/ModalCardBase.d.ts.map +1 -1
  179. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +8 -3
  180. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  181. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +0 -17
  182. package/dist/cssm/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  183. package/dist/cssm/components/ModalRoot/ModalRoot.js +1 -0
  184. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  185. package/dist/cssm/components/PopoutRoot/PopoutRoot.d.ts +11 -0
  186. package/dist/cssm/components/PopoutRoot/PopoutRoot.d.ts.map +1 -1
  187. package/dist/cssm/components/PopoutRoot/PopoutRoot.js +14 -7
  188. package/dist/cssm/components/PopoutRoot/PopoutRoot.js.map +1 -1
  189. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.d.ts +18 -1
  190. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  191. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +0 -6
  192. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  193. package/dist/cssm/components/RootComponent/RootComponent.d.ts +1 -1
  194. package/dist/cssm/components/RootComponent/RootComponent.d.ts.map +1 -1
  195. package/dist/cssm/components/RootComponent/RootComponent.js.map +1 -1
  196. package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  197. package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts.map +1 -1
  198. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  199. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.d.ts.map +1 -1
  200. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +1 -6
  201. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  202. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.module.css +1 -6
  203. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -6
  204. package/dist/cssm/components/Tappable/Tappable.d.ts +1 -0
  205. package/dist/cssm/components/Tappable/Tappable.d.ts.map +1 -1
  206. package/dist/cssm/components/Tappable/Tappable.js +1 -0
  207. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  208. package/dist/cssm/components/UsersStack/UsersStack.d.ts.map +1 -1
  209. package/dist/cssm/components/UsersStack/UsersStack.js +1 -1
  210. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  211. package/dist/cssm/components/UsersStack/UsersStack.module.css +0 -10
  212. package/dist/cssm/hooks/useAutoDetectAppearance.d.ts +1 -1
  213. package/dist/cssm/hooks/useAutoDetectAppearance.d.ts.map +1 -1
  214. package/dist/cssm/hooks/useAutoDetectAppearance.js +4 -9
  215. package/dist/cssm/hooks/useAutoDetectAppearance.js.map +1 -1
  216. package/dist/cssm/hooks/useFocusVisible.d.ts +1 -1
  217. package/dist/cssm/hooks/useObjectMemo.d.ts +0 -1
  218. package/dist/cssm/hooks/useObjectMemo.d.ts.map +1 -1
  219. package/dist/cssm/hooks/useObjectMemo.js +2 -4
  220. package/dist/cssm/hooks/useObjectMemo.js.map +1 -1
  221. package/dist/cssm/index.d.ts +2 -3
  222. package/dist/cssm/index.d.ts.map +1 -1
  223. package/dist/cssm/index.js +1 -2
  224. package/dist/cssm/index.js.map +1 -1
  225. package/dist/cssm/lib/createPortal.d.ts +1 -2
  226. package/dist/cssm/lib/createPortal.d.ts.map +1 -1
  227. package/dist/cssm/lib/createPortal.js.map +1 -1
  228. package/dist/cssm/styles/common.css +9 -6
  229. package/dist/cssm/styles/themes.css +12 -6
  230. package/dist/hooks/useAutoDetectAppearance.d.ts +1 -1
  231. package/dist/hooks/useAutoDetectAppearance.d.ts.map +1 -1
  232. package/dist/hooks/useAutoDetectAppearance.js +4 -10
  233. package/dist/hooks/useAutoDetectAppearance.js.map +1 -1
  234. package/dist/hooks/useFocusVisible.d.ts +1 -1
  235. package/dist/hooks/useObjectMemo.d.ts +0 -1
  236. package/dist/hooks/useObjectMemo.d.ts.map +1 -1
  237. package/dist/hooks/useObjectMemo.js +2 -4
  238. package/dist/hooks/useObjectMemo.js.map +1 -1
  239. package/dist/index.d.ts +2 -3
  240. package/dist/index.d.ts.map +1 -1
  241. package/dist/index.js +1 -2
  242. package/dist/index.js.map +1 -1
  243. package/dist/lib/createPortal.d.ts +1 -2
  244. package/dist/lib/createPortal.d.ts.map +1 -1
  245. package/dist/lib/createPortal.js.map +1 -1
  246. package/dist/vkui.css +17 -18
  247. package/dist/vkui.css.map +1 -1
  248. package/dist/vkui.js.tmp +2856 -2953
  249. package/package.json +2 -2
  250. package/src/components/AppRoot/AppRoot.test.tsx +283 -89
  251. package/src/components/AppRoot/AppRoot.tsx +129 -180
  252. package/src/components/AppRoot/AppRootContext.ts +23 -9
  253. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  254. package/src/components/AppRoot/Readme.md +0 -8
  255. package/src/components/AppRoot/helpers.ts +90 -0
  256. package/src/components/AppRoot/types.ts +12 -0
  257. package/src/components/Calendar/Readme.md +95 -97
  258. package/src/components/CalendarRange/Readme.md +55 -57
  259. package/src/components/ConfigProvider/ConfigProvider.tsx +1 -27
  260. package/src/components/CustomSelect/CustomSelect.e2e.tsx +7 -1
  261. package/src/components/CustomSelect/CustomSelect.tsx +3 -0
  262. package/src/components/CustomSelect/CustomSelectClearButton.tsx +2 -2
  263. package/src/components/CustomSelect/CustomSelectInput.tsx +35 -15
  264. package/src/components/CustomSelect/Readme.md +3 -1
  265. package/src/components/DateInput/Readme.md +82 -87
  266. package/src/components/DateRangeInput/Readme.md +67 -72
  267. package/src/components/FormField/FormField.module.css +0 -9
  268. package/src/components/FormItem/Readme.md +4 -2
  269. package/src/components/FormLayoutGroup/Readme.md +2 -2
  270. package/src/components/Input/Readme.md +4 -4
  271. package/src/components/MiniInfoCell/MiniInfoCell.tsx +1 -1
  272. package/src/components/ModalCard/ModalCard.e2e-playground.tsx +48 -33
  273. package/src/components/ModalCard/ModalCard.stories.tsx +1 -1
  274. package/src/components/ModalCardBase/ModalCardBase.module.css +0 -14
  275. package/src/components/ModalCardBase/ModalCardBase.tsx +7 -12
  276. package/src/components/ModalCardBase/Readme.md +71 -12
  277. package/src/components/ModalRoot/ModalRoot.tsx +1 -0
  278. package/src/components/ModalRoot/Readme.md +78 -64
  279. package/src/components/PopoutRoot/PopoutRoot.test.tsx +10 -2
  280. package/src/components/PopoutRoot/PopoutRoot.tsx +20 -12
  281. package/src/components/PopoutWrapper/PopoutWrapper.test.tsx +14 -31
  282. package/src/components/PopoutWrapper/PopoutWrapper.tsx +18 -8
  283. package/src/components/PopoutWrapper/Readme.md +27 -8
  284. package/src/components/Popover/Popover.stories.tsx +3 -3
  285. package/src/components/Popover/Readme.md +2 -2
  286. package/src/components/Radio/Readme.md +2 -2
  287. package/src/components/RadioGroup/RadioGroup.e2e-playground.tsx +3 -3
  288. package/src/components/RadioGroup/Readme.md +4 -4
  289. package/src/components/RootComponent/RootComponent.tsx +1 -1
  290. package/src/components/SelectMimicry/SelectMimicry.tsx +3 -2
  291. package/src/components/Slider/Readme.md +2 -2
  292. package/src/components/Slider/__image_snapshots__/slider-with-tooltip-slider-with-tooltip-vkcom-chromium-dark-1-snap.png +2 -2
  293. package/src/components/Slider/__image_snapshots__/slider-with-tooltip-slider-with-tooltip-vkcom-firefox-dark-1-snap.png +2 -2
  294. package/src/components/Slider/__image_snapshots__/slider-with-tooltip-slider-with-tooltip-vkcom-webkit-dark-1-snap.png +2 -2
  295. package/src/components/SubnavigationBar/Readme.md +2 -2
  296. package/src/components/SubnavigationBar/SubnavigationBar.module.css +1 -6
  297. package/src/components/SubnavigationBar/SubnavigationBar.tsx +1 -6
  298. package/src/components/SubnavigationButton/SubnavigationButton.module.css +1 -6
  299. package/src/components/Tabs/Readme.md +1 -1
  300. package/src/components/Tappable/Tappable.tsx +2 -0
  301. package/src/components/UsersStack/UsersStack.module.css +0 -8
  302. package/src/components/UsersStack/UsersStack.tsx +1 -6
  303. package/src/components/View/Readme.md +10 -10
  304. package/src/hooks/useAutoDetectAppearance.test.ts +89 -0
  305. package/src/hooks/{useAutoDetectAppearance.tsx → useAutoDetectAppearance.ts} +6 -10
  306. package/src/hooks/useFocusVisible.test.tsx +5 -1
  307. package/src/hooks/useObjectMemo.ts +2 -8
  308. package/src/index.ts +2 -3
  309. package/src/lib/createPortal.ts +1 -1
  310. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.test.tsx +6 -3
  311. package/src/styles/common.css +11 -7
  312. package/dist/cjs/components/FormLayout/FormLayout.d.ts +0 -8
  313. package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +0 -1
  314. package/dist/cjs/components/FormLayout/FormLayout.js +0 -40
  315. package/dist/cjs/components/FormLayout/FormLayout.js.map +0 -1
  316. package/dist/components/FormLayout/FormLayout.d.ts +0 -8
  317. package/dist/components/FormLayout/FormLayout.d.ts.map +0 -1
  318. package/dist/components/FormLayout/FormLayout.js +0 -31
  319. package/dist/components/FormLayout/FormLayout.js.map +0 -1
  320. package/dist/cssm/components/FormLayout/FormLayout.d.ts +0 -8
  321. package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +0 -1
  322. package/dist/cssm/components/FormLayout/FormLayout.js +0 -22
  323. package/dist/cssm/components/FormLayout/FormLayout.js.map +0 -1
  324. package/dist/cssm/components/FormLayout/FormLayout.module.css +0 -18
  325. package/src/components/FormLayout/FormLayout.module.css +0 -16
  326. package/src/components/FormLayout/FormLayout.test.tsx +0 -10
  327. package/src/components/FormLayout/FormLayout.tsx +0 -41
  328. package/src/components/FormLayout/Readme.md +0 -2
package/README.md CHANGED
@@ -37,13 +37,13 @@ yarn add @vkontakte/vkui
37
37
  pnpm add @vkontakte/vkui
38
38
  ```
39
39
 
40
- > _Обратите внимание_: мы поддерживаем [react](https://www.npmjs.com/package/react) и [react-dom](https://www.npmjs.com/package/react-dom) `^17.0.0` и `^18.1.0`
40
+ > _Обратите внимание_: мы поддерживаем [react](https://www.npmjs.com/package/react) и [react-dom](https://www.npmjs.com/package/react-dom) версии `^18.2.0`
41
41
 
42
42
  ## Hello World
43
43
 
44
44
  ```jsx static
45
45
  import * as React from 'react';
46
- import ReactDOM from 'react-dom';
46
+ import { createRoot } from 'react-dom/client';
47
47
  import {
48
48
  AdaptivityProvider,
49
49
  ConfigProvider,
@@ -79,28 +79,20 @@ const Example = () => {
79
79
  );
80
80
  };
81
81
 
82
- ReactDOM.render(
82
+ const container = document.getElementById('root');
83
+ const root = createRoot(container); // createRoot(container!) if you use TypeScript
84
+ root.render(
83
85
  <ConfigProvider>
84
86
  <AdaptivityProvider>
85
87
  <Example />
86
88
  </AdaptivityProvider>
87
89
  </ConfigProvider>,
88
- document.getElementById('root'),
89
90
  );
90
91
  ```
91
92
 
92
93
  ## Браузеры
93
94
 
94
- На данный момент мы поддерживаем WebView следующих операционных систем:
95
-
96
- - Android >= 5
97
- - iOS >= 9
98
-
99
- Иными словами, мы поддерживаем браузеры следующих версий:
100
-
101
- - Safari для iOS >= 9
102
- - Android Browser >= 5 (Chrome 36)
103
- - Chrome для Android, начиная с Android 5.0 (Chrome 36)
95
+ С подробным списком можно ознакомиться в файле [.browserslistrc](https://github.com/VKCOM/VKUI/blob/master/.browserslistrc)
104
96
 
105
97
  ## Тестирование
106
98
 
@@ -1,15 +1,18 @@
1
1
  import * as React from 'react';
2
- export type SafeAreaInsets = {
3
- top?: number;
4
- right?: number;
5
- bottom?: number;
6
- left?: number;
7
- };
2
+ import type { AppRootLayout, AppRootMode, AppRootScroll, SafeAreaInsets } from './types';
8
3
  export interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {
9
4
  /** Режим встраивания */
10
- mode?: 'partial' | 'embedded' | 'full';
11
- window?: Window;
12
- scroll?: 'global' | 'contain';
5
+ mode?: AppRootMode;
6
+ /**
7
+ * - `global` (по умолчанию) — VKUI-приложение скроллится вместе со страницей.
8
+ * - `contain` — VKUI-приложение живет в отдельной зоне и скроллится независимо внутри `AppRoot` (например, в модалке).
9
+ *
10
+ * Полезно при использовании `mode="embedded"`.
11
+ */
12
+ scroll?: AppRootScroll;
13
+ /**
14
+ * см. документацию [mdn web docs | env#values](https://developer.mozilla.org/en-US/docs/Web/CSS/env#values).
15
+ */
13
16
  safeAreaInsets?: SafeAreaInsets;
14
17
  /**
15
18
  * Кастомный root-элемент портала
@@ -26,10 +29,14 @@ export interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {
26
29
  * Это поведение можно отключить с помощью этого параметра.
27
30
  */
28
31
  disableParentTransformForPositionFixedElements?: boolean;
29
- layout?: 'card' | 'plain';
32
+ /**
33
+ * Глобально задаёт тип оформления макета для компонентов
34
+ * [Panel](https://vkcom.github.io/VKUI/#/Panel) и [Group](https://vkcom.github.io/VKUI/#/Group).
35
+ */
36
+ layout?: AppRootLayout;
30
37
  }
31
38
  /**
32
39
  * @see https://vkcom.github.io/VKUI/#/AppRoot
33
40
  */
34
- export declare const AppRoot: ({ children, mode, scroll, portalRoot: portalRootProp, disablePortal, disableParentTransformForPositionFixedElements, className, safeAreaInsets, layout, ...props }: AppRootProps) => React.JSX.Element;
41
+ export declare const AppRoot: ({ children, mode, scroll, portalRoot: portalRootProp, disablePortal, disableParentTransformForPositionFixedElements, className, safeAreaInsets: safeAreaInsetsProp, layout, ...props }: AppRootProps) => React.JSX.Element;
35
42
  //# sourceMappingURL=AppRoot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppRoot.d.ts","sourceRoot":"","sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA4CF,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,wBAAwB;IACxB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC/D;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,8CAA8C,CAAC,EAAE,OAAO,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,uKAWjB,YAAY,sBAyKd,CAAC"}
1
+ {"version":3,"file":"AppRoot.d.ts","sourceRoot":"","sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzF,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,wBAAwB;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC/D;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,8CAA8C,CAAC,EAAE,OAAO,CAAC;IACzD;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,2LAWjB,YAAY,sBAoJd,CAAC"}
@@ -16,39 +16,15 @@ const _vkjs = require("@vkontakte/vkjs");
16
16
  const _useAdaptivity = require("../../hooks/useAdaptivity");
17
17
  const _useAppearance = require("../../hooks/useAppearance");
18
18
  const _useKeyboardInputTracker = require("../../hooks/useKeyboardInputTracker");
19
+ const _useObjectMemo = require("../../hooks/useObjectMemo");
20
+ const _usePlatform = require("../../hooks/usePlatform");
19
21
  const _dom = require("../../lib/dom");
20
- const _isRefObject = require("../../lib/isRefObject");
21
22
  const _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
22
23
  const _AppRootContext = require("./AppRootContext");
23
24
  const _ScrollContext = require("./ScrollContext");
24
- const vkuiSizeXClassNames = {
25
- none: 'vkui--sizeX-none',
26
- ['regular']: 'vkui--sizeX-regular'
27
- };
28
- const vkuiSizeYClassNames = {
29
- none: 'vkui--sizeY-none',
30
- ['compact']: 'vkui--sizeY-compact'
31
- };
32
- const vkuiLayoutClassNames = {
33
- card: 'vkui--layout-card',
34
- plain: 'vkui--layout-plain'
35
- };
36
- function containerClassNames(layout, sizeX, sizeY) {
37
- const classNames = [];
38
- if (layout) {
39
- classNames.push(vkuiLayoutClassNames[layout]);
40
- }
41
- if (sizeX !== 'compact') {
42
- classNames.push(vkuiSizeXClassNames[sizeX]);
43
- }
44
- if (sizeY !== 'regular') {
45
- classNames.push(vkuiSizeYClassNames[sizeY]);
46
- }
47
- return classNames;
48
- }
49
- const INSET_CUSTOM_PROPERTY_PREFIX = `--vkui_internal--safe_area_inset_`;
25
+ const _helpers = require("./helpers");
50
26
  const AppRoot = (_param)=>{
51
- var { children, mode = 'full', scroll = 'global', portalRoot: portalRootProp = null, disablePortal, disableParentTransformForPositionFixedElements, className, safeAreaInsets, layout } = _param, props = _object_without_properties._(_param, [
27
+ var { children, mode = 'full', scroll = 'global', portalRoot: portalRootProp = null, disablePortal = false, disableParentTransformForPositionFixedElements, className, safeAreaInsets: safeAreaInsetsProp, layout } = _param, props = _object_without_properties._(_param, [
52
28
  "children",
53
29
  "mode",
54
30
  "scroll",
@@ -59,142 +35,103 @@ const AppRoot = (_param)=>{
59
35
  "safeAreaInsets",
60
36
  "layout"
61
37
  ]);
62
- const isKeyboardInputActiveRef = (0, _useKeyboardInputTracker.useKeyboardInputTracker)();
63
- const rootRef = _react.useRef(null);
64
- const [portalRoot, setPortalRoot] = _react.useState(null);
65
- const { document } = (0, _dom.useDOM)();
66
- const appearance = (0, _useAppearance.useAppearance)();
67
38
  const { hasPointer, sizeX = 'none', sizeY = 'none' } = (0, _useAdaptivity.useAdaptivity)();
68
- // setup portal
69
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
70
- let portal = null;
71
- if (portalRootProp) {
72
- if ((0, _isRefObject.isRefObject)(portalRootProp)) {
73
- portal = portalRootProp.current;
74
- } else {
75
- portal = portalRootProp;
76
- }
77
- }
78
- if (!portal) {
79
- portal = document.createElement('div');
80
- document.body.appendChild(portal);
39
+ const platform = (0, _usePlatform.usePlatform)();
40
+ const appearance = (0, _useAppearance.useAppearance)();
41
+ const safeAreaInsets = (0, _useObjectMemo.useObjectMemo)(safeAreaInsetsProp);
42
+ const isKeyboardInputActiveRef = (0, _useKeyboardInputTracker.useKeyboardInputTracker)();
43
+ const appRootRef = _react.useRef(null);
44
+ const portalRootRef = _react.useRef(null);
45
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function setupPortalRoot() {
46
+ const portalByProp = portalRootProp ? (0, _helpers.extractPortalRootByProp)(portalRootProp) : null;
47
+ if (portalByProp) {
48
+ portalRootRef.current = portalByProp;
49
+ return function cleanup() {
50
+ portalRootRef.current = null;
51
+ };
81
52
  }
82
- setPortalRoot(portal);
83
- return ()=>{
84
- if (!portalRootProp) {
85
- var _portal_parentElement;
86
- portal === null || portal === void 0 ? void 0 : (_portal_parentElement = portal.parentElement) === null || _portal_parentElement === void 0 ? void 0 : _portal_parentElement.removeChild(portal);
87
- }
53
+ const documentBody = (0, _dom.getDocumentBody)(appRootRef.current);
54
+ const portal = documentBody.ownerDocument.createElement('div');
55
+ documentBody.appendChild(portal);
56
+ portalRootRef.current = portal;
57
+ return function cleanup() {
58
+ documentBody.removeChild(portal);
59
+ portalRootRef.current = null;
88
60
  };
89
61
  }, [
90
62
  portalRootProp
91
63
  ]);
92
- // setup root classes
93
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
94
- var _rootRef_current;
95
- if (mode === 'partial') {
96
- return _vkjs.noop;
97
- }
98
- const parent = (_rootRef_current = rootRef.current) === null || _rootRef_current === void 0 ? void 0 : _rootRef_current.parentElement;
99
- const classes = [
100
- 'vkui__root'
101
- ].concat(mode === 'embedded' ? 'vkui__root--embedded' : []);
102
- if (parent) {
103
- if (mode === 'embedded' && !disableParentTransformForPositionFixedElements) {
104
- parent.style.transform = 'translate3d(0, 0, 0)';
105
- }
106
- parent.classList.add(...classes);
107
- }
108
- return ()=>{
109
- if (parent) {
110
- if (mode === 'embedded' && !disableParentTransformForPositionFixedElements) {
111
- parent.style.transform = '';
112
- }
113
- parent.classList.remove(...classes);
114
- }
115
- };
116
- }, [
117
- disableParentTransformForPositionFixedElements
118
- ]);
119
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
120
- if (mode === 'full') {
121
- document.documentElement.classList.add('vkui');
122
- return ()=>{
123
- document.documentElement.classList.remove('vkui');
124
- };
125
- }
126
- return undefined;
127
- }, [
128
- document,
129
- mode
130
- ]);
131
- // setup insets
132
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
133
- var _rootRef_current;
134
- if (mode === 'partial' || !((_rootRef_current = rootRef.current) === null || _rootRef_current === void 0 ? void 0 : _rootRef_current.parentElement) || !safeAreaInsets) {
64
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function setupContainers() {
65
+ if (!appRootRef.current || !portalRootRef.current) {
135
66
  return;
136
67
  }
137
- const parent = rootRef.current.parentElement;
138
- let key;
139
- for(key in safeAreaInsets){
140
- if (safeAreaInsets.hasOwnProperty(key) && typeof safeAreaInsets[key] === 'number') {
141
- const inset = safeAreaInsets[key];
142
- parent.style.setProperty(INSET_CUSTOM_PROPERTY_PREFIX + key, `${inset}px`);
143
- portalRoot && portalRoot.style.setProperty(INSET_CUSTOM_PROPERTY_PREFIX + key, `${inset}px`);
144
- }
145
- }
146
- return ()=>{
147
- if (!safeAreaInsets) {
148
- return;
149
- }
150
- let key;
151
- for(key in safeAreaInsets){
152
- if (safeAreaInsets.hasOwnProperty(key)) {
153
- parent.style.removeProperty(INSET_CUSTOM_PROPERTY_PREFIX + key);
154
- portalRoot && portalRoot.style.removeProperty(INSET_CUSTOM_PROPERTY_PREFIX + key);
68
+ const parentElement = (0, _helpers.getParentElement)(appRootRef.current);
69
+ const documentBody = (0, _dom.getDocumentBody)(appRootRef.current);
70
+ const documentElement = documentBody.ownerDocument.documentElement;
71
+ const [baseClassNames, stylesClassNames] = (0, _helpers.getClassNamesByMode)({
72
+ mode,
73
+ layout,
74
+ platform,
75
+ appearance,
76
+ sizeX,
77
+ sizeY
78
+ });
79
+ /* eslint-disable no-restricted-properties */ switch(mode){
80
+ case 'full':
81
+ {
82
+ if (parentElement) {
83
+ parentElement.classList.add(...baseClassNames);
84
+ }
85
+ documentElement.classList.add(...stylesClassNames, 'vkui');
86
+ const unsetSafeAreaInsets = (0, _helpers.setSafeAreaInsets)(safeAreaInsets, documentElement);
87
+ return function cleanup() {
88
+ if (parentElement) {
89
+ parentElement.classList.remove(...baseClassNames);
90
+ }
91
+ documentElement.classList.remove(...stylesClassNames, 'vkui');
92
+ unsetSafeAreaInsets();
93
+ };
94
+ }
95
+ case 'embedded':
96
+ {
97
+ if (parentElement) {
98
+ parentElement.classList.add(...baseClassNames, ...stylesClassNames);
99
+ if (!disableParentTransformForPositionFixedElements) {
100
+ parentElement.style.setProperty('transform', 'translate3d(0, 0, 0)');
101
+ }
102
+ const unsetSafeAreaInsets = (0, _helpers.setSafeAreaInsets)(safeAreaInsets, parentElement, portalRootRef.current); // prettier-ignore
103
+ return function cleanup() {
104
+ parentElement.classList.remove(...baseClassNames, ...stylesClassNames);
105
+ if (!disableParentTransformForPositionFixedElements) {
106
+ parentElement.style.removeProperty('transform');
107
+ }
108
+ unsetSafeAreaInsets();
109
+ };
110
+ }
111
+ /* istanbul ignore next: node.parentElement может быть null, но такой кейс в теории невозможен */ return;
112
+ }
113
+ /* istanbul ignore next: не покрывается за счёт теста на <AppRoot mode="partial" /> */ case 'partial':
114
+ {
115
+ return;
155
116
  }
156
- }
157
- };
158
- }, [
159
- safeAreaInsets,
160
- portalRoot
161
- ]);
162
- // adaptivity handler
163
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
164
- var _rootRef_current;
165
- if (mode === 'partial') {
166
- return _vkjs.noop;
167
- }
168
- const classNames = containerClassNames(layout, sizeX, sizeY);
169
- const container = mode === 'embedded' ? (_rootRef_current = rootRef.current) === null || _rootRef_current === void 0 ? void 0 : _rootRef_current.parentElement : document.body;
170
- if (!classNames.length || !container) {
171
- return _vkjs.noop;
172
117
  }
173
- container.classList.add(...classNames);
174
- return ()=>{
175
- container.classList.remove(...classNames);
176
- };
177
- }, [
118
+ /* eslint-enable no-restricted-properties */ }, [
119
+ mode,
120
+ layout,
121
+ disableParentTransformForPositionFixedElements,
122
+ platform,
123
+ appearance,
178
124
  sizeX,
179
125
  sizeY,
180
- layout
181
- ]);
182
- (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
183
- if (mode !== 'full' || appearance === undefined) {
184
- return _vkjs.noop;
185
- }
186
- document.documentElement.style.setProperty('color-scheme', appearance);
187
- return ()=>document.documentElement.style.removeProperty('color-scheme');
188
- }, [
189
- appearance
126
+ safeAreaInsets
190
127
  ]);
191
128
  const ScrollController = _react.useMemo(()=>scroll === 'contain' ? _ScrollContext.ElementScrollController : _ScrollContext.GlobalScrollController, [
192
129
  scroll
193
130
  ]);
194
131
  const content = /*#__PURE__*/ _react.createElement(_AppRootContext.AppRootContext.Provider, {
195
132
  value: {
196
- appRoot: rootRef,
197
- portalRoot,
133
+ appRoot: appRootRef,
134
+ portalRoot: portalRootRef,
198
135
  embedded: mode === 'embedded',
199
136
  mode,
200
137
  disablePortal,
@@ -204,10 +141,10 @@ const AppRoot = (_param)=>{
204
141
  }
205
142
  }
206
143
  }, /*#__PURE__*/ _react.createElement(ScrollController, {
207
- elRef: rootRef
144
+ elRef: appRootRef
208
145
  }, children));
209
146
  return mode === 'partial' ? content : /*#__PURE__*/ _react.createElement("div", _object_spread._({
210
- ref: rootRef,
147
+ ref: appRootRef,
211
148
  className: (0, _vkjs.classNames)("vkuiAppRoot", hasPointer === undefined ? "vkuiAppRoot--pointer-none" : !hasPointer && "vkuiAppRoot--pointer-has-not", className)
212
149
  }, props), content);
213
150
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport { useKeyboardInputTracker } from '../../hooks/useKeyboardInputTracker';\nimport { SizeTypeValues } from '../../lib/adaptivity';\nimport { useDOM } from '../../lib/dom';\nimport { isRefObject } from '../../lib/isRefObject';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { AppRootContext } from './AppRootContext';\nimport { ElementScrollController, GlobalScrollController } from './ScrollContext';\nimport styles from './AppRoot.module.css';\n\nexport type SafeAreaInsets = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n};\n\nconst vkuiSizeXClassNames = {\n none: 'vkui--sizeX-none',\n ['regular']: 'vkui--sizeX-regular',\n};\n\nconst vkuiSizeYClassNames = {\n none: 'vkui--sizeY-none',\n ['compact']: 'vkui--sizeY-compact',\n};\n\nconst vkuiLayoutClassNames = {\n card: 'vkui--layout-card',\n plain: 'vkui--layout-plain',\n};\n\nfunction containerClassNames(\n layout: AppRootProps['layout'],\n sizeX: SizeTypeValues | 'none',\n sizeY: SizeTypeValues | 'none',\n): string[] {\n const classNames: string[] = [];\n\n if (layout) {\n classNames.push(vkuiLayoutClassNames[layout]);\n }\n\n if (sizeX !== 'compact') {\n classNames.push(vkuiSizeXClassNames[sizeX]);\n }\n\n if (sizeY !== 'regular') {\n classNames.push(vkuiSizeYClassNames[sizeY]);\n }\n\n return classNames;\n}\n\nconst INSET_CUSTOM_PROPERTY_PREFIX = `--vkui_internal--safe_area_inset_`;\n\n// Используйте classList, но будьте осторожны\n/* eslint-disable no-restricted-properties */\n\nexport interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Режим встраивания */\n mode?: 'partial' | 'embedded' | 'full';\n window?: Window;\n scroll?: 'global' | 'contain';\n safeAreaInsets?: SafeAreaInsets;\n /**\n * Кастомный root-элемент портала\n */\n portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;\n /**\n * Отключает рендер всплывающих компонентов в отдельном контейнере\n */\n disablePortal?: boolean;\n /**\n * По умолчанию, mode=\"embedded\" переносит систему координат элементов с `position: fixed` на\n * свой контейнер через `transform: translate3d(0, 0, 0)`.\n *\n * Это поведение можно отключить с помощью этого параметра.\n */\n disableParentTransformForPositionFixedElements?: boolean;\n layout?: 'card' | 'plain';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/AppRoot\n */\nexport const AppRoot = ({\n children,\n mode = 'full',\n scroll = 'global',\n portalRoot: portalRootProp = null,\n disablePortal,\n disableParentTransformForPositionFixedElements,\n className,\n safeAreaInsets,\n layout,\n ...props\n}: AppRootProps) => {\n const isKeyboardInputActiveRef = useKeyboardInputTracker();\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const [portalRoot, setPortalRoot] = React.useState<HTMLElement | null>(null);\n const { document } = useDOM();\n const appearance = useAppearance();\n\n const { hasPointer, sizeX = 'none', sizeY = 'none' } = useAdaptivity();\n\n // setup portal\n useIsomorphicLayoutEffect(() => {\n let portal: HTMLElement | null = null;\n if (portalRootProp) {\n if (isRefObject(portalRootProp)) {\n portal = portalRootProp.current;\n } else {\n portal = portalRootProp;\n }\n }\n if (!portal) {\n portal = document!.createElement('div');\n document!.body.appendChild(portal);\n }\n setPortalRoot(portal);\n return () => {\n if (!portalRootProp) {\n portal?.parentElement?.removeChild(portal);\n }\n };\n }, [portalRootProp]);\n\n // setup root classes\n useIsomorphicLayoutEffect(() => {\n if (mode === 'partial') {\n return noop;\n }\n\n const parent = rootRef.current?.parentElement;\n const classes = ['vkui__root'].concat(mode === 'embedded' ? 'vkui__root--embedded' : []);\n if (parent) {\n if (mode === 'embedded' && !disableParentTransformForPositionFixedElements) {\n parent.style.transform = 'translate3d(0, 0, 0)';\n }\n parent.classList.add(...classes);\n }\n\n return () => {\n if (parent) {\n if (mode === 'embedded' && !disableParentTransformForPositionFixedElements) {\n parent.style.transform = '';\n }\n parent.classList.remove(...classes);\n }\n };\n }, [disableParentTransformForPositionFixedElements]);\n\n useIsomorphicLayoutEffect(() => {\n if (mode === 'full') {\n document!.documentElement.classList.add('vkui');\n\n return () => {\n document!.documentElement.classList.remove('vkui');\n };\n }\n\n return undefined;\n }, [document, mode]);\n\n // setup insets\n useIsomorphicLayoutEffect(() => {\n if (mode === 'partial' || !rootRef.current?.parentElement || !safeAreaInsets) {\n return;\n }\n\n const parent = rootRef.current.parentElement;\n\n let key: keyof SafeAreaInsets;\n for (key in safeAreaInsets) {\n if (safeAreaInsets.hasOwnProperty(key) && typeof safeAreaInsets[key] === 'number') {\n const inset = safeAreaInsets[key];\n parent.style.setProperty(INSET_CUSTOM_PROPERTY_PREFIX + key, `${inset}px`);\n portalRoot &&\n portalRoot.style.setProperty(INSET_CUSTOM_PROPERTY_PREFIX + key, `${inset}px`);\n }\n }\n\n return () => {\n if (!safeAreaInsets) {\n return;\n }\n let key: keyof SafeAreaInsets;\n for (key in safeAreaInsets) {\n if (safeAreaInsets.hasOwnProperty(key)) {\n parent.style.removeProperty(INSET_CUSTOM_PROPERTY_PREFIX + key);\n portalRoot && portalRoot.style.removeProperty(INSET_CUSTOM_PROPERTY_PREFIX + key);\n }\n }\n };\n }, [safeAreaInsets, portalRoot]);\n\n // adaptivity handler\n useIsomorphicLayoutEffect(() => {\n if (mode === 'partial') {\n return noop;\n }\n\n const classNames = containerClassNames(layout, sizeX, sizeY);\n\n const container = mode === 'embedded' ? rootRef.current?.parentElement : document!.body;\n\n if (!classNames.length || !container) {\n return noop;\n }\n\n container.classList.add(...classNames);\n return () => {\n container.classList.remove(...classNames);\n };\n }, [sizeX, sizeY, layout]);\n\n useIsomorphicLayoutEffect(() => {\n if (mode !== 'full' || appearance === undefined) {\n return noop;\n }\n document!.documentElement.style.setProperty('color-scheme', appearance);\n\n return () => document!.documentElement.style.removeProperty('color-scheme');\n }, [appearance]);\n\n const ScrollController = React.useMemo(\n () => (scroll === 'contain' ? ElementScrollController : GlobalScrollController),\n [scroll],\n );\n\n const content = (\n <AppRootContext.Provider\n value={{\n appRoot: rootRef,\n portalRoot,\n embedded: mode === 'embedded',\n mode,\n disablePortal,\n layout,\n get keyboardInput() {\n return isKeyboardInputActiveRef.current;\n },\n }}\n >\n <ScrollController elRef={rootRef}>{children}</ScrollController>\n </AppRootContext.Provider>\n );\n\n return mode === 'partial' ? (\n content\n ) : (\n <div\n ref={rootRef}\n className={classNames(\n styles['AppRoot'],\n hasPointer === undefined\n ? styles['AppRoot--pointer-none']\n : !hasPointer && styles['AppRoot--pointer-has-not'],\n className,\n )}\n {...props}\n >\n {content}\n </div>\n );\n};\n"],"names":["AppRoot","vkuiSizeXClassNames","none","vkuiSizeYClassNames","vkuiLayoutClassNames","card","plain","containerClassNames","layout","sizeX","sizeY","classNames","push","INSET_CUSTOM_PROPERTY_PREFIX","children","mode","scroll","portalRoot","portalRootProp","disablePortal","disableParentTransformForPositionFixedElements","className","safeAreaInsets","props","isKeyboardInputActiveRef","useKeyboardInputTracker","rootRef","React","useRef","setPortalRoot","useState","document","useDOM","appearance","useAppearance","hasPointer","useAdaptivity","useIsomorphicLayoutEffect","portal","isRefObject","current","createElement","body","appendChild","parentElement","removeChild","noop","parent","classes","concat","style","transform","classList","add","remove","documentElement","undefined","key","hasOwnProperty","inset","setProperty","removeProperty","container","length","ScrollController","useMemo","ElementScrollController","GlobalScrollController","content","AppRootContext","Provider","value","appRoot","embedded","keyboardInput","elRef","div","ref"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/AppRoot/AppRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport { useKeyboardInputTracker } from '../../hooks/useKeyboardInputTracker';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getDocumentBody } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { AppRootContext } from './AppRootContext';\nimport { ElementScrollController, GlobalScrollController } from './ScrollContext';\nimport {\n extractPortalRootByProp,\n getClassNamesByMode,\n getParentElement,\n setSafeAreaInsets,\n} from './helpers';\nimport type { AppRootLayout, AppRootMode, AppRootScroll, SafeAreaInsets } from './types';\nimport styles from './AppRoot.module.css';\n\nexport interface AppRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Режим встраивания */\n mode?: AppRootMode;\n /**\n * - `global` (по умолчанию) — VKUI-приложение скроллится вместе со страницей.\n * - `contain` — VKUI-приложение живет в отдельной зоне и скроллится независимо внутри `AppRoot` (например, в модалке).\n *\n * Полезно при использовании `mode=\"embedded\"`.\n */\n scroll?: AppRootScroll;\n /**\n * см. документацию [mdn web docs | env#values](https://developer.mozilla.org/en-US/docs/Web/CSS/env#values).\n */\n safeAreaInsets?: SafeAreaInsets;\n /**\n * Кастомный root-элемент портала\n */\n portalRoot?: HTMLElement | React.RefObject<HTMLElement> | null;\n /**\n * Отключает рендер всплывающих компонентов в отдельном контейнере\n */\n disablePortal?: boolean;\n /**\n * По умолчанию, mode=\"embedded\" переносит систему координат элементов с `position: fixed` на\n * свой контейнер через `transform: translate3d(0, 0, 0)`.\n *\n * Это поведение можно отключить с помощью этого параметра.\n */\n disableParentTransformForPositionFixedElements?: boolean;\n /**\n * Глобально задаёт тип оформления макета для компонентов\n * [Panel](https://vkcom.github.io/VKUI/#/Panel) и [Group](https://vkcom.github.io/VKUI/#/Group).\n */\n layout?: AppRootLayout;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/AppRoot\n */\nexport const AppRoot = ({\n children,\n mode = 'full',\n scroll = 'global',\n portalRoot: portalRootProp = null,\n disablePortal = false,\n disableParentTransformForPositionFixedElements,\n className,\n safeAreaInsets: safeAreaInsetsProp,\n layout,\n ...props\n}: AppRootProps) => {\n const { hasPointer, sizeX = 'none', sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n const appearance = useAppearance();\n\n const safeAreaInsets = useObjectMemo(safeAreaInsetsProp);\n const isKeyboardInputActiveRef = useKeyboardInputTracker();\n const appRootRef = React.useRef<HTMLDivElement | null>(null);\n const portalRootRef = React.useRef<HTMLElement | null>(null);\n\n useIsomorphicLayoutEffect(\n function setupPortalRoot() {\n const portalByProp = portalRootProp ? extractPortalRootByProp(portalRootProp) : null;\n\n if (portalByProp) {\n portalRootRef.current = portalByProp;\n return function cleanup() {\n portalRootRef.current = null;\n };\n }\n\n const documentBody = getDocumentBody(appRootRef.current);\n const portal = documentBody.ownerDocument.createElement('div');\n documentBody.appendChild(portal);\n portalRootRef.current = portal;\n return function cleanup() {\n documentBody.removeChild(portal);\n portalRootRef.current = null;\n };\n },\n [portalRootProp],\n );\n\n useIsomorphicLayoutEffect(\n function setupContainers() {\n if (!appRootRef.current || !portalRootRef.current) {\n return;\n }\n\n const parentElement = getParentElement(appRootRef.current);\n const documentBody = getDocumentBody(appRootRef.current);\n const documentElement = documentBody.ownerDocument.documentElement;\n\n const [baseClassNames, stylesClassNames] = getClassNamesByMode({\n mode,\n layout,\n platform,\n appearance,\n sizeX,\n sizeY,\n });\n\n /* eslint-disable no-restricted-properties */\n switch (mode) {\n case 'full': {\n if (parentElement) {\n parentElement.classList.add(...baseClassNames);\n }\n\n documentElement.classList.add(...stylesClassNames, 'vkui');\n const unsetSafeAreaInsets = setSafeAreaInsets(safeAreaInsets, documentElement);\n\n return function cleanup() {\n if (parentElement) {\n parentElement.classList.remove(...baseClassNames);\n }\n\n documentElement.classList.remove(...stylesClassNames, 'vkui');\n unsetSafeAreaInsets();\n };\n }\n case 'embedded': {\n if (parentElement) {\n parentElement.classList.add(...baseClassNames, ...stylesClassNames);\n if (!disableParentTransformForPositionFixedElements) {\n parentElement.style.setProperty('transform', 'translate3d(0, 0, 0)');\n }\n const unsetSafeAreaInsets = setSafeAreaInsets(safeAreaInsets, parentElement, portalRootRef.current); // prettier-ignore\n return function cleanup() {\n parentElement.classList.remove(...baseClassNames, ...stylesClassNames);\n if (!disableParentTransformForPositionFixedElements) {\n parentElement.style.removeProperty('transform');\n }\n unsetSafeAreaInsets();\n };\n }\n /* istanbul ignore next: node.parentElement может быть null, но такой кейс в теории невозможен */\n return;\n }\n /* istanbul ignore next: не покрывается за счёт теста на <AppRoot mode=\"partial\" /> */\n case 'partial': {\n return;\n }\n }\n /* eslint-enable no-restricted-properties */\n },\n [\n mode,\n layout,\n disableParentTransformForPositionFixedElements,\n platform,\n appearance,\n sizeX,\n sizeY,\n safeAreaInsets,\n ],\n );\n\n const ScrollController = React.useMemo(\n () => (scroll === 'contain' ? ElementScrollController : GlobalScrollController),\n [scroll],\n );\n\n const content = (\n <AppRootContext.Provider\n value={{\n appRoot: appRootRef,\n portalRoot: portalRootRef,\n embedded: mode === 'embedded',\n mode,\n disablePortal,\n layout,\n get keyboardInput() {\n return isKeyboardInputActiveRef.current;\n },\n }}\n >\n <ScrollController elRef={appRootRef}>{children}</ScrollController>\n </AppRootContext.Provider>\n );\n\n return mode === 'partial' ? (\n content\n ) : (\n <div\n ref={appRootRef}\n className={classNames(\n styles['AppRoot'],\n hasPointer === undefined\n ? styles['AppRoot--pointer-none']\n : !hasPointer && styles['AppRoot--pointer-has-not'],\n className,\n )}\n {...props}\n >\n {content}\n </div>\n );\n};\n"],"names":["AppRoot","children","mode","scroll","portalRoot","portalRootProp","disablePortal","disableParentTransformForPositionFixedElements","className","safeAreaInsets","safeAreaInsetsProp","layout","props","hasPointer","sizeX","sizeY","useAdaptivity","platform","usePlatform","appearance","useAppearance","useObjectMemo","isKeyboardInputActiveRef","useKeyboardInputTracker","appRootRef","React","useRef","portalRootRef","useIsomorphicLayoutEffect","setupPortalRoot","portalByProp","extractPortalRootByProp","current","cleanup","documentBody","getDocumentBody","portal","ownerDocument","createElement","appendChild","removeChild","setupContainers","parentElement","getParentElement","documentElement","baseClassNames","stylesClassNames","getClassNamesByMode","classList","add","unsetSafeAreaInsets","setSafeAreaInsets","remove","style","setProperty","removeProperty","ScrollController","useMemo","ElementScrollController","GlobalScrollController","content","AppRootContext","Provider","value","appRoot","embedded","keyboardInput","elRef","div","ref","classNames","undefined"],"mappings":";;;;+BA2DaA;;;eAAAA;;;;;;iEA3DU;sBACI;+BACG;+BACA;yCACU;+BACV;6BACF;qBACI;2CACU;gCACX;+BACiC;yBAMzD;AA2CA,MAAMA,UAAU;QAAC,EACtBC,QAAQ,EACRC,OAAO,MAAM,EACbC,SAAS,QAAQ,EACjBC,YAAYC,iBAAiB,IAAI,EACjCC,gBAAgB,KAAK,EACrBC,8CAA8C,EAC9CC,SAAS,EACTC,gBAAgBC,kBAAkB,EAClCC,MAAM,EAEO,WADVC;QATHX;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;QACAE;;IAGA,MAAM,EAAEE,UAAU,EAAEC,QAAQ,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IACpE,MAAMC,WAAWC,IAAAA,wBAAW;IAC5B,MAAMC,aAAaC,IAAAA,4BAAa;IAEhC,MAAMX,iBAAiBY,IAAAA,4BAAa,EAACX;IACrC,MAAMY,2BAA2BC,IAAAA,gDAAuB;IACxD,MAAMC,aAAaC,OAAMC,MAAM,CAAwB;IACvD,MAAMC,gBAAgBF,OAAMC,MAAM,CAAqB;IAEvDE,IAAAA,oDAAyB,EACvB,SAASC;QACP,MAAMC,eAAezB,iBAAiB0B,IAAAA,gCAAuB,EAAC1B,kBAAkB;QAEhF,IAAIyB,cAAc;YAChBH,cAAcK,OAAO,GAAGF;YACxB,OAAO,SAASG;gBACdN,cAAcK,OAAO,GAAG;YAC1B;QACF;QAEA,MAAME,eAAeC,IAAAA,oBAAe,EAACX,WAAWQ,OAAO;QACvD,MAAMI,SAASF,aAAaG,aAAa,CAACC,aAAa,CAAC;QACxDJ,aAAaK,WAAW,CAACH;QACzBT,cAAcK,OAAO,GAAGI;QACxB,OAAO,SAASH;YACdC,aAAaM,WAAW,CAACJ;YACzBT,cAAcK,OAAO,GAAG;QAC1B;IACF,GACA;QAAC3B;KAAe;IAGlBuB,IAAAA,oDAAyB,EACvB,SAASa;QACP,IAAI,CAACjB,WAAWQ,OAAO,IAAI,CAACL,cAAcK,OAAO,EAAE;YACjD;QACF;QAEA,MAAMU,gBAAgBC,IAAAA,yBAAgB,EAACnB,WAAWQ,OAAO;QACzD,MAAME,eAAeC,IAAAA,oBAAe,EAACX,WAAWQ,OAAO;QACvD,MAAMY,kBAAkBV,aAAaG,aAAa,CAACO,eAAe;QAElE,MAAM,CAACC,gBAAgBC,iBAAiB,GAAGC,IAAAA,4BAAmB,EAAC;YAC7D7C;YACAS;YACAM;YACAE;YACAL;YACAC;QACF;QAEA,2CAA2C,GAC3C,OAAQb;YACN,KAAK;gBAAQ;oBACX,IAAIwC,eAAe;wBACjBA,cAAcM,SAAS,CAACC,GAAG,IAAIJ;oBACjC;oBAEAD,gBAAgBI,SAAS,CAACC,GAAG,IAAIH,kBAAkB;oBACnD,MAAMI,sBAAsBC,IAAAA,0BAAiB,EAAC1C,gBAAgBmC;oBAE9D,OAAO,SAASX;wBACd,IAAIS,eAAe;4BACjBA,cAAcM,SAAS,CAACI,MAAM,IAAIP;wBACpC;wBAEAD,gBAAgBI,SAAS,CAACI,MAAM,IAAIN,kBAAkB;wBACtDI;oBACF;gBACF;YACA,KAAK;gBAAY;oBACf,IAAIR,eAAe;wBACjBA,cAAcM,SAAS,CAACC,GAAG,IAAIJ,mBAAmBC;wBAClD,IAAI,CAACvC,gDAAgD;4BACnDmC,cAAcW,KAAK,CAACC,WAAW,CAAC,aAAa;wBAC/C;wBACA,MAAMJ,sBAAsBC,IAAAA,0BAAiB,EAAC1C,gBAAgBiC,eAAef,cAAcK,OAAO,GAAG,kBAAkB;wBACvH,OAAO,SAASC;4BACdS,cAAcM,SAAS,CAACI,MAAM,IAAIP,mBAAmBC;4BACrD,IAAI,CAACvC,gDAAgD;gCACnDmC,cAAcW,KAAK,CAACE,cAAc,CAAC;4BACrC;4BACAL;wBACF;oBACF;oBACA,+FAA+F,GAC/F;gBACF;YACA,oFAAoF,GACpF,KAAK;gBAAW;oBACd;gBACF;QACF;IACA,0CAA0C,GAC5C,GACA;QACEhD;QACAS;QACAJ;QACAU;QACAE;QACAL;QACAC;QACAN;KACD;IAGH,MAAM+C,mBAAmB/B,OAAMgC,OAAO,CACpC,IAAOtD,WAAW,YAAYuD,sCAAuB,GAAGC,qCAAsB,EAC9E;QAACxD;KAAO;IAGV,MAAMyD,wBACJ,qBAACC,8BAAc,CAACC,QAAQ;QACtBC,OAAO;YACLC,SAASxC;YACTpB,YAAYuB;YACZsC,UAAU/D,SAAS;YACnBA;YACAI;YACAK;YACA,IAAIuD,iBAAgB;gBAClB,OAAO5C,yBAAyBU,OAAO;YACzC;QACF;qBAEA,qBAACwB;QAAiBW,OAAO3C;OAAavB;IAI1C,OAAOC,SAAS,YACd0D,wBAEA,qBAACQ;QACCC,KAAK7C;QACLhB,WAAW8D,IAAAA,gBAAU,iBAEnBzD,eAAe0D,0CAEX,CAAC1D,8CACLL;OAEEI,QAEHgD;AAGP"}
@@ -1,12 +1,18 @@
1
1
  import * as React from 'react';
2
2
  export interface AppRootContextInterface {
3
- appRoot?: React.RefObject<HTMLDivElement>;
4
- portalRoot?: HTMLElement | null;
5
- embedded?: boolean;
6
- mode?: 'partial' | 'embedded' | 'full';
7
- keyboardInput?: boolean;
8
- disablePortal?: boolean;
3
+ appRoot: React.RefObject<HTMLElement>;
4
+ portalRoot: React.RefObject<HTMLElement>;
5
+ embedded: boolean;
6
+ mode: 'partial' | 'embedded' | 'full';
7
+ keyboardInput: boolean;
8
+ disablePortal: boolean;
9
9
  layout?: 'card' | 'plain';
10
10
  }
11
+ /**
12
+ * Вынесен в константу, чтобы можно было в тестах создавать свой контекст и сливать перед этим значения по-умолчанию
13
+ *
14
+ * > Note: не смог убрать из покрытия через 'istanbul ignore next'.
15
+ */
16
+ export declare const DEFAULT_APP_ROOT_CONTEXT_VALUE: AppRootContextInterface;
11
17
  export declare const AppRootContext: React.Context<AppRootContextInterface>;
12
18
  //# sourceMappingURL=AppRootContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppRootContext.d.ts","sourceRoot":"","sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,wCAEzB,CAAC"}
1
+ {"version":3,"file":"AppRootContext.d.ts","sourceRoot":"","sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACtC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,uBAO5C,CAAC;AAEF,eAAO,MAAM,cAAc,wCAE1B,CAAC"}
@@ -2,16 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "AppRootContext", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ AppRootContext: function() {
8
13
  return AppRootContext;
14
+ },
15
+ DEFAULT_APP_ROOT_CONTEXT_VALUE: function() {
16
+ return DEFAULT_APP_ROOT_CONTEXT_VALUE;
9
17
  }
10
18
  });
11
19
  const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
12
20
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
13
- const AppRootContext = _react.createContext({
14
- portalRoot: null
15
- });
21
+ const DEFAULT_APP_ROOT_CONTEXT_VALUE = {
22
+ appRoot: _react.createRef(),
23
+ mode: 'full',
24
+ portalRoot: _react.createRef(),
25
+ embedded: false,
26
+ keyboardInput: false,
27
+ disablePortal: false
28
+ };
29
+ const AppRootContext = _react.createContext(DEFAULT_APP_ROOT_CONTEXT_VALUE);
16
30
 
17
31
  //# sourceMappingURL=AppRootContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["import * as React from 'react';\n\nexport interface AppRootContextInterface {\n appRoot?: React.RefObject<HTMLDivElement>;\n portalRoot?: HTMLElement | null;\n embedded?: boolean;\n mode?: 'partial' | 'embedded' | 'full';\n keyboardInput?: boolean;\n disablePortal?: boolean;\n layout?: 'card' | 'plain';\n}\n\nexport const AppRootContext = React.createContext<AppRootContextInterface>({\n portalRoot: null,\n});\n"],"names":["AppRootContext","React","createContext","portalRoot"],"mappings":";;;;+BAYaA;;;eAAAA;;;;iEAZU;AAYhB,MAAMA,iBAAiBC,OAAMC,aAAa,CAA0B;IACzEC,YAAY;AACd"}
1
+ {"version":3,"sources":["../../../../src/components/AppRoot/AppRootContext.ts"],"sourcesContent":["import * as React from 'react';\n\nexport interface AppRootContextInterface {\n appRoot: React.RefObject<HTMLElement>;\n portalRoot: React.RefObject<HTMLElement>;\n embedded: boolean;\n mode: 'partial' | 'embedded' | 'full';\n keyboardInput: boolean;\n disablePortal: boolean;\n layout?: 'card' | 'plain';\n}\n\n/**\n * Вынесен в константу, чтобы можно было в тестах создавать свой контекст и сливать перед этим значения по-умолчанию\n *\n * > Note: не смог убрать из покрытия через 'istanbul ignore next'.\n */\nexport const DEFAULT_APP_ROOT_CONTEXT_VALUE: AppRootContextInterface = {\n appRoot: React.createRef(),\n mode: 'full',\n portalRoot: React.createRef(),\n embedded: false,\n keyboardInput: false,\n disablePortal: false,\n};\n\nexport const AppRootContext = React.createContext<AppRootContextInterface>(\n DEFAULT_APP_ROOT_CONTEXT_VALUE,\n);\n"],"names":["AppRootContext","DEFAULT_APP_ROOT_CONTEXT_VALUE","appRoot","React","createRef","mode","portalRoot","embedded","keyboardInput","disablePortal","createContext"],"mappings":";;;;;;;;;;;IA0BaA,cAAc;eAAdA;;IATAC,8BAA8B;eAA9BA;;;;iEAjBU;AAiBhB,MAAMA,iCAA0D;IACrEC,SAASC,OAAMC,SAAS;IACxBC,MAAM;IACNC,YAAYH,OAAMC,SAAS;IAC3BG,UAAU;IACVC,eAAe;IACfC,eAAe;AACjB;AAEO,MAAMT,iBAAiBG,OAAMO,aAAa,CAC/CT"}
@@ -23,7 +23,7 @@ const AppRootPortal = ({ children, usePortal })=>{
23
23
  if (!isClient) {
24
24
  return null;
25
25
  }
26
- const portalContainer = resolvePortalContainer(usePortal, portalRoot);
26
+ const portalContainer = resolvePortalContainer(usePortal, portalRoot.current);
27
27
  if (!portalContainer || shouldDisablePortal(usePortal, mode, Boolean(disablePortal))) {
28
28
  return children;
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/AppRoot/AppRootPortal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport { useIsClient } from '../../hooks/useIsClient';\nimport { createPortal } from '../../lib/createPortal';\nimport { isRefObject } from '../../lib/isRefObject';\nimport { HasChildren } from '../../types';\nimport { AppearanceProvider } from '../AppearanceProvider/AppearanceProvider';\nimport { AppRootContext, type AppRootContextInterface } from './AppRootContext';\n\nexport interface AppRootPortalProps extends HasChildren {\n /**\n * - При передаче `true` будет использовать `portalRoot` из контекста `AppRoot`.\n * - При передаче элемента будут игнорироваться `portalRoot` и `disablePortal` из контекста `AppRoot`.\n */\n usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement> | null;\n}\n\nexport const AppRootPortal = ({ children, usePortal }: AppRootPortalProps) => {\n const { portalRoot, mode, disablePortal } = React.useContext(AppRootContext);\n const appearance = useAppearance();\n\n const isClient = useIsClient();\n if (!isClient) {\n return null;\n }\n\n const portalContainer = resolvePortalContainer(usePortal, portalRoot);\n if (!portalContainer || shouldDisablePortal(usePortal, mode, Boolean(disablePortal))) {\n return children;\n }\n\n return createPortal(\n <AppearanceProvider value={appearance}>{children}</AppearanceProvider>,\n portalContainer,\n );\n};\n\nfunction shouldDisablePortal(\n usePortal: AppRootPortalProps['usePortal'],\n mode: AppRootContextInterface['mode'],\n disablePortal: boolean,\n) {\n if (usePortal !== undefined) {\n if (typeof usePortal !== 'boolean') {\n return false;\n }\n return disablePortal || usePortal !== true;\n }\n // fallback\n return disablePortal || mode !== 'full';\n}\n\nfunction resolvePortalContainer<PortalRootFromContext extends HTMLElement | null | undefined>(\n usePortal: AppRootPortalProps['usePortal'],\n portalRootFromContext: PortalRootFromContext,\n) {\n if (usePortal === true || !usePortal) {\n return portalRootFromContext ? portalRootFromContext : null;\n }\n\n return isRefObject(usePortal) ? usePortal.current : usePortal;\n}\n"],"names":["AppRootPortal","children","usePortal","portalRoot","mode","disablePortal","React","useContext","AppRootContext","appearance","useAppearance","isClient","useIsClient","portalContainer","resolvePortalContainer","shouldDisablePortal","Boolean","createPortal","AppearanceProvider","value","undefined","portalRootFromContext","isRefObject","current"],"mappings":";;;;+BAiBaA;;;eAAAA;;;;iEAjBU;+BACO;6BACF;8BACC;6BACD;oCAEO;gCAC0B;AAUtD,MAAMA,gBAAgB,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAsB;IACvE,MAAM,EAAEC,UAAU,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGC,OAAMC,UAAU,CAACC,8BAAc;IAC3E,MAAMC,aAAaC,IAAAA,4BAAa;IAEhC,MAAMC,WAAWC,IAAAA,wBAAW;IAC5B,IAAI,CAACD,UAAU;QACb,OAAO;IACT;IAEA,MAAME,kBAAkBC,uBAAuBZ,WAAWC;IAC1D,IAAI,CAACU,mBAAmBE,oBAAoBb,WAAWE,MAAMY,QAAQX,iBAAiB;QACpF,OAAOJ;IACT;IAEA,OAAOgB,IAAAA,0BAAY,gBACjB,qBAACC,sCAAkB;QAACC,OAAOV;OAAaR,WACxCY;AAEJ;AAEA,SAASE,oBACPb,SAA0C,EAC1CE,IAAqC,EACrCC,aAAsB;IAEtB,IAAIH,cAAckB,WAAW;QAC3B,IAAI,OAAOlB,cAAc,WAAW;YAClC,OAAO;QACT;QACA,OAAOG,iBAAiBH,cAAc;IACxC;IACA,WAAW;IACX,OAAOG,iBAAiBD,SAAS;AACnC;AAEA,SAASU,uBACPZ,SAA0C,EAC1CmB,qBAA4C;IAE5C,IAAInB,cAAc,QAAQ,CAACA,WAAW;QACpC,OAAOmB,wBAAwBA,wBAAwB;IACzD;IAEA,OAAOC,IAAAA,wBAAW,EAACpB,aAAaA,UAAUqB,OAAO,GAAGrB;AACtD"}
1
+ {"version":3,"sources":["../../../../src/components/AppRoot/AppRootPortal.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport { useIsClient } from '../../hooks/useIsClient';\nimport { createPortal } from '../../lib/createPortal';\nimport { isRefObject } from '../../lib/isRefObject';\nimport { HasChildren } from '../../types';\nimport { AppearanceProvider } from '../AppearanceProvider/AppearanceProvider';\nimport { AppRootContext, type AppRootContextInterface } from './AppRootContext';\n\nexport interface AppRootPortalProps extends HasChildren {\n /**\n * - При передаче `true` будет использовать `portalRoot` из контекста `AppRoot`.\n * - При передаче элемента будут игнорироваться `portalRoot` и `disablePortal` из контекста `AppRoot`.\n */\n usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement> | null;\n}\n\nexport const AppRootPortal = ({ children, usePortal }: AppRootPortalProps) => {\n const { portalRoot, mode, disablePortal } = React.useContext(AppRootContext);\n const appearance = useAppearance();\n\n const isClient = useIsClient();\n if (!isClient) {\n return null;\n }\n\n const portalContainer = resolvePortalContainer(usePortal, portalRoot.current);\n if (!portalContainer || shouldDisablePortal(usePortal, mode, Boolean(disablePortal))) {\n return children;\n }\n\n return createPortal(\n <AppearanceProvider value={appearance}>{children}</AppearanceProvider>,\n portalContainer,\n );\n};\n\nfunction shouldDisablePortal(\n usePortal: AppRootPortalProps['usePortal'],\n mode: AppRootContextInterface['mode'],\n disablePortal: boolean,\n) {\n if (usePortal !== undefined) {\n if (typeof usePortal !== 'boolean') {\n return false;\n }\n return disablePortal || usePortal !== true;\n }\n // fallback\n return disablePortal || mode !== 'full';\n}\n\nfunction resolvePortalContainer<PortalRootFromContext extends HTMLElement | null | undefined>(\n usePortal: AppRootPortalProps['usePortal'],\n portalRootFromContext: PortalRootFromContext,\n) {\n if (usePortal === true || !usePortal) {\n return portalRootFromContext ? portalRootFromContext : null;\n }\n\n return isRefObject(usePortal) ? usePortal.current : usePortal;\n}\n"],"names":["AppRootPortal","children","usePortal","portalRoot","mode","disablePortal","React","useContext","AppRootContext","appearance","useAppearance","isClient","useIsClient","portalContainer","resolvePortalContainer","current","shouldDisablePortal","Boolean","createPortal","AppearanceProvider","value","undefined","portalRootFromContext","isRefObject"],"mappings":";;;;+BAiBaA;;;eAAAA;;;;iEAjBU;+BACO;6BACF;8BACC;6BACD;oCAEO;gCAC0B;AAUtD,MAAMA,gBAAgB,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAsB;IACvE,MAAM,EAAEC,UAAU,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGC,OAAMC,UAAU,CAACC,8BAAc;IAC3E,MAAMC,aAAaC,IAAAA,4BAAa;IAEhC,MAAMC,WAAWC,IAAAA,wBAAW;IAC5B,IAAI,CAACD,UAAU;QACb,OAAO;IACT;IAEA,MAAME,kBAAkBC,uBAAuBZ,WAAWC,WAAWY,OAAO;IAC5E,IAAI,CAACF,mBAAmBG,oBAAoBd,WAAWE,MAAMa,QAAQZ,iBAAiB;QACpF,OAAOJ;IACT;IAEA,OAAOiB,IAAAA,0BAAY,gBACjB,qBAACC,sCAAkB;QAACC,OAAOX;OAAaR,WACxCY;AAEJ;AAEA,SAASG,oBACPd,SAA0C,EAC1CE,IAAqC,EACrCC,aAAsB;IAEtB,IAAIH,cAAcmB,WAAW;QAC3B,IAAI,OAAOnB,cAAc,WAAW;YAClC,OAAO;QACT;QACA,OAAOG,iBAAiBH,cAAc;IACxC;IACA,WAAW;IACX,OAAOG,iBAAiBD,SAAS;AACnC;AAEA,SAASU,uBACPZ,SAA0C,EAC1CoB,qBAA4C;IAE5C,IAAIpB,cAAc,QAAQ,CAACA,WAAW;QACpC,OAAOoB,wBAAwBA,wBAAwB;IACzD;IAEA,OAAOC,IAAAA,wBAAW,EAACrB,aAAaA,UAAUa,OAAO,GAAGb;AACtD"}
@@ -0,0 +1,18 @@
1
+ import type { SizeTypeValues } from '../../lib/adaptivity';
2
+ import type { AppearanceType } from '../../lib/appearance';
3
+ import type { AppRootLayout, AppRootMode, SafeAreaInsets } from './types';
4
+ type ContainerClassNamesProps = {
5
+ mode: AppRootMode;
6
+ layout?: AppRootLayout;
7
+ platform: string;
8
+ appearance: AppearanceType;
9
+ sizeX: SizeTypeValues | 'none';
10
+ sizeY: SizeTypeValues | 'none';
11
+ };
12
+ export declare function getClassNamesByMode({ mode, layout, platform, appearance, sizeX, sizeY, }: ContainerClassNamesProps): [string[], string[]];
13
+ export declare const getParentElement: (el: HTMLElement | null) => HTMLElement | null;
14
+ export declare const extractPortalRootByProp: (portalRootProp: HTMLElement | React.RefObject<HTMLElement>) => HTMLElement | null;
15
+ export declare const CUSTOM_PROPERTY_INSET_PREFIX = "--vkui_internal--safe_area_inset_";
16
+ export declare const setSafeAreaInsets: (safeAreaInsets: SafeAreaInsets | undefined, rootContainer: HTMLElement, portalContainer?: HTMLElement) => () => void;
17
+ export {};
18
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/components/AppRoot/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/B,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,KAAK,GACN,EAAE,wBAAwB,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CA0BjD;AAED,eAAO,MAAM,gBAAgB,OAAQ,WAAW,GAAG,IAAI,uBAAmC,CAAC;AAE3F,eAAO,MAAM,uBAAuB,mBAClB,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,uBACgB,CAAC;AAE7E,eAAO,MAAM,4BAA4B,sCAAsC,CAAC;AAEhF,eAAO,MAAM,iBAAiB,mBACZ,cAAc,GAAG,SAAS,iBAC3B,WAAW,oBACR,WAAW,eA4B9B,CAAC"}