@vkontakte/vkui 4.15.0 → 4.16.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 (349) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +391 -282
  4. package/.cache/ts/src/components/AppRoot/AppRoot.d.ts +1 -0
  5. package/.cache/ts/src/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  6. package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +2 -2
  7. package/.cache/ts/src/components/FixedLayout/FixedLayout.d.ts +4 -9
  8. package/.cache/ts/src/components/ModalPage/ModalPage.d.ts +1 -2
  9. package/.cache/ts/src/components/Root/Root.d.ts +5 -27
  10. package/.cache/ts/src/components/SimpleCheckbox/SimpleCheckbox.d.ts +9 -0
  11. package/.cache/ts/src/components/Tappable/Tappable.d.ts +12 -9
  12. package/.cache/ts/src/components/Touch/Touch.d.ts +1 -2
  13. package/.cache/ts/src/components/UsersStack/masks.d.ts +1 -1
  14. package/.cache/ts/src/hooks/useEventListener.d.ts +2 -2
  15. package/.cache/ts/src/hooks/useKeyboard.d.ts +11 -0
  16. package/.cache/ts/src/index.d.ts +1 -1
  17. package/.cache/ts/src/lib/select.d.ts +7 -0
  18. package/.cache/ts/src/lib/touch.d.ts +1 -1
  19. package/.cache/ts/src/lib/utils.d.ts +2 -3
  20. package/.cache/ts/src/types.d.ts +2 -6
  21. package/.cache/ts/src/unstable/index.d.ts +2 -0
  22. package/babel.cjs.config.js +7 -1
  23. package/babel.config.js +7 -1
  24. package/dist/cjs/components/AppRoot/AppRoot.d.ts +1 -0
  25. package/dist/cjs/components/AppRoot/AppRoot.js +29 -1
  26. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  27. package/dist/cjs/components/Banner/Banner.js +1 -1
  28. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  29. package/dist/cjs/components/Cell/Cell.js +3 -3
  30. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  31. package/dist/cjs/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  32. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +5 -6
  33. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  34. package/dist/cjs/components/ChipsSelect/useChipsSelect.js +2 -2
  35. package/dist/cjs/components/ChipsSelect/useChipsSelect.js.map +1 -1
  36. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +2 -2
  37. package/dist/cjs/components/CustomSelect/CustomSelect.js +3 -3
  38. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  39. package/dist/cjs/components/FixedLayout/FixedLayout.d.ts +4 -9
  40. package/dist/cjs/components/FixedLayout/FixedLayout.js +91 -179
  41. package/dist/cjs/components/FixedLayout/FixedLayout.js.map +1 -1
  42. package/dist/cjs/components/Gallery/Gallery.js +2 -2
  43. package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
  44. package/dist/cjs/components/Header/Header.js +1 -1
  45. package/dist/cjs/components/Header/Header.js.map +1 -1
  46. package/dist/cjs/components/ModalCardBase/ModalCardBase.js +6 -1
  47. package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
  48. package/dist/cjs/components/ModalPage/ModalPage.d.ts +1 -2
  49. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  50. package/dist/cjs/components/ModalRoot/ModalRoot.js +2 -2
  51. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  52. package/dist/cjs/components/Panel/Panel.js +2 -2
  53. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  54. package/dist/cjs/components/PanelHeaderContent/PanelHeaderContent.js +0 -1
  55. package/dist/cjs/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  56. package/dist/cjs/components/PullToRefresh/PullToRefresh.js +2 -2
  57. package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -1
  58. package/dist/cjs/components/RangeSlider/UniversalSlider.js +2 -2
  59. package/dist/cjs/components/RangeSlider/UniversalSlider.js.map +1 -1
  60. package/dist/cjs/components/Root/Root.d.ts +5 -27
  61. package/dist/cjs/components/Root/Root.js +158 -214
  62. package/dist/cjs/components/Root/Root.js.map +1 -1
  63. package/dist/cjs/components/Search/Search.js +3 -3
  64. package/dist/cjs/components/Search/Search.js.map +1 -1
  65. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  66. package/dist/cjs/components/SimpleCheckbox/SimpleCheckbox.d.ts +9 -0
  67. package/dist/cjs/components/SimpleCheckbox/SimpleCheckbox.js +126 -0
  68. package/dist/cjs/components/SimpleCheckbox/SimpleCheckbox.js.map +1 -0
  69. package/dist/cjs/components/Snackbar/Snackbar.js +2 -2
  70. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  71. package/dist/cjs/components/Tappable/Tappable.d.ts +12 -9
  72. package/dist/cjs/components/Tappable/Tappable.js +47 -36
  73. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  74. package/dist/cjs/components/Touch/Touch.d.ts +1 -2
  75. package/dist/cjs/components/Touch/Touch.js +172 -283
  76. package/dist/cjs/components/Touch/Touch.js.map +1 -1
  77. package/dist/cjs/components/UsersStack/UsersStack.js +9 -18
  78. package/dist/cjs/components/UsersStack/UsersStack.js.map +1 -1
  79. package/dist/cjs/components/UsersStack/masks.d.ts +1 -1
  80. package/dist/cjs/components/UsersStack/masks.js +5 -8
  81. package/dist/cjs/components/UsersStack/masks.js.map +1 -1
  82. package/dist/cjs/components/View/View.js +2 -2
  83. package/dist/cjs/components/View/View.js.map +1 -1
  84. package/dist/cjs/components/View/ViewInfinite.js +2 -2
  85. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  86. package/dist/cjs/hooks/useEventListener.d.ts +2 -2
  87. package/dist/cjs/hooks/useEventListener.js +9 -4
  88. package/dist/cjs/hooks/useEventListener.js.map +1 -1
  89. package/dist/cjs/hooks/useGlobalEventListener.js +2 -4
  90. package/dist/cjs/hooks/useGlobalEventListener.js.map +1 -1
  91. package/dist/cjs/hooks/useInsets.js +3 -10
  92. package/dist/cjs/hooks/useInsets.js.map +1 -1
  93. package/dist/cjs/hooks/useKeyboard.d.ts +11 -0
  94. package/dist/cjs/hooks/useKeyboard.js +78 -0
  95. package/dist/cjs/hooks/useKeyboard.js.map +1 -0
  96. package/dist/cjs/hooks/useKeyboardInputTracker.js +4 -2
  97. package/dist/cjs/hooks/useKeyboardInputTracker.js.map +1 -1
  98. package/dist/cjs/index.d.ts +1 -1
  99. package/dist/cjs/index.js +2 -2
  100. package/dist/cjs/index.js.map +1 -1
  101. package/dist/cjs/lib/select.d.ts +7 -0
  102. package/dist/cjs/lib/select.js +73 -0
  103. package/dist/cjs/lib/select.js.map +1 -0
  104. package/dist/cjs/lib/touch.d.ts +1 -1
  105. package/dist/cjs/lib/touch.js +6 -2
  106. package/dist/cjs/lib/touch.js.map +1 -1
  107. package/dist/cjs/lib/utils.d.ts +2 -3
  108. package/dist/cjs/lib/utils.js.map +1 -1
  109. package/dist/cjs/types.d.ts +2 -6
  110. package/dist/cjs/unstable/index.d.ts +2 -0
  111. package/dist/cjs/unstable/index.js +8 -0
  112. package/dist/cjs/unstable/index.js.map +1 -1
  113. package/dist/components/AppRoot/AppRoot.d.ts +1 -0
  114. package/dist/components/AppRoot/AppRoot.js +29 -5
  115. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  116. package/dist/components/Banner/Banner.js +1 -1
  117. package/dist/components/Banner/Banner.js.map +1 -1
  118. package/dist/components/Cell/Cell.js +1 -1
  119. package/dist/components/Cell/Cell.js.map +1 -1
  120. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  121. package/dist/components/ChipsSelect/ChipsSelect.js +4 -6
  122. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  123. package/dist/components/ChipsSelect/useChipsSelect.js +2 -2
  124. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  125. package/dist/components/CustomSelect/CustomSelect.d.ts +2 -2
  126. package/dist/components/CustomSelect/CustomSelect.js +2 -3
  127. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  128. package/dist/components/FixedLayout/FixedLayout.d.ts +4 -9
  129. package/dist/components/FixedLayout/FixedLayout.js +84 -175
  130. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  131. package/dist/components/Gallery/Gallery.js +1 -1
  132. package/dist/components/Gallery/Gallery.js.map +1 -1
  133. package/dist/components/Header/Header.js +1 -1
  134. package/dist/components/Header/Header.js.map +1 -1
  135. package/dist/components/ModalCardBase/ModalCardBase.js +5 -1
  136. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  137. package/dist/components/ModalPage/ModalPage.d.ts +1 -2
  138. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  139. package/dist/components/ModalRoot/ModalRoot.js +1 -1
  140. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  141. package/dist/components/Panel/Panel.js +1 -1
  142. package/dist/components/Panel/Panel.js.map +1 -1
  143. package/dist/components/PanelHeaderContent/PanelHeaderContent.js +0 -1
  144. package/dist/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  145. package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
  146. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  147. package/dist/components/RangeSlider/UniversalSlider.js +1 -1
  148. package/dist/components/RangeSlider/UniversalSlider.js.map +1 -1
  149. package/dist/components/Root/Root.d.ts +5 -27
  150. package/dist/components/Root/Root.js +152 -207
  151. package/dist/components/Root/Root.js.map +1 -1
  152. package/dist/components/Search/Search.js +1 -1
  153. package/dist/components/Search/Search.js.map +1 -1
  154. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  155. package/dist/components/SimpleCheckbox/SimpleCheckbox.d.ts +9 -0
  156. package/dist/components/SimpleCheckbox/SimpleCheckbox.js +97 -0
  157. package/dist/components/SimpleCheckbox/SimpleCheckbox.js.map +1 -0
  158. package/dist/components/Snackbar/Snackbar.js +1 -1
  159. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  160. package/dist/components/Tappable/Tappable.d.ts +12 -9
  161. package/dist/components/Tappable/Tappable.js +45 -37
  162. package/dist/components/Tappable/Tappable.js.map +1 -1
  163. package/dist/components/Touch/Touch.d.ts +1 -2
  164. package/dist/components/Touch/Touch.js +163 -286
  165. package/dist/components/Touch/Touch.js.map +1 -1
  166. package/dist/components/UsersStack/UsersStack.js +7 -16
  167. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  168. package/dist/components/UsersStack/masks.d.ts +1 -1
  169. package/dist/components/UsersStack/masks.js +6 -9
  170. package/dist/components/UsersStack/masks.js.map +1 -1
  171. package/dist/components/View/View.js +1 -1
  172. package/dist/components/View/View.js.map +1 -1
  173. package/dist/components/View/ViewInfinite.js +1 -1
  174. package/dist/components/View/ViewInfinite.js.map +1 -1
  175. package/dist/components.css +1 -1
  176. package/dist/components.css.map +1 -1
  177. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +1 -1
  178. package/dist/cssm/components/AppRoot/AppRoot.css +1 -0
  179. package/dist/cssm/components/AppRoot/AppRoot.js +30 -2
  180. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  181. package/dist/cssm/components/Banner/Banner.css +1 -1
  182. package/dist/cssm/components/Banner/Banner.js +1 -1
  183. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  184. package/dist/cssm/components/Cell/Cell.js +1 -1
  185. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  186. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +4 -6
  187. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  188. package/dist/cssm/components/ChipsSelect/useChipsSelect.js +2 -2
  189. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  190. package/dist/cssm/components/CustomSelect/CustomSelect.js +2 -3
  191. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  192. package/dist/cssm/components/FixedLayout/FixedLayout.js +84 -175
  193. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  194. package/dist/cssm/components/Gallery/Gallery.js +1 -1
  195. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  196. package/dist/cssm/components/Header/Header.js +1 -1
  197. package/dist/cssm/components/Header/Header.js.map +1 -1
  198. package/dist/cssm/components/ModalCardBase/ModalCardBase.css +1 -1
  199. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +5 -1
  200. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  201. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  202. package/dist/cssm/components/ModalRoot/ModalRoot.css +1 -1
  203. package/dist/cssm/components/ModalRoot/ModalRoot.js +1 -1
  204. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  205. package/dist/cssm/components/Panel/Panel.js +1 -1
  206. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  207. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.css +1 -1
  208. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.js +0 -1
  209. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  210. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -1
  211. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  212. package/dist/cssm/components/RangeSlider/UniversalSlider.js +1 -1
  213. package/dist/cssm/components/RangeSlider/UniversalSlider.js.map +1 -1
  214. package/dist/cssm/components/Root/Root.js +152 -207
  215. package/dist/cssm/components/Root/Root.js.map +1 -1
  216. package/dist/cssm/components/Search/Search.js +1 -1
  217. package/dist/cssm/components/Search/Search.js.map +1 -1
  218. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  219. package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.css +1 -0
  220. package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.js +98 -0
  221. package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.js.map +1 -0
  222. package/dist/cssm/components/Snackbar/Snackbar.js +1 -1
  223. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  224. package/dist/cssm/components/Tappable/Tappable.js +45 -37
  225. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  226. package/dist/cssm/components/Touch/Touch.js +163 -286
  227. package/dist/cssm/components/Touch/Touch.js.map +1 -1
  228. package/dist/cssm/components/UsersStack/UsersStack.css +1 -1
  229. package/dist/cssm/components/UsersStack/UsersStack.js +7 -16
  230. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  231. package/dist/cssm/components/UsersStack/masks.js +6 -9
  232. package/dist/cssm/components/UsersStack/masks.js.map +1 -1
  233. package/dist/cssm/components/View/View.js +1 -1
  234. package/dist/cssm/components/View/View.js.map +1 -1
  235. package/dist/cssm/components/View/ViewInfinite.js +1 -1
  236. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  237. package/dist/cssm/hooks/useEventListener.js +8 -4
  238. package/dist/cssm/hooks/useEventListener.js.map +1 -1
  239. package/dist/cssm/hooks/useGlobalEventListener.js +2 -2
  240. package/dist/cssm/hooks/useGlobalEventListener.js.map +1 -1
  241. package/dist/cssm/hooks/useInsets.js +2 -10
  242. package/dist/cssm/hooks/useInsets.js.map +1 -1
  243. package/dist/cssm/hooks/useKeyboard.js +62 -0
  244. package/dist/cssm/hooks/useKeyboard.js.map +1 -0
  245. package/dist/cssm/hooks/useKeyboardInputTracker.js +4 -2
  246. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  247. package/dist/cssm/index.js +1 -1
  248. package/dist/cssm/index.js.map +1 -1
  249. package/dist/cssm/lib/select.js +62 -0
  250. package/dist/cssm/lib/select.js.map +1 -0
  251. package/dist/cssm/lib/touch.js +5 -2
  252. package/dist/cssm/lib/touch.js.map +1 -1
  253. package/dist/cssm/lib/utils.js.map +1 -1
  254. package/dist/cssm/styles/animations.css +1 -1
  255. package/dist/cssm/styles/common.css +1 -1
  256. package/dist/cssm/styles/components.css +1 -1
  257. package/dist/cssm/styles/constants.css +1 -1
  258. package/dist/cssm/styles/unstable.css +1 -1
  259. package/dist/cssm/unstable/index.js +1 -0
  260. package/dist/cssm/unstable/index.js.map +1 -1
  261. package/dist/hooks/useEventListener.d.ts +2 -2
  262. package/dist/hooks/useEventListener.js +8 -4
  263. package/dist/hooks/useEventListener.js.map +1 -1
  264. package/dist/hooks/useGlobalEventListener.js +2 -2
  265. package/dist/hooks/useGlobalEventListener.js.map +1 -1
  266. package/dist/hooks/useInsets.js +2 -10
  267. package/dist/hooks/useInsets.js.map +1 -1
  268. package/dist/hooks/useKeyboard.d.ts +11 -0
  269. package/dist/hooks/useKeyboard.js +62 -0
  270. package/dist/hooks/useKeyboard.js.map +1 -0
  271. package/dist/hooks/useKeyboardInputTracker.js +4 -2
  272. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  273. package/dist/index.d.ts +1 -1
  274. package/dist/index.js +1 -1
  275. package/dist/index.js.map +1 -1
  276. package/dist/lib/select.d.ts +7 -0
  277. package/dist/lib/select.js +62 -0
  278. package/dist/lib/select.js.map +1 -0
  279. package/dist/lib/touch.d.ts +1 -1
  280. package/dist/lib/touch.js +5 -2
  281. package/dist/lib/touch.js.map +1 -1
  282. package/dist/lib/utils.d.ts +2 -3
  283. package/dist/lib/utils.js.map +1 -1
  284. package/dist/types.d.ts +2 -6
  285. package/dist/unstable/index.d.ts +2 -0
  286. package/dist/unstable/index.js +1 -0
  287. package/dist/unstable/index.js.map +1 -1
  288. package/dist/unstable.css +1 -1
  289. package/dist/unstable.css.map +1 -1
  290. package/dist/vkui.css +1 -1
  291. package/dist/vkui.css.map +1 -1
  292. package/package.json +4 -2
  293. package/postcss.config.js +1 -1
  294. package/src/components/ActionSheetItem/ActionSheetItem.css +4 -8
  295. package/src/components/AppRoot/AppRoot.css +20 -0
  296. package/src/components/AppRoot/AppRoot.tsx +30 -0
  297. package/src/components/Banner/Banner.css +4 -0
  298. package/src/components/Banner/Banner.tsx +1 -1
  299. package/src/components/Cell/Cell.tsx +1 -1
  300. package/src/components/ChipsSelect/ChipsSelect.tsx +4 -7
  301. package/src/components/ChipsSelect/Readme.md +0 -2
  302. package/src/components/ChipsSelect/useChipsSelect.ts +1 -1
  303. package/src/components/CustomSelect/CustomSelect.tsx +3 -2
  304. package/src/components/FixedLayout/FixedLayout.tsx +61 -147
  305. package/src/components/Gallery/Gallery.tsx +1 -1
  306. package/src/components/Header/Header.tsx +1 -1
  307. package/src/components/ModalCardBase/ModalCardBase.css +4 -0
  308. package/src/components/ModalCardBase/ModalCardBase.tsx +5 -1
  309. package/src/components/ModalPage/ModalPage.tsx +1 -2
  310. package/src/components/ModalRoot/ModalRoot.css +10 -0
  311. package/src/components/ModalRoot/ModalRoot.tsx +1 -1
  312. package/src/components/Panel/Panel.tsx +1 -1
  313. package/src/components/PanelHeaderContent/PanelHeaderContent.css +2 -1
  314. package/src/components/PanelHeaderContent/PanelHeaderContent.tsx +2 -2
  315. package/src/components/PullToRefresh/PullToRefresh.tsx +1 -1
  316. package/src/components/RangeSlider/UniversalSlider.tsx +1 -1
  317. package/src/components/Root/Readme.md +27 -37
  318. package/src/components/Root/Root.tsx +112 -191
  319. package/src/components/Search/Search.tsx +1 -1
  320. package/src/components/Separator/Readme.md +3 -1
  321. package/src/components/SimpleCell/SimpleCell.tsx +1 -1
  322. package/src/components/SimpleCheckbox/Readme.md +17 -0
  323. package/src/components/SimpleCheckbox/SimpleCheckbox.css +115 -0
  324. package/src/components/SimpleCheckbox/SimpleCheckbox.tsx +105 -0
  325. package/src/components/Snackbar/Snackbar.tsx +1 -1
  326. package/src/components/Tappable/Tappable.tsx +28 -37
  327. package/src/components/Touch/Touch.tsx +100 -238
  328. package/src/components/UsersStack/UsersStack.css +5 -9
  329. package/src/components/UsersStack/UsersStack.tsx +4 -11
  330. package/src/components/UsersStack/masks.tsx +6 -9
  331. package/src/components/View/Readme.md +34 -42
  332. package/src/components/View/View.tsx +1 -1
  333. package/src/components/View/ViewInfinite.tsx +1 -1
  334. package/src/hooks/useEventListener.ts +11 -8
  335. package/src/hooks/useGlobalEventListener.ts +2 -2
  336. package/src/hooks/useInsets.ts +2 -8
  337. package/src/hooks/useKeyboard.ts +67 -0
  338. package/src/hooks/useKeyboardInputTracker.ts +4 -2
  339. package/src/index.ts +1 -1
  340. package/src/lib/select.ts +53 -0
  341. package/src/lib/touch.ts +2 -2
  342. package/src/lib/utils.ts +3 -4
  343. package/src/styles/animations.css +0 -14
  344. package/src/styles/common.css +0 -21
  345. package/src/styles/components.css +2 -0
  346. package/src/styles/constants.css +3 -0
  347. package/src/styles/unstable.css +1 -0
  348. package/src/types.ts +2 -8
  349. package/src/unstable/index.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/RangeSlider/UniversalSlider.tsx"],"names":["UniversalSliderDumb","min","max","step","value","defaultValue","onChange","getRootRef","sizeY","disabled","restProps","platform","start","end","isRange","gesture","React","useRef","dragging","startX","containerWidth","current","container","thumbStart","thumbEnd","offsetToValue","absolute","updateRange","nextValue","snapDirection","pos","target","Math","abs","onStart","e","boundingRect","getBoundingClientRect","width","absolutePosition","left","originalEvent","stopPropagation","onMove","shiftX","preventDefault","onEnd","toPercent","v","draggerStyle","join","UniversalSlider"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;AAkBA,IAAMA,mBAAmE,GAAG,SAAtEA,mBAAsE,OAOtE;AAAA,MANJC,GAMI,QANJA,GAMI;AAAA,MANCC,GAMD,QANCA,GAMD;AAAA,MANMC,IAMN,QANMA,IAMN;AAAA,MALJC,KAKI,QALJA,KAKI;AAAA,MALGC,YAKH,QALGA,YAKH;AAAA,MALiBC,QAKjB,QALiBA,QAKjB;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,KAGI,QAHJA,KAGI;AAAA,MAFJC,QAEI,QAFJA,QAEI;AAAA,MADDC,SACC;AACJ,MAAMC,QAAQ,GAAG,+BAAjB;;AACA,4CAAqBP,KAArB;AAAA,MAAOQ,KAAP;AAAA,MAAcC,GAAd;;AACA,MAAMC,OAAO,GAAGF,KAAK,IAAI,IAAzB;AACA,MAAMG,OAAO,GAAGC,KAAK,CAACC,MAAN,CAAa;AAC3BC,IAAAA,QAAQ,EAAE,KADiB;AAE3BC,IAAAA,MAAM,EAAE,CAFmB;AAG3BC,IAAAA,cAAc,EAAE;AAHW,GAAb,EAIbC,OAJH;AAKA,MAAMC,SAAS,GAAG,gCAAaf,UAAb,CAAlB;AACA,MAAMgB,UAAU,GAAGP,KAAK,CAACC,MAAN,EAAnB;AACA,MAAMO,QAAQ,GAAGR,KAAK,CAACC,MAAN,EAAjB;;AAEA,MAAMQ,aAAa,GAAG,SAAhBA,aAAgB,CAACC,QAAD,EAAsB;AAC1C,WAAO,mBAAQA,QAAR,EAAkB,CAAC,CAAD,EAAIX,OAAO,CAACK,cAAZ,CAAlB,EAA+C,CAACnB,GAAD,EAAMC,GAAN,CAA/C,EAA2D;AAAEC,MAAAA,IAAI,EAAJA;AAAF,KAA3D,CAAP;AACD,GAFD;;AAIA,MAAMwB,WAAW,GAAG,SAAdA,WAAc,CAACC,SAAD,EAAuC;AACzD,QAAIhB,KAAK,IAAI,IAAb,EAAmB;AACjB,aAAO,CAAC,IAAD,EAAOgB,SAAP,CAAP;AACD;;AAED,QAAQV,QAAR,GAAqBH,OAArB,CAAQG,QAAR;;AACA,QAAIA,QAAQ,KAAK,OAAjB,EAA0B;AACxB,UAAIU,SAAS,GAAGf,GAAhB,EAAqB;AACnB;AACAE,QAAAA,OAAO,CAACG,QAAR,GAAmB,KAAnB;AACA,eAAO,CAACL,GAAD,EAAMe,SAAN,CAAP;AACD;;AACD,aAAO,CAACA,SAAD,EAAYf,GAAZ,CAAP;AACD;;AACD,QAAIK,QAAQ,KAAK,KAAjB,EAAwB;AACtB,UAAIU,SAAS,GAAGhB,KAAhB,EAAuB;AACrB;AACAG,QAAAA,OAAO,CAACG,QAAR,GAAmB,OAAnB;AACA,eAAO,CAACU,SAAD,EAAYhB,KAAZ,CAAP;AACD;;AACD,aAAO,CAACA,KAAD,EAAQgB,SAAR,CAAP;AACD;;AAED,WAAOxB,KAAP;AACD,GAxBD;;AA0BA,MAAMyB,aAAa,GAAG,SAAhBA,aAAgB,CAACC,GAAD,EAAcC,MAAd,EAAsC;AAC1D,QAAIA,MAAM,KAAKR,UAAU,CAACF,OAA1B,EAAmC;AACjC,aAAO,OAAP;AACD;;AACD,QAAIU,MAAM,KAAKP,QAAQ,CAACH,OAAxB,EAAiC;AAC/B,aAAO,KAAP;AACD;;AACD,WAAOW,IAAI,CAACC,GAAL,CAASrB,KAAK,GAAGkB,GAAjB,KAAyBE,IAAI,CAACC,GAAL,CAASpB,GAAG,GAAGiB,GAAf,CAAzB,GAA+C,OAA/C,GAAyD,KAAhE;AACD,GARD;;AAUA,MAAMI,OAA0B,GAAG,SAA7BA,OAA6B,CAACC,CAAD,EAAmB;AACpD,QAAMC,YAAY,GAAGd,SAAS,CAACD,OAAV,CAAkBgB,qBAAlB,EAArB;AACAtB,IAAAA,OAAO,CAACK,cAAR,GAAyBgB,YAAY,CAACE,KAAtC;AAEA,QAAMC,gBAAgB,GAAGJ,CAAC,CAAChB,MAAF,GAAWiB,YAAY,CAACI,IAAjD;AACA,QAAMV,GAAG,GAAGL,aAAa,CAACc,gBAAD,CAAzB;AACAxB,IAAAA,OAAO,CAACG,QAAR,GAAmBW,aAAa,CAACC,GAAD,EAAMK,CAAC,CAACM,aAAF,CAAgBV,MAAtB,CAAhC;AACAhB,IAAAA,OAAO,CAACI,MAAR,GAAiBoB,gBAAjB;AAEAjC,IAAAA,QAAQ,CAACqB,WAAW,CAACG,GAAD,CAAZ,EAAmBK,CAAnB,CAAR;AACAA,IAAAA,CAAC,CAACM,aAAF,CAAgBC,eAAhB;AACD,GAXD;;AAaA,MAAMC,MAAyB,GAAG,SAA5BA,MAA4B,CAACR,CAAD,EAAmB;AACnD7B,IAAAA,QAAQ,CAACqB,WAAW,CAACF,aAAa,CAACV,OAAO,CAACI,MAAR,IAAkBgB,CAAC,CAACS,MAAF,IAAY,CAA9B,CAAD,CAAd,CAAZ,EAA+DT,CAA/D,CAAR;AAEAA,IAAAA,CAAC,CAACM,aAAF,CAAgBC,eAAhB;AACAP,IAAAA,CAAC,CAACM,aAAF,CAAgBI,cAAhB;AACD,GALD;;AAOA,MAAMC,KAAwB,GAAG,SAA3BA,KAA2B,CAACX,CAAD,EAAO;AACtCpB,IAAAA,OAAO,CAACG,QAAR,GAAmB,KAAnB;AACAiB,IAAAA,CAAC,CAACM,aAAF,CAAgBC,eAAhB;AACD,GAHD;;AAKA,MAAMK,SAAS,GAAG,SAAZA,SAAY,CAACC,CAAD;AAAA,WAAe,CAACA,CAAC,GAAG/C,GAAL,KAAaC,GAAG,GAAGD,GAAnB,IAA0B,GAAzC;AAAA,GAAlB;;AACA,MAAMgD,YAAY,GAAGnC,OAAO,GAAG;AAC7BwB,IAAAA,KAAK,YAAKS,SAAS,CAAClC,GAAD,CAAT,GAAiBkC,SAAS,CAACnC,KAAD,CAA/B,MADwB;AAE7B4B,IAAAA,IAAI,YAAKO,SAAS,CAACnC,KAAD,CAAd;AAFyB,GAAH,GAGxB;AACF0B,IAAAA,KAAK,YAAKS,SAAS,CAAClC,GAAD,CAAd;AADH,GAHJ;AAOA,SACE,qCAAC,cAAD;AACE,kBAAYC,OAAO,GAAGV,KAAK,CAAC8C,IAAN,CAAW,GAAX,CAAH,GAAqB9C;AAD1C,KAEMM,SAFN,EAGOD,QAAQ,GAAG,EAAH,GAAQ;AAAEyB,IAAAA,OAAO,EAAPA,OAAF;AAAWS,IAAAA,MAAM,EAANA,MAAX;AAAmBG,IAAAA,KAAK,EAALA;AAAnB,GAHvB;AAIE,IAAA,SAAS,EAAE,4BACT,gCAAa,QAAb,EAAuBnC,QAAvB,CADS,0BAEQH,KAFR,GAGTC,QAAQ,IAAI,kBAHH;AAJb,MAUE;AAAK,IAAA,GAAG,EAAEa,SAAV;AAAqB,IAAA,SAAS,EAAC;AAA/B,KACE;AAAK,IAAA,SAAS,EAAC,iBAAf;AAAiC,IAAA,KAAK,EAAE2B;AAAxC,KACGnC,OAAO,IAAI;AAAM,IAAA,SAAS,EAAE,4BAAW,eAAX,EAA4B,sBAA5B,CAAjB;AAAsE,IAAA,GAAG,EAAES;AAA3E,IADd,EAEE;AAAM,IAAA,SAAS,EAAE,4BAAW,eAAX,EAA4B,oBAA5B,CAAjB;AAAoE,IAAA,GAAG,EAAEC;AAAzE,IAFF,CADF,CAVF,CADF;AAmBD,CAhHD;;AAkHO,IAAM2B,eAAe,GAAG,oCAAenD,mBAAf,EAAoC;AACjEQ,EAAAA,KAAK,EAAE;AAD0D,CAApC,CAAxB","sourcesContent":["import * as React from 'react';\nimport Touch, { TouchEvent, TouchEventHandler } from '../Touch/Touch';\nimport { getClassName } from '../../helpers/getClassName';\nimport { classNames } from '../../lib/classNames';\nimport { HasRootRef } from '../../types';\nimport { rescale } from '../../helpers/math';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport '../Slider/Slider.css';\n\nexport type UniversalValue = [number | null, number];\n\nexport interface UniversalSliderProps<Value> extends\n HasRootRef<HTMLDivElement>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n AdaptivityProps {\n min?: number;\n max?: number;\n step?: number;\n value?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n onChange?(value: Value, e: TouchEvent): void;\n}\n\nconst UniversalSliderDumb: React.FC<UniversalSliderProps<UniversalValue>> = ({\n min, max, step,\n value, defaultValue, onChange,\n getRootRef,\n sizeY,\n disabled,\n ...restProps\n}) => {\n const platform = usePlatform();\n const [start, end] = value;\n const isRange = start != null;\n const gesture = React.useRef({\n dragging: false as false | 'start' | 'end',\n startX: 0,\n containerWidth: 0,\n }).current;\n const container = useExternRef(getRootRef);\n const thumbStart = React.useRef<HTMLDivElement>();\n const thumbEnd = React.useRef<HTMLDivElement>();\n\n const offsetToValue = (absolute: number) => {\n return rescale(absolute, [0, gesture.containerWidth], [min, max], { step });\n };\n\n const updateRange = (nextValue: number): UniversalValue => {\n if (start == null) {\n return [null, nextValue];\n }\n\n const { dragging } = gesture;\n if (dragging === 'start') {\n if (nextValue > end) {\n // \"перехватиться\", если перетянули за конец\n gesture.dragging = 'end';\n return [end, nextValue];\n }\n return [nextValue, end];\n }\n if (dragging === 'end') {\n if (nextValue < start) {\n // \"перехватиться\", если перетянули за начало\n gesture.dragging = 'start';\n return [nextValue, start];\n }\n return [start, nextValue];\n }\n\n return value;\n };\n\n const snapDirection = (pos: number, target: EventTarget) => {\n if (target === thumbStart.current) {\n return 'start';\n }\n if (target === thumbEnd.current) {\n return 'end';\n }\n return Math.abs(start - pos) <= Math.abs(end - pos) ? 'start' : 'end';\n };\n\n const onStart: TouchEventHandler = (e: TouchEvent) => {\n const boundingRect = container.current.getBoundingClientRect();\n gesture.containerWidth = boundingRect.width;\n\n const absolutePosition = e.startX - boundingRect.left;\n const pos = offsetToValue(absolutePosition);\n gesture.dragging = snapDirection(pos, e.originalEvent.target);\n gesture.startX = absolutePosition;\n\n onChange(updateRange(pos), e);\n e.originalEvent.stopPropagation();\n };\n\n const onMove: TouchEventHandler = (e: TouchEvent) => {\n onChange(updateRange(offsetToValue(gesture.startX + (e.shiftX || 0))), e);\n\n e.originalEvent.stopPropagation();\n e.originalEvent.preventDefault();\n };\n\n const onEnd: TouchEventHandler = (e) => {\n gesture.dragging = false;\n e.originalEvent.stopPropagation();\n };\n\n const toPercent = (v: number) => (v - min) / (max - min) * 100;\n const draggerStyle = isRange ? {\n width: `${toPercent(end) - toPercent(start)}%`,\n left: `${toPercent(start)}%`,\n } : {\n width: `${toPercent(end)}%`,\n };\n\n return (\n <Touch\n data-value={isRange ? value.join(',') : value}\n {...restProps}\n {...(disabled ? {} : { onStart, onMove, onEnd })}\n vkuiClass={classNames(\n getClassName('Slider', platform),\n `Slider--sizeY-${sizeY}`,\n disabled && 'Slider--disabled',\n )}\n >\n <div ref={container} vkuiClass=\"Slider__in\">\n <div vkuiClass=\"Slider__dragger\" style={draggerStyle}>\n {isRange && <span vkuiClass={classNames('Slider__thumb', 'Slider__thumb--start')} ref={thumbStart} />}\n <span vkuiClass={classNames('Slider__thumb', 'Slider__thumb--end')} ref={thumbEnd} />\n </div>\n </div>\n </Touch>\n );\n};\n\nexport const UniversalSlider = withAdaptivity(UniversalSliderDumb, {\n sizeY: true,\n});\n"],"file":"UniversalSlider.js"}
1
+ {"version":3,"sources":["../../../../src/components/RangeSlider/UniversalSlider.tsx"],"names":["UniversalSliderDumb","min","max","step","value","defaultValue","onChange","getRootRef","sizeY","disabled","restProps","platform","start","end","isRange","gesture","React","useRef","dragging","startX","containerWidth","current","container","thumbStart","thumbEnd","offsetToValue","absolute","updateRange","nextValue","snapDirection","pos","target","Math","abs","onStart","e","boundingRect","getBoundingClientRect","width","absolutePosition","left","originalEvent","stopPropagation","onMove","shiftX","preventDefault","onEnd","toPercent","v","draggerStyle","join","UniversalSlider"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Touch, TouchEvent, TouchEventHandler } from '../Touch/Touch';\nimport { getClassName } from '../../helpers/getClassName';\nimport { classNames } from '../../lib/classNames';\nimport { HasRootRef } from '../../types';\nimport { rescale } from '../../helpers/math';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport '../Slider/Slider.css';\n\nexport type UniversalValue = [number | null, number];\n\nexport interface UniversalSliderProps<Value> extends\n HasRootRef<HTMLDivElement>,\n Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n AdaptivityProps {\n min?: number;\n max?: number;\n step?: number;\n value?: Value;\n defaultValue?: Value;\n disabled?: boolean;\n onChange?(value: Value, e: TouchEvent): void;\n}\n\nconst UniversalSliderDumb: React.FC<UniversalSliderProps<UniversalValue>> = ({\n min, max, step,\n value, defaultValue, onChange,\n getRootRef,\n sizeY,\n disabled,\n ...restProps\n}) => {\n const platform = usePlatform();\n const [start, end] = value;\n const isRange = start != null;\n const gesture = React.useRef({\n dragging: false as false | 'start' | 'end',\n startX: 0,\n containerWidth: 0,\n }).current;\n const container = useExternRef(getRootRef);\n const thumbStart = React.useRef<HTMLDivElement>();\n const thumbEnd = React.useRef<HTMLDivElement>();\n\n const offsetToValue = (absolute: number) => {\n return rescale(absolute, [0, gesture.containerWidth], [min, max], { step });\n };\n\n const updateRange = (nextValue: number): UniversalValue => {\n if (start == null) {\n return [null, nextValue];\n }\n\n const { dragging } = gesture;\n if (dragging === 'start') {\n if (nextValue > end) {\n // \"перехватиться\", если перетянули за конец\n gesture.dragging = 'end';\n return [end, nextValue];\n }\n return [nextValue, end];\n }\n if (dragging === 'end') {\n if (nextValue < start) {\n // \"перехватиться\", если перетянули за начало\n gesture.dragging = 'start';\n return [nextValue, start];\n }\n return [start, nextValue];\n }\n\n return value;\n };\n\n const snapDirection = (pos: number, target: EventTarget) => {\n if (target === thumbStart.current) {\n return 'start';\n }\n if (target === thumbEnd.current) {\n return 'end';\n }\n return Math.abs(start - pos) <= Math.abs(end - pos) ? 'start' : 'end';\n };\n\n const onStart: TouchEventHandler = (e: TouchEvent) => {\n const boundingRect = container.current.getBoundingClientRect();\n gesture.containerWidth = boundingRect.width;\n\n const absolutePosition = e.startX - boundingRect.left;\n const pos = offsetToValue(absolutePosition);\n gesture.dragging = snapDirection(pos, e.originalEvent.target);\n gesture.startX = absolutePosition;\n\n onChange(updateRange(pos), e);\n e.originalEvent.stopPropagation();\n };\n\n const onMove: TouchEventHandler = (e: TouchEvent) => {\n onChange(updateRange(offsetToValue(gesture.startX + (e.shiftX || 0))), e);\n\n e.originalEvent.stopPropagation();\n e.originalEvent.preventDefault();\n };\n\n const onEnd: TouchEventHandler = (e) => {\n gesture.dragging = false;\n e.originalEvent.stopPropagation();\n };\n\n const toPercent = (v: number) => (v - min) / (max - min) * 100;\n const draggerStyle = isRange ? {\n width: `${toPercent(end) - toPercent(start)}%`,\n left: `${toPercent(start)}%`,\n } : {\n width: `${toPercent(end)}%`,\n };\n\n return (\n <Touch\n data-value={isRange ? value.join(',') : value}\n {...restProps}\n {...(disabled ? {} : { onStart, onMove, onEnd })}\n vkuiClass={classNames(\n getClassName('Slider', platform),\n `Slider--sizeY-${sizeY}`,\n disabled && 'Slider--disabled',\n )}\n >\n <div ref={container} vkuiClass=\"Slider__in\">\n <div vkuiClass=\"Slider__dragger\" style={draggerStyle}>\n {isRange && <span vkuiClass={classNames('Slider__thumb', 'Slider__thumb--start')} ref={thumbStart} />}\n <span vkuiClass={classNames('Slider__thumb', 'Slider__thumb--end')} ref={thumbEnd} />\n </div>\n </div>\n </Touch>\n );\n};\n\nexport const UniversalSlider = withAdaptivity(UniversalSliderDumb, {\n sizeY: true,\n});\n"],"file":"UniversalSlider.js"}
@@ -1,11 +1,7 @@
1
1
  import * as React from 'react';
2
- import { HasPlatform } from '../../types';
3
- import { ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';
4
- import { SplitColContextProps } from '../SplitCol/SplitCol';
5
- import { ScrollContextInterface } from '../AppRoot/ScrollContext';
6
2
  import { NavIdProps } from '../../lib/getNavId';
7
3
  import './Root.css';
8
- export interface RootProps extends React.HTMLAttributes<HTMLDivElement>, HasPlatform, NavIdProps {
4
+ export interface RootProps extends React.HTMLAttributes<HTMLDivElement>, NavIdProps {
9
5
  activeView: string;
10
6
  onTransition?(params: {
11
7
  isBack: boolean;
@@ -24,30 +20,12 @@ export interface RootProps extends React.HTMLAttributes<HTMLDivElement>, HasPlat
24
20
  * Свойство для отрисовки `ModalRoot`.
25
21
  */
26
22
  modal?: React.ReactNode;
27
- /**
28
- * @ignore
29
- */
30
- splitCol?: SplitColContextProps;
31
- /**
32
- * @ignore
33
- */
34
- configProvider?: ConfigProviderContextInterface;
35
- /**
36
- * @ignore
37
- */
38
- scroll?: ScrollContextInterface;
39
23
  }
40
- export declare type AnimationEndCallback = (e?: AnimationEvent) => void;
41
24
  export interface RootState {
42
25
  activeView: string;
43
- prevView: string;
44
- nextView: string;
45
- visibleViews: [string] | [string, string];
46
- isBack: boolean;
47
- scrolls: {
48
- [index: string]: number;
49
- };
50
26
  transition: boolean;
27
+ isBack?: boolean;
28
+ prevView?: string;
51
29
  }
52
- declare const _default: React.FC<RootProps>;
53
- export default _default;
30
+ declare const Root: React.FC<RootProps>;
31
+ export default Root;
@@ -13,21 +13,9 @@ var _jsxRuntime = require("../../lib/jsxRuntime");
13
13
 
14
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
15
 
16
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
-
18
- var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
19
-
20
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
21
-
22
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
23
-
24
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
25
17
 
26
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
27
-
28
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
29
-
30
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
31
19
 
32
20
  var React = _interopRequireWildcard(require("react"));
33
21
 
@@ -35,228 +23,184 @@ var _classNames = require("../../lib/classNames");
35
23
 
36
24
  var _getClassName = require("../../helpers/getClassName");
37
25
 
38
- var _supportEvents = require("../../lib/supportEvents");
39
-
40
26
  var _platform = require("../../lib/platform");
41
27
 
42
- var _withPlatform = require("../../hoc/withPlatform");
43
-
44
- var _withContext = require("../../hoc/withContext");
45
-
46
28
  var _ConfigProviderContext = require("../ConfigProvider/ConfigProviderContext");
47
29
 
48
30
  var _SplitCol = require("../SplitCol/SplitCol");
49
31
 
50
32
  var _AppRootPortal = require("../AppRoot/AppRootPortal");
51
33
 
52
- var _dom = require("../../lib/dom");
53
-
54
34
  var _ScrollContext = require("../AppRoot/ScrollContext");
55
35
 
56
36
  var _getNavId = require("../../lib/getNavId");
57
37
 
58
38
  var _warnOnce = require("../../lib/warnOnce");
59
39
 
60
- var _excluded = ["popout", "modal", "platform", "splitCol", "configProvider", "activeView", "onTransition", "window", "document", "scroll", "nav"];
40
+ var _dom = require("../../lib/dom");
41
+
42
+ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
43
+
44
+ var _useTimeout = require("../../hooks/useTimeout");
45
+
46
+ var _usePlatform = require("../../hooks/usePlatform");
47
+
48
+ var _excluded = ["popout", "modal", "children", "activeView", "onTransition", "nav"];
61
49
  var warn = (0, _warnOnce.warnOnce)('Root');
62
50
 
63
- var Root = /*#__PURE__*/function (_React$Component) {
64
- (0, _inherits2.default)(Root, _React$Component);
65
-
66
- var _super = (0, _createSuper2.default)(Root);
67
-
68
- function Root(props) {
69
- var _this;
70
-
71
- (0, _classCallCheck2.default)(this, Root);
72
- _this = _super.call(this, props);
73
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "animationFinishTimeout", void 0);
74
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "viewNodes", {});
75
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onAnimationEnd", function (e) {
76
- if (!e || ['vkui-root-android-animation-hide-back', 'vkui-root-android-animation-show-forward', 'vkui-root-ios-animation-hide-back', 'vkui-root-ios-animation-show-forward'].includes(e.animationName)) {
77
- var isBack = _this.state.isBack;
78
- var prevView = _this.state.prevView;
79
- var nextView = _this.state.nextView;
80
-
81
- _this.setState({
82
- activeView: nextView,
83
- prevView: null,
84
- nextView: null,
85
- visibleViews: [nextView],
86
- transition: false,
87
- isBack: undefined
88
- }, function () {
89
- _this.props.scroll.scrollTo(0, isBack ? _this.state.scrolls[_this.state.activeView] : 0);
90
-
91
- _this.props.onTransition && _this.props.onTransition({
92
- isBack: isBack,
93
- from: prevView,
94
- to: nextView
95
- });
96
- });
97
- }
98
- });
99
- _this.state = {
100
- activeView: props.activeView,
101
- prevView: null,
102
- nextView: null,
103
- visibleViews: [props.activeView],
104
- isBack: undefined,
105
- scrolls: {},
106
- transition: false
107
- };
108
- return _this;
109
- }
110
-
111
- (0, _createClass2.default)(Root, [{
112
- key: "document",
113
- get: function get() {
114
- return this.props.document;
115
- }
116
- }, {
117
- key: "componentDidUpdate",
118
- value: function componentDidUpdate(prevProps, prevState) {
119
- var _this2 = this;
120
-
121
- if (this.props.popout && !prevProps.popout) {
122
- this.blurActiveElement();
123
- } // Нужен переход
124
-
125
-
126
- if (this.props.activeView !== prevProps.activeView) {
127
- var pageYOffset = this.props.scroll.getScroll().y;
128
- var firstLayerId = [].concat(prevProps.children).map(function (view) {
129
- return (0, _getNavId.getNavId)(view.props, warn);
130
- }).find(function (id) {
131
- return id === prevProps.activeView || id === _this2.props.activeView;
132
- });
133
- var isBack = firstLayerId === this.props.activeView;
134
- this.blurActiveElement();
135
- var nextView = this.props.activeView;
136
- var prevView = prevProps.activeView;
137
- this.setState({
138
- scrolls: (0, _objectSpread3.default)((0, _objectSpread3.default)({}, this.state.scrolls), {}, (0, _defineProperty2.default)({}, prevProps.activeView, pageYOffset)),
139
- transition: true,
140
- activeView: null,
141
- nextView: nextView,
142
- prevView: prevView,
143
- visibleViews: [nextView, prevView],
144
- isBack: isBack
145
- });
146
- } // Начался переход
147
-
148
-
149
- if (!prevState.transition && this.state.transition) {
150
- var prevViewElement = this.viewNodes[this.state.prevView];
151
- var nextViewElement = this.viewNodes[this.state.nextView];
152
-
153
- var setPanelScroll = function setPanelScroll(e, scroll) {
154
- // eslint-disable-next-line no-restricted-properties
155
- var pan = e.querySelector('[data-vkui-active-panel=true]');
156
- pan && (pan.scrollTop = scroll);
157
- };
158
-
159
- setPanelScroll(prevViewElement, this.state.scrolls[this.state.prevView]);
160
-
161
- if (this.state.isBack) {
162
- setPanelScroll(nextViewElement, this.state.scrolls[this.state.nextView]);
163
- }
164
-
165
- this.waitAnimationFinish(this.state.isBack ? prevViewElement : nextViewElement, this.onAnimationEnd);
166
- }
167
- }
168
- }, {
169
- key: "shouldDisableTransitionMotion",
170
- value: function shouldDisableTransitionMotion() {
171
- return this.props.configProvider.transitionMotionEnabled === false || !this.props.splitCol.animate;
172
- }
173
- }, {
174
- key: "waitAnimationFinish",
175
- value: function waitAnimationFinish(elem, eventHandler) {
176
- if (this.shouldDisableTransitionMotion()) {
177
- eventHandler();
178
- return;
179
- }
180
-
181
- if (_supportEvents.animationEvent.supported) {
182
- elem.removeEventListener(_supportEvents.animationEvent.name, eventHandler);
183
- elem.addEventListener(_supportEvents.animationEvent.name, eventHandler);
184
- } else {
185
- clearTimeout(this.animationFinishTimeout);
186
- this.animationFinishTimeout = setTimeout(eventHandler.bind(this), this.props.platform === _platform.ANDROID || this.props.platform === _platform.VKCOM ? 300 : 600);
187
- }
51
+ var Root = function Root(_ref) {
52
+ var _ref$popout = _ref.popout,
53
+ popout = _ref$popout === void 0 ? null : _ref$popout,
54
+ modal = _ref.modal,
55
+ children = _ref.children,
56
+ _activeView = _ref.activeView,
57
+ onTransition = _ref.onTransition,
58
+ nav = _ref.nav,
59
+ restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
60
+ var scroll = React.useContext(_ScrollContext.ScrollContext);
61
+ var platform = (0, _usePlatform.usePlatform)();
62
+
63
+ var _useDOM = (0, _dom.useDOM)(),
64
+ document = _useDOM.document;
65
+
66
+ var scrolls = React.useRef({}).current;
67
+ var viewNodes = React.useRef({}).current;
68
+
69
+ var _React$useContext = React.useContext(_ConfigProviderContext.ConfigProviderContext),
70
+ _React$useContext$tra = _React$useContext.transitionMotionEnabled,
71
+ transitionMotionEnabled = _React$useContext$tra === void 0 ? true : _React$useContext$tra;
72
+
73
+ var _React$useContext2 = React.useContext(_SplitCol.SplitColContext),
74
+ animate = _React$useContext2.animate;
75
+
76
+ var disableAnimation = !transitionMotionEnabled || !animate;
77
+ var views = React.Children.toArray(children);
78
+
79
+ var _React$useState = React.useState({
80
+ activeView: _activeView,
81
+ transition: false
82
+ }),
83
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
84
+ _React$useState2$ = _React$useState2[0],
85
+ prevView = _React$useState2$.prevView,
86
+ activeView = _React$useState2$.activeView,
87
+ transition = _React$useState2$.transition,
88
+ isBack = _React$useState2$.isBack,
89
+ _setState = _React$useState2[1];
90
+
91
+ var transitionTo = function transitionTo(panel) {
92
+ if (panel !== activeView) {
93
+ var viewIds = views.map(function (view) {
94
+ return (0, _getNavId.getNavId)(view.props, warn);
95
+ });
96
+
97
+ var _isBack = viewIds.indexOf(panel) < viewIds.indexOf(activeView);
98
+
99
+ _setState({
100
+ activeView: panel,
101
+ prevView: activeView,
102
+ transition: true,
103
+ isBack: _isBack
104
+ });
188
105
  }
189
- }, {
190
- key: "blurActiveElement",
191
- value: function blurActiveElement() {
192
- if (_dom.canUseDOM && this.document.activeElement) {
193
- this.document.activeElement.blur();
194
- }
106
+ };
107
+
108
+ var finishTransition = function finishTransition() {
109
+ return _setState({
110
+ activeView: activeView,
111
+ prevView: prevView,
112
+ isBack: isBack,
113
+ transition: false
114
+ });
115
+ };
116
+
117
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
118
+ var _document$activeEleme;
119
+
120
+ (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.blur();
121
+ }, [!!popout, activeView]); // Нужен переход
122
+
123
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
124
+ return transitionTo(_activeView);
125
+ }, [_activeView]); // scroll restoration
126
+
127
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
128
+ if (transition) {
129
+ // save scroll
130
+ scrolls[prevView] = scroll.getScroll().y;
131
+ setPanelScroll(viewNodes[prevView], scrolls[prevView]);
132
+ isBack && setPanelScroll(viewNodes[activeView], scrolls[activeView]);
133
+ } else if (prevView) {
134
+ // Закончился переход
135
+ scroll.scrollTo(0, isBack ? scrolls[activeView] : 0);
195
136
  }
196
- }, {
197
- key: "render",
198
- value: function render() {
199
- var _this3 = this;
200
-
201
- var _this$props = this.props,
202
- popout = _this$props.popout,
203
- modal = _this$props.modal,
204
- platform = _this$props.platform,
205
- splitCol = _this$props.splitCol,
206
- configProvider = _this$props.configProvider,
207
- _1 = _this$props.activeView,
208
- onTransition = _this$props.onTransition,
209
- window = _this$props.window,
210
- document = _this$props.document,
211
- scroll = _this$props.scroll,
212
- nav = _this$props.nav,
213
- restProps = (0, _objectWithoutProperties2.default)(_this$props, _excluded);
214
- var _this$state = this.state,
215
- transition = _this$state.transition,
216
- isBack = _this$state.isBack,
217
- prevView = _this$state.prevView,
218
- activeView = _this$state.activeView,
219
- nextView = _this$state.nextView;
220
- var Views = React.Children.toArray(this.props.children).filter(function (view) {
221
- return _this3.state.visibleViews.includes((0, _getNavId.getNavId)(view.props, warn));
137
+ }, [transition]); // onTransition
138
+
139
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
140
+ if (!transition && prevView) {
141
+ onTransition && onTransition({
142
+ isBack: isBack,
143
+ from: prevView,
144
+ to: activeView
222
145
  });
223
- var baseClassName = (0, _getClassName.getClassName)('Root', platform);
224
- var disableAnimation = this.shouldDisableTransitionMotion();
225
- return (0, _jsxRuntime.createScopedElement)("div", (0, _extends2.default)({}, restProps, {
226
- vkuiClass: (0, _classNames.classNames)(baseClassName, {
227
- 'Root--transition': !disableAnimation && transition,
228
- 'Root--no-motion': disableAnimation
229
- })
230
- }), Views.map(function (view) {
231
- var viewId = (0, _getNavId.getNavId)(view.props, warn);
232
- return (0, _jsxRuntime.createScopedElement)("div", {
233
- key: viewId,
234
- ref: function ref(e) {
235
- return _this3.viewNodes[viewId] = e;
236
- },
237
- vkuiClass: (0, _classNames.classNames)('Root__view', {
238
- 'Root__view--hide-back': viewId === prevView && isBack,
239
- 'Root__view--hide-forward': viewId === prevView && !isBack,
240
- 'Root__view--show-back': viewId === nextView && isBack,
241
- 'Root__view--show-forward': viewId === nextView && !isBack,
242
- 'Root__view--active': viewId === activeView
243
- })
244
- }, view);
245
- }), (0, _jsxRuntime.createScopedElement)(_AppRootPortal.AppRootPortal, null, !!popout && (0, _jsxRuntime.createScopedElement)("div", {
246
- vkuiClass: "Root__popout"
247
- }, popout), !!modal && (0, _jsxRuntime.createScopedElement)("div", {
248
- vkuiClass: "Root__modal"
249
- }, modal)));
250
146
  }
251
- }]);
252
- return Root;
253
- }(React.Component);
147
+ }, [transition]);
148
+ var fallbackTransition = (0, _useTimeout.useTimeout)(finishTransition, platform === _platform.IOS ? 600 : 300);
149
+ React.useEffect(function () {
150
+ if (!transition) {
151
+ fallbackTransition.clear();
152
+ return;
153
+ }
254
154
 
255
- (0, _defineProperty2.default)(Root, "defaultProps", {
256
- popout: null
257
- });
155
+ disableAnimation ? finishTransition() : fallbackTransition.set();
156
+ }, [transition]);
258
157
 
259
- var _default = (0, _withContext.withContext)((0, _withContext.withContext)((0, _withContext.withContext)((0, _withPlatform.withPlatform)((0, _dom.withDOM)(Root)), _SplitCol.SplitColContext, 'splitCol'), _ConfigProviderContext.ConfigProviderContext, 'configProvider'), _ScrollContext.ScrollContext, 'scroll');
158
+ var onAnimationEnd = function onAnimationEnd(e) {
159
+ if (['vkui-root-android-animation-hide-back', 'vkui-root-android-animation-show-forward', 'vkui-root-ios-animation-hide-back', 'vkui-root-ios-animation-show-forward'].includes(e.animationName)) {
160
+ finishTransition();
161
+ }
162
+ };
163
+
164
+ return (0, _jsxRuntime.createScopedElement)("div", (0, _extends2.default)({}, restProps, {
165
+ vkuiClass: (0, _classNames.classNames)((0, _getClassName.getClassName)('Root', platform), {
166
+ 'Root--transition': !disableAnimation && transition,
167
+ 'Root--no-motion': disableAnimation
168
+ })
169
+ }), views.map(function (view) {
170
+ var viewId = (0, _getNavId.getNavId)(view.props, warn);
171
+
172
+ if (viewId !== activeView && !(transition && viewId === prevView)) {
173
+ return null;
174
+ }
260
175
 
176
+ var isTransitionTarget = transition && viewId === (isBack ? prevView : activeView);
177
+ return (0, _jsxRuntime.createScopedElement)("div", {
178
+ key: viewId,
179
+ ref: function ref(e) {
180
+ return viewNodes[viewId] = e;
181
+ },
182
+ onAnimationEnd: isTransitionTarget ? onAnimationEnd : null,
183
+ vkuiClass: (0, _classNames.classNames)('Root__view', {
184
+ 'Root__view--hide-back': transition && viewId === prevView && isBack,
185
+ 'Root__view--hide-forward': transition && viewId === prevView && !isBack,
186
+ 'Root__view--show-back': transition && viewId === activeView && isBack,
187
+ 'Root__view--show-forward': transition && viewId === activeView && !isBack,
188
+ 'Root__view--active': !transition && viewId === activeView
189
+ })
190
+ }, view);
191
+ }), (0, _jsxRuntime.createScopedElement)(_AppRootPortal.AppRootPortal, null, !!popout && (0, _jsxRuntime.createScopedElement)("div", {
192
+ vkuiClass: "Root__popout"
193
+ }, popout), !!modal && (0, _jsxRuntime.createScopedElement)("div", {
194
+ vkuiClass: "Root__modal"
195
+ }, modal)));
196
+ };
197
+
198
+ var _default = Root;
261
199
  exports.default = _default;
200
+
201
+ function setPanelScroll(e, scroll) {
202
+ // eslint-disable-next-line no-restricted-properties
203
+ var pan = e.querySelector('[data-vkui-active-panel=true]');
204
+ pan && (pan.scrollTop = scroll);
205
+ }
262
206
  //# sourceMappingURL=Root.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Root/Root.tsx"],"names":["warn","Root","props","e","includes","animationName","isBack","state","prevView","nextView","setState","activeView","visibleViews","transition","undefined","scroll","scrollTo","scrolls","onTransition","from","to","document","prevProps","prevState","popout","blurActiveElement","pageYOffset","getScroll","y","firstLayerId","concat","children","map","view","find","id","prevViewElement","viewNodes","nextViewElement","setPanelScroll","pan","querySelector","scrollTop","waitAnimationFinish","onAnimationEnd","configProvider","transitionMotionEnabled","splitCol","animate","elem","eventHandler","shouldDisableTransitionMotion","animationEvent","supported","removeEventListener","name","addEventListener","clearTimeout","animationFinishTimeout","setTimeout","bind","platform","ANDROID","VKCOM","canUseDOM","activeElement","blur","modal","_1","window","nav","restProps","Views","React","Children","toArray","filter","baseClassName","disableAnimation","viewId","Component","SplitColContext","ConfigProviderContext","ScrollContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;AAGA,IAAMA,IAAI,GAAG,wBAAS,MAAT,CAAb;;IA6CMC,I;;;;;AACJ,gBAAYC,KAAZ,EAA8B;AAAA;;AAAA;AAC5B,8BAAMA,KAAN;AAD4B;AAAA,4FAmBqB,EAnBrB;AAAA,iGAgGS,UAACC,CAAD,EAAwB;AAC7D,UAAI,CAACA,CAAD,IAAM,CACR,uCADQ,EAER,0CAFQ,EAGR,mCAHQ,EAIR,sCAJQ,EAKRC,QALQ,CAKCD,CAAC,CAACE,aALH,CAAV,EAK6B;AAC3B,YAAMC,MAAM,GAAG,MAAKC,KAAL,CAAWD,MAA1B;AACA,YAAME,QAAQ,GAAG,MAAKD,KAAL,CAAWC,QAA5B;AACA,YAAMC,QAAQ,GAAG,MAAKF,KAAL,CAAWE,QAA5B;;AACA,cAAKC,QAAL,CAAc;AACZC,UAAAA,UAAU,EAAEF,QADA;AAEZD,UAAAA,QAAQ,EAAE,IAFE;AAGZC,UAAAA,QAAQ,EAAE,IAHE;AAIZG,UAAAA,YAAY,EAAE,CAACH,QAAD,CAJF;AAKZI,UAAAA,UAAU,EAAE,KALA;AAMZP,UAAAA,MAAM,EAAEQ;AANI,SAAd,EAOG,YAAM;AACP,gBAAKZ,KAAL,CAAWa,MAAX,CAAkBC,QAAlB,CAA2B,CAA3B,EAA8BV,MAAM,GAAG,MAAKC,KAAL,CAAWU,OAAX,CAAmB,MAAKV,KAAL,CAAWI,UAA9B,CAAH,GAA+C,CAAnF;;AACA,gBAAKT,KAAL,CAAWgB,YAAX,IAA2B,MAAKhB,KAAL,CAAWgB,YAAX,CAAwB;AAAEZ,YAAAA,MAAM,EAANA,MAAF;AAAUa,YAAAA,IAAI,EAAEX,QAAhB;AAA0BY,YAAAA,EAAE,EAAEX;AAA9B,WAAxB,CAA3B;AACD,SAVD;AAWD;AACF,KAtH6B;AAG5B,UAAKF,KAAL,GAAa;AACXI,MAAAA,UAAU,EAAET,KAAK,CAACS,UADP;AAEXH,MAAAA,QAAQ,EAAE,IAFC;AAGXC,MAAAA,QAAQ,EAAE,IAHC;AAIXG,MAAAA,YAAY,EAAE,CAACV,KAAK,CAACS,UAAP,CAJH;AAKXL,MAAAA,MAAM,EAAEQ,SALG;AAMXG,MAAAA,OAAO,EAAE,EANE;AAOXJ,MAAAA,UAAU,EAAE;AAPD,KAAb;AAH4B;AAY7B;;;;SASD,eAAe;AACb,aAAO,KAAKX,KAAL,CAAWmB,QAAlB;AACD;;;WAED,4BAAmBC,SAAnB,EAAyCC,SAAzC,EAA+D;AAAA;;AAC7D,UAAI,KAAKrB,KAAL,CAAWsB,MAAX,IAAqB,CAACF,SAAS,CAACE,MAApC,EAA4C;AAC1C,aAAKC,iBAAL;AACD,OAH4D,CAK7D;;;AACA,UAAI,KAAKvB,KAAL,CAAWS,UAAX,KAA0BW,SAAS,CAACX,UAAxC,EAAoD;AAClD,YAAIe,WAAW,GAAG,KAAKxB,KAAL,CAAWa,MAAX,CAAkBY,SAAlB,GAA8BC,CAAhD;AACA,YAAMC,YAAY,GAAG,GAAGC,MAAH,CAAUR,SAAS,CAACS,QAApB,EAClBC,GADkB,CACd,UAACC,IAAD;AAAA,iBAAU,wBAASA,IAAI,CAAC/B,KAAd,EAAqBF,IAArB,CAAV;AAAA,SADc,EAElBkC,IAFkB,CAEb,UAACC,EAAD;AAAA,iBAAQA,EAAE,KAAKb,SAAS,CAACX,UAAjB,IAA+BwB,EAAE,KAAK,MAAI,CAACjC,KAAL,CAAWS,UAAzD;AAAA,SAFa,CAArB;AAGA,YAAML,MAAM,GAAGuB,YAAY,KAAK,KAAK3B,KAAL,CAAWS,UAA3C;AAEA,aAAKc,iBAAL;AAEA,YAAMhB,QAAQ,GAAG,KAAKP,KAAL,CAAWS,UAA5B;AACA,YAAMH,QAAQ,GAAGc,SAAS,CAACX,UAA3B;AAEA,aAAKD,QAAL,CAAc;AACZO,UAAAA,OAAO,8DACF,KAAKV,KAAL,CAAWU,OADT,yCAEJK,SAAS,CAACX,UAFN,EAEmBe,WAFnB,EADK;AAKZb,UAAAA,UAAU,EAAE,IALA;AAMZF,UAAAA,UAAU,EAAE,IANA;AAOZF,UAAAA,QAAQ,EAARA,QAPY;AAQZD,UAAAA,QAAQ,EAARA,QARY;AASZI,UAAAA,YAAY,EAAE,CAACH,QAAD,EAAWD,QAAX,CATF;AAUZF,UAAAA,MAAM,EAANA;AAVY,SAAd;AAYD,OA9B4D,CAgC7D;;;AACA,UAAI,CAACiB,SAAS,CAACV,UAAX,IAAyB,KAAKN,KAAL,CAAWM,UAAxC,EAAoD;AAClD,YAAMuB,eAAe,GAAG,KAAKC,SAAL,CAAe,KAAK9B,KAAL,CAAWC,QAA1B,CAAxB;AACA,YAAM8B,eAAe,GAAG,KAAKD,SAAL,CAAe,KAAK9B,KAAL,CAAWE,QAA1B,CAAxB;;AACA,YAAM8B,cAAc,GAAG,SAAjBA,cAAiB,CAACpC,CAAD,EAAiBY,MAAjB,EAAoC;AACzD;AACA,cAAMyB,GAAuB,GAAGrC,CAAC,CAACsC,aAAF,CAAgB,+BAAhB,CAAhC;AACAD,UAAAA,GAAG,KAAKA,GAAG,CAACE,SAAJ,GAAgB3B,MAArB,CAAH;AACD,SAJD;;AAMAwB,QAAAA,cAAc,CAACH,eAAD,EAAkB,KAAK7B,KAAL,CAAWU,OAAX,CAAmB,KAAKV,KAAL,CAAWC,QAA9B,CAAlB,CAAd;;AAEA,YAAI,KAAKD,KAAL,CAAWD,MAAf,EAAuB;AACrBiC,UAAAA,cAAc,CAACD,eAAD,EAAkB,KAAK/B,KAAL,CAAWU,OAAX,CAAmB,KAAKV,KAAL,CAAWE,QAA9B,CAAlB,CAAd;AACD;;AACD,aAAKkC,mBAAL,CAAyB,KAAKpC,KAAL,CAAWD,MAAX,GAAoB8B,eAApB,GAAsCE,eAA/D,EAAgF,KAAKM,cAArF;AACD;AACF;;;WAED,yCAAyC;AACvC,aAAO,KAAK1C,KAAL,CAAW2C,cAAX,CAA0BC,uBAA1B,KAAsD,KAAtD,IACL,CAAC,KAAK5C,KAAL,CAAW6C,QAAX,CAAoBC,OADvB;AAED;;;WAED,6BAAoBC,IAApB,EAAuCC,YAAvC,EAA2E;AACzE,UAAI,KAAKC,6BAAL,EAAJ,EAA0C;AACxCD,QAAAA,YAAY;AACZ;AACD;;AAED,UAAIE,8BAAeC,SAAnB,EAA8B;AAC5BJ,QAAAA,IAAI,CAACK,mBAAL,CAAyBF,8BAAeG,IAAxC,EAA8CL,YAA9C;AACAD,QAAAA,IAAI,CAACO,gBAAL,CAAsBJ,8BAAeG,IAArC,EAA2CL,YAA3C;AACD,OAHD,MAGO;AACLO,QAAAA,YAAY,CAAC,KAAKC,sBAAN,CAAZ;AACA,aAAKA,sBAAL,GAA8BC,UAAU,CAACT,YAAY,CAACU,IAAb,CAAkB,IAAlB,CAAD,EAA0B,KAAK1D,KAAL,CAAW2D,QAAX,KAAwBC,iBAAxB,IAAmC,KAAK5D,KAAL,CAAW2D,QAAX,KAAwBE,eAA3D,GAAmE,GAAnE,GAAyE,GAAnG,CAAxC;AACD;AACF;;;WA0BD,6BAAoB;AAClB,UAAIC,kBAAa,KAAK3C,QAAL,CAAc4C,aAA/B,EAA8C;AAC3C,aAAK5C,QAAL,CAAc4C,aAAf,CAA6CC,IAA7C;AACD;AACF;;;WAED,kBAAS;AAAA;;AACP,wBAKI,KAAKhE,KALT;AAAA,UACEsB,MADF,eACEA,MADF;AAAA,UACU2C,KADV,eACUA,KADV;AAAA,UACiBN,QADjB,eACiBA,QADjB;AAAA,UAEEd,QAFF,eAEEA,QAFF;AAAA,UAEYF,cAFZ,eAEYA,cAFZ;AAAA,UAEwCuB,EAFxC,eAE4BzD,UAF5B;AAAA,UAE4CO,YAF5C,eAE4CA,YAF5C;AAAA,UAGEmD,MAHF,eAGEA,MAHF;AAAA,UAGUhD,QAHV,eAGUA,QAHV;AAAA,UAGoBN,MAHpB,eAGoBA,MAHpB;AAAA,UAG4BuD,GAH5B,eAG4BA,GAH5B;AAAA,UAIKC,SAJL;AAMA,wBAA+D,KAAKhE,KAApE;AAAA,UAAQM,UAAR,eAAQA,UAAR;AAAA,UAAoBP,MAApB,eAAoBA,MAApB;AAAA,UAA4BE,QAA5B,eAA4BA,QAA5B;AAAA,UAAsCG,UAAtC,eAAsCA,UAAtC;AAAA,UAAkDF,QAAlD,eAAkDA,QAAlD;AAEA,UAAM+D,KAAK,GAAGC,KAAK,CAACC,QAAN,CAAeC,OAAf,CAAuB,KAAKzE,KAAL,CAAW6B,QAAlC,EAA4C6C,MAA5C,CAAmD,UAAC3C,IAAD,EAA8B;AAC7F,eAAO,MAAI,CAAC1B,KAAL,CAAWK,YAAX,CAAwBR,QAAxB,CAAiC,wBAAS6B,IAAI,CAAC/B,KAAd,EAAqBF,IAArB,CAAjC,CAAP;AACD,OAFa,CAAd;AAIA,UAAM6E,aAAa,GAAG,gCAAa,MAAb,EAAqBhB,QAArB,CAAtB;AACA,UAAMiB,gBAAgB,GAAG,KAAK3B,6BAAL,EAAzB;AAEA,aACE,uEAASoB,SAAT;AAAoB,QAAA,SAAS,EAAE,4BAAWM,aAAX,EAA0B;AACvD,8BAAoB,CAACC,gBAAD,IAAqBjE,UADc;AAEvD,6BAAmBiE;AAFoC,SAA1B;AAA/B,UAIGN,KAAK,CAACxC,GAAN,CAAU,UAACC,IAAD,EAA8B;AACvC,YAAM8C,MAAM,GAAG,wBAAS9C,IAAI,CAAC/B,KAAd,EAAqBF,IAArB,CAAf;AACA,eACE;AAAK,UAAA,GAAG,EAAE+E,MAAV;AAAkB,UAAA,GAAG,EAAE,aAAC5E,CAAD;AAAA,mBAAO,MAAI,CAACkC,SAAL,CAAe0C,MAAf,IAAyB5E,CAAhC;AAAA,WAAvB;AAA0D,UAAA,SAAS,EAAE,4BAAW,YAAX,EAAyB;AAC5F,qCAAyB4E,MAAM,KAAKvE,QAAX,IAAuBF,MAD4C;AAE5F,wCAA4ByE,MAAM,KAAKvE,QAAX,IAAuB,CAACF,MAFwC;AAG5F,qCAAyByE,MAAM,KAAKtE,QAAX,IAAuBH,MAH4C;AAI5F,wCAA4ByE,MAAM,KAAKtE,QAAX,IAAuB,CAACH,MAJwC;AAK5F,kCAAsByE,MAAM,KAAKpE;AAL2D,WAAzB;AAArE,WAOGsB,IAPH,CADF;AAWD,OAbA,CAJH,EAkBE,qCAAC,4BAAD,QACG,CAAC,CAACT,MAAF,IAAY;AAAK,QAAA,SAAS,EAAC;AAAf,SAA+BA,MAA/B,CADf,EAEG,CAAC,CAAC2C,KAAF,IAAW;AAAK,QAAA,SAAS,EAAC;AAAf,SAA8BA,KAA9B,CAFd,CAlBF,CADF;AAyBD;;;EAxKgBM,KAAK,CAACO,S;;8BAAnB/E,I,kBAesC;AACxCuB,EAAAA,MAAM,EAAE;AADgC,C;;eA4J7B,8BAAY,8BAAY,8BACrC,gCAAa,kBAAmBvB,IAAnB,CAAb,CADqC,EAErCgF,yBAFqC,EAGrC,UAHqC,CAAZ,EAIxBC,4CAJwB,EAID,gBAJC,CAAZ,EAI8BC,4BAJ9B,EAI6C,QAJ7C,C","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { animationEvent } from '../../lib/supportEvents';\nimport { ANDROID, VKCOM } from '../../lib/platform';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { withContext } from '../../hoc/withContext';\nimport { HasPlatform } from '../../types';\nimport { ConfigProviderContext, ConfigProviderContextInterface } from '../ConfigProvider/ConfigProviderContext';\nimport { SplitColContextProps, SplitColContext } from '../SplitCol/SplitCol';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { canUseDOM, DOMProps, withDOM } from '../../lib/dom';\nimport { ScrollContext, ScrollContextInterface } from '../AppRoot/ScrollContext';\nimport { getNavId, NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport './Root.css';\n\nconst warn = warnOnce('Root');\n\nexport interface RootProps extends React.HTMLAttributes<HTMLDivElement>, HasPlatform, NavIdProps {\n activeView: string;\n onTransition?(params: { isBack: boolean; from: string; to: string }): void;\n /**\n * @deprecated будет удалено в 5.0.0. Используйте одноименное свойство у `SplitLayout`.\n *\n * Свойство для отрисовки `Alert`, `ActionSheet` и `ScreenSpinner`.\n */\n popout?: React.ReactNode;\n /**\n * @deprecated будет удалено в 5.0.0. Используйте одноименное свойство у `SplitLayout`.\n *\n * Свойство для отрисовки `ModalRoot`.\n */\n modal?: React.ReactNode;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps;\n /**\n * @ignore\n */\n configProvider?: ConfigProviderContextInterface;\n /**\n * @ignore\n */\n scroll?: ScrollContextInterface;\n}\n\nexport type AnimationEndCallback = (e?: AnimationEvent) => void;\n\nexport interface RootState {\n activeView: string;\n prevView: string;\n nextView: string;\n visibleViews: [string] | [string, string];\n isBack: boolean;\n scrolls: {\n [index: string]: number;\n };\n transition: boolean;\n}\n\nclass Root extends React.Component<RootProps & DOMProps, RootState> {\n constructor(props: RootProps) {\n super(props);\n\n this.state = {\n activeView: props.activeView,\n prevView: null,\n nextView: null,\n visibleViews: [props.activeView],\n isBack: undefined,\n scrolls: {},\n transition: false,\n };\n }\n\n static defaultProps: Partial<RootProps> = {\n popout: null,\n };\n\n private animationFinishTimeout: ReturnType<typeof setTimeout>;\n private viewNodes: { [id: string]: HTMLElement } = {};\n\n get document() {\n return this.props.document;\n }\n\n componentDidUpdate(prevProps: RootProps, prevState: RootState) {\n if (this.props.popout && !prevProps.popout) {\n this.blurActiveElement();\n }\n\n // Нужен переход\n if (this.props.activeView !== prevProps.activeView) {\n let pageYOffset = this.props.scroll.getScroll().y;\n const firstLayerId = [].concat(prevProps.children)\n .map((view) => getNavId(view.props, warn))\n .find((id) => id === prevProps.activeView || id === this.props.activeView);\n const isBack = firstLayerId === this.props.activeView;\n\n this.blurActiveElement();\n\n const nextView = this.props.activeView;\n const prevView = prevProps.activeView;\n\n this.setState({\n scrolls: {\n ...this.state.scrolls,\n [prevProps.activeView]: pageYOffset,\n },\n transition: true,\n activeView: null,\n nextView,\n prevView,\n visibleViews: [nextView, prevView],\n isBack,\n });\n }\n\n // Начался переход\n if (!prevState.transition && this.state.transition) {\n const prevViewElement = this.viewNodes[this.state.prevView];\n const nextViewElement = this.viewNodes[this.state.nextView];\n const setPanelScroll = (e: HTMLElement, scroll: number) => {\n // eslint-disable-next-line no-restricted-properties\n const pan: HTMLElement | null = e.querySelector('[data-vkui-active-panel=true]');\n pan && (pan.scrollTop = scroll);\n };\n\n setPanelScroll(prevViewElement, this.state.scrolls[this.state.prevView]);\n\n if (this.state.isBack) {\n setPanelScroll(nextViewElement, this.state.scrolls[this.state.nextView]);\n }\n this.waitAnimationFinish(this.state.isBack ? prevViewElement : nextViewElement, this.onAnimationEnd);\n }\n }\n\n shouldDisableTransitionMotion(): boolean {\n return this.props.configProvider.transitionMotionEnabled === false ||\n !this.props.splitCol.animate;\n }\n\n waitAnimationFinish(elem: HTMLElement, eventHandler: AnimationEndCallback) {\n if (this.shouldDisableTransitionMotion()) {\n eventHandler();\n return;\n }\n\n if (animationEvent.supported) {\n elem.removeEventListener(animationEvent.name, eventHandler);\n elem.addEventListener(animationEvent.name, eventHandler);\n } else {\n clearTimeout(this.animationFinishTimeout);\n this.animationFinishTimeout = setTimeout(eventHandler.bind(this), this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);\n }\n }\n\n onAnimationEnd: AnimationEndCallback = (e?: AnimationEvent) => {\n if (!e || [\n 'vkui-root-android-animation-hide-back',\n 'vkui-root-android-animation-show-forward',\n 'vkui-root-ios-animation-hide-back',\n 'vkui-root-ios-animation-show-forward',\n ].includes(e.animationName)) {\n const isBack = this.state.isBack;\n const prevView = this.state.prevView;\n const nextView = this.state.nextView;\n this.setState({\n activeView: nextView,\n prevView: null,\n nextView: null,\n visibleViews: [nextView],\n transition: false,\n isBack: undefined,\n }, () => {\n this.props.scroll.scrollTo(0, isBack ? this.state.scrolls[this.state.activeView] : 0);\n this.props.onTransition && this.props.onTransition({ isBack, from: prevView, to: nextView });\n });\n }\n };\n\n blurActiveElement() {\n if (canUseDOM && this.document.activeElement) {\n (this.document.activeElement as HTMLElement).blur();\n }\n }\n\n render() {\n const {\n popout, modal, platform,\n splitCol, configProvider, activeView: _1, onTransition,\n window, document, scroll, nav,\n ...restProps\n } = this.props;\n const { transition, isBack, prevView, activeView, nextView } = this.state;\n\n const Views = React.Children.toArray(this.props.children).filter((view: React.ReactElement) => {\n return this.state.visibleViews.includes(getNavId(view.props, warn));\n });\n\n const baseClassName = getClassName('Root', platform);\n const disableAnimation = this.shouldDisableTransitionMotion();\n\n return (\n <div {...restProps} vkuiClass={classNames(baseClassName, {\n 'Root--transition': !disableAnimation && transition,\n 'Root--no-motion': disableAnimation,\n })}>\n {Views.map((view: React.ReactElement) => {\n const viewId = getNavId(view.props, warn);\n return (\n <div key={viewId} ref={(e) => this.viewNodes[viewId] = e} vkuiClass={classNames('Root__view', {\n 'Root__view--hide-back': viewId === prevView && isBack,\n 'Root__view--hide-forward': viewId === prevView && !isBack,\n 'Root__view--show-back': viewId === nextView && isBack,\n 'Root__view--show-forward': viewId === nextView && !isBack,\n 'Root__view--active': viewId === activeView,\n })}>\n {view}\n </div>\n );\n })}\n <AppRootPortal>\n {!!popout && <div vkuiClass=\"Root__popout\">{popout}</div>}\n {!!modal && <div vkuiClass=\"Root__modal\">{modal}</div>}\n </AppRootPortal>\n </div>\n );\n }\n}\n\nexport default withContext(withContext(withContext(\n withPlatform(withDOM<RootProps>(Root)),\n SplitColContext,\n 'splitCol',\n), ConfigProviderContext, 'configProvider'), ScrollContext, 'scroll');\n"],"file":"Root.js"}
1
+ {"version":3,"sources":["../../../../src/components/Root/Root.tsx"],"names":["warn","Root","popout","modal","children","_activeView","activeView","onTransition","nav","restProps","scroll","React","useContext","ScrollContext","platform","document","scrolls","useRef","current","viewNodes","ConfigProviderContext","transitionMotionEnabled","SplitColContext","animate","disableAnimation","views","Children","toArray","useState","transition","prevView","isBack","_setState","transitionTo","panel","viewIds","map","view","props","indexOf","finishTransition","activeElement","blur","getScroll","y","setPanelScroll","scrollTo","from","to","fallbackTransition","IOS","useEffect","clear","set","onAnimationEnd","e","includes","animationName","viewId","isTransitionTarget","pan","querySelector","scrollTop"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;AAGA,IAAMA,IAAI,GAAG,wBAAS,MAAT,CAAb;;AA0BA,IAAMC,IAAyB,GAAG,SAA5BA,IAA4B,OAK5B;AAAA,yBAJJC,MAII;AAAA,MAJJA,MAII,4BAJK,IAIL;AAAA,MAJWC,KAIX,QAJWA,KAIX;AAAA,MAJkBC,QAIlB,QAJkBA,QAIlB;AAAA,MAHQC,WAGR,QAHJC,UAGI;AAAA,MAHqBC,YAGrB,QAHqBA,YAGrB;AAAA,MAFJC,GAEI,QAFJA,GAEI;AAAA,MADDC,SACC;AACJ,MAAMC,MAAM,GAAGC,KAAK,CAACC,UAAN,CAAiBC,4BAAjB,CAAf;AACA,MAAMC,QAAQ,GAAG,+BAAjB;;AACA,gBAAqB,kBAArB;AAAA,MAAQC,QAAR,WAAQA,QAAR;;AACA,MAAMC,OAAO,GAAGL,KAAK,CAACM,MAAN,CAAqC,EAArC,EAAyCC,OAAzD;AACA,MAAMC,SAAS,GAAGR,KAAK,CAACM,MAAN,CAA0C,EAA1C,EAA8CC,OAAhE;;AAEA,0BAA2CP,KAAK,CAACC,UAAN,CAAiBQ,4CAAjB,CAA3C;AAAA,gDAAQC,uBAAR;AAAA,MAAQA,uBAAR,sCAAkC,IAAlC;;AACA,2BAAoBV,KAAK,CAACC,UAAN,CAAiBU,yBAAjB,CAApB;AAAA,MAAQC,OAAR,sBAAQA,OAAR;;AACA,MAAMC,gBAAgB,GAAG,CAACH,uBAAD,IAA4B,CAACE,OAAtD;AAEA,MAAME,KAAK,GAAGd,KAAK,CAACe,QAAN,CAAeC,OAAf,CAAuBvB,QAAvB,CAAd;;AAEA,wBAAkEO,KAAK,CAACiB,QAAN,CAA0B;AAC1FtB,IAAAA,UAAU,EAAED,WAD8E;AAE1FwB,IAAAA,UAAU,EAAE;AAF8E,GAA1B,CAAlE;AAAA;AAAA;AAAA,MAASC,QAAT,qBAASA,QAAT;AAAA,MAAmBxB,UAAnB,qBAAmBA,UAAnB;AAAA,MAA+BuB,UAA/B,qBAA+BA,UAA/B;AAAA,MAA2CE,MAA3C,qBAA2CA,MAA3C;AAAA,MAAqDC,SAArD;;AAIA,MAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAAmB;AACtC,QAAIA,KAAK,KAAK5B,UAAd,EAA0B;AACxB,UAAM6B,OAAO,GAAGV,KAAK,CAACW,GAAN,CAAU,UAACC,IAAD;AAAA,eAAU,wBAASA,IAAI,CAACC,KAAd,EAAqBtC,IAArB,CAAV;AAAA,OAAV,CAAhB;;AACA,UAAM+B,OAAM,GAAGI,OAAO,CAACI,OAAR,CAAgBL,KAAhB,IAAyBC,OAAO,CAACI,OAAR,CAAgBjC,UAAhB,CAAxC;;AACA0B,MAAAA,SAAS,CAAC;AAAE1B,QAAAA,UAAU,EAAE4B,KAAd;AAAqBJ,QAAAA,QAAQ,EAAExB,UAA/B;AAA2CuB,QAAAA,UAAU,EAAE,IAAvD;AAA6DE,QAAAA,MAAM,EAANA;AAA7D,OAAD,CAAT;AACD;AACF,GAND;;AAOA,MAAMS,gBAAgB,GAAG,SAAnBA,gBAAmB;AAAA,WAAMR,SAAS,CAAC;AAAE1B,MAAAA,UAAU,EAAVA,UAAF;AAAcwB,MAAAA,QAAQ,EAARA,QAAd;AAAwBC,MAAAA,MAAM,EAANA,MAAxB;AAAgCF,MAAAA,UAAU,EAAE;AAA5C,KAAD,CAAf;AAAA,GAAzB;;AAEA,4DAA0B,YAAM;AAAA;;AAC9B,6BAACd,QAAQ,CAAC0B,aAAV,gFAAyCC,IAAzC;AACD,GAFD,EAEG,CAAC,CAAC,CAACxC,MAAH,EAAWI,UAAX,CAFH,EA1BI,CA8BJ;;AACA,4DAA0B;AAAA,WAAM2B,YAAY,CAAC5B,WAAD,CAAlB;AAAA,GAA1B,EAA2D,CAACA,WAAD,CAA3D,EA/BI,CAgCJ;;AACA,4DAA0B,YAAM;AAC9B,QAAIwB,UAAJ,EAAgB;AACd;AACAb,MAAAA,OAAO,CAACc,QAAD,CAAP,GAAoBpB,MAAM,CAACiC,SAAP,GAAmBC,CAAvC;AACAC,MAAAA,cAAc,CAAC1B,SAAS,CAACW,QAAD,CAAV,EAAsBd,OAAO,CAACc,QAAD,CAA7B,CAAd;AACAC,MAAAA,MAAM,IAAIc,cAAc,CAAC1B,SAAS,CAACb,UAAD,CAAV,EAAwBU,OAAO,CAACV,UAAD,CAA/B,CAAxB;AACD,KALD,MAKO,IAAIwB,QAAJ,EAAc;AACnB;AACApB,MAAAA,MAAM,CAACoC,QAAP,CAAgB,CAAhB,EAAmBf,MAAM,GAAGf,OAAO,CAACV,UAAD,CAAV,GAAyB,CAAlD;AACD;AACF,GAVD,EAUG,CAACuB,UAAD,CAVH,EAjCI,CA4CJ;;AACA,4DAA0B,YAAM;AAC9B,QAAI,CAACA,UAAD,IAAeC,QAAnB,EAA6B;AAC3BvB,MAAAA,YAAY,IAAIA,YAAY,CAAC;AAAEwB,QAAAA,MAAM,EAANA,MAAF;AAAUgB,QAAAA,IAAI,EAAEjB,QAAhB;AAA0BkB,QAAAA,EAAE,EAAE1C;AAA9B,OAAD,CAA5B;AACD;AACF,GAJD,EAIG,CAACuB,UAAD,CAJH;AAMA,MAAMoB,kBAAkB,GAAG,4BAAWT,gBAAX,EAA6B1B,QAAQ,KAAKoC,aAAb,GAAmB,GAAnB,GAAyB,GAAtD,CAA3B;AACAvC,EAAAA,KAAK,CAACwC,SAAN,CAAgB,YAAM;AACpB,QAAI,CAACtB,UAAL,EAAiB;AACfoB,MAAAA,kBAAkB,CAACG,KAAnB;AACA;AACD;;AACD5B,IAAAA,gBAAgB,GAAGgB,gBAAgB,EAAnB,GAAwBS,kBAAkB,CAACI,GAAnB,EAAxC;AACD,GAND,EAMG,CAACxB,UAAD,CANH;;AAQA,MAAMyB,cAAc,GAAG,SAAjBA,cAAiB,CAACC,CAAD,EAA6B;AAClD,QAAI,CACF,uCADE,EAEF,0CAFE,EAGF,mCAHE,EAIF,sCAJE,EAKFC,QALE,CAKOD,CAAC,CAACE,aALT,CAAJ,EAK6B;AAC3BjB,MAAAA,gBAAgB;AACjB;AACF,GATD;;AAWA,SACE,uEAAS/B,SAAT;AAAoB,IAAA,SAAS,EAAE,4BAAW,gCAAa,MAAb,EAAqBK,QAArB,CAAX,EAA2C;AACxE,0BAAoB,CAACU,gBAAD,IAAqBK,UAD+B;AAExE,yBAAmBL;AAFqD,KAA3C;AAA/B,MAIGC,KAAK,CAACW,GAAN,CAAU,UAACC,IAAD,EAAU;AACnB,QAAMqB,MAAM,GAAG,wBAASrB,IAAI,CAACC,KAAd,EAAqBtC,IAArB,CAAf;;AACA,QAAI0D,MAAM,KAAKpD,UAAX,IAAyB,EAAEuB,UAAU,IAAI6B,MAAM,KAAK5B,QAA3B,CAA7B,EAAmE;AACjE,aAAO,IAAP;AACD;;AACD,QAAM6B,kBAAkB,GAAG9B,UAAU,IAAI6B,MAAM,MAAM3B,MAAM,GAAGD,QAAH,GAAcxB,UAA1B,CAA/C;AACA,WACE;AACE,MAAA,GAAG,EAAEoD,MADP;AAEE,MAAA,GAAG,EAAE,aAACH,CAAD;AAAA,eAAOpC,SAAS,CAACuC,MAAD,CAAT,GAAoBH,CAA3B;AAAA,OAFP;AAGE,MAAA,cAAc,EAAEI,kBAAkB,GAAGL,cAAH,GAAoB,IAHxD;AAIE,MAAA,SAAS,EAAE,4BAAW,YAAX,EAAyB;AAClC,iCAAyBzB,UAAU,IAAI6B,MAAM,KAAK5B,QAAzB,IAAqCC,MAD5B;AAElC,oCAA4BF,UAAU,IAAI6B,MAAM,KAAK5B,QAAzB,IAAqC,CAACC,MAFhC;AAGlC,iCAAyBF,UAAU,IAAI6B,MAAM,KAAKpD,UAAzB,IAAuCyB,MAH9B;AAIlC,oCAA4BF,UAAU,IAAI6B,MAAM,KAAKpD,UAAzB,IAAuC,CAACyB,MAJlC;AAKlC,8BAAsB,CAACF,UAAD,IAAe6B,MAAM,KAAKpD;AALd,OAAzB;AAJb,OAWE+B,IAXF,CADF;AAcD,GApBA,CAJH,EAyBE,qCAAC,4BAAD,QACG,CAAC,CAACnC,MAAF,IAAY;AAAK,IAAA,SAAS,EAAC;AAAf,KAA+BA,MAA/B,CADf,EAEG,CAAC,CAACC,KAAF,IAAW;AAAK,IAAA,SAAS,EAAC;AAAf,KAA8BA,KAA9B,CAFd,CAzBF,CADF;AAgCD,CA5GD;;eA8GeF,I;;;AAEf,SAAS4C,cAAT,CAAwBU,CAAxB,EAAwC7C,MAAxC,EAAwD;AACtD;AACA,MAAMkD,GAAuB,GAAGL,CAAC,CAACM,aAAF,CAAgB,+BAAhB,CAAhC;AACAD,EAAAA,GAAG,KAAKA,GAAG,CAACE,SAAJ,GAAgBpD,MAArB,CAAH;AACD","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { IOS } from '../../lib/platform';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { SplitColContext } from '../SplitCol/SplitCol';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { ScrollContext } from '../AppRoot/ScrollContext';\nimport { getNavId, NavIdProps } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './Root.css';\n\nconst warn = warnOnce('Root');\n\nexport interface RootProps extends React.HTMLAttributes<HTMLDivElement>, NavIdProps {\n activeView: string;\n onTransition?(params: { isBack: boolean; from: string; to: string }): void;\n /**\n * @deprecated будет удалено в 5.0.0. Используйте одноименное свойство у `SplitLayout`.\n *\n * Свойство для отрисовки `Alert`, `ActionSheet` и `ScreenSpinner`.\n */\n popout?: React.ReactNode;\n /**\n * @deprecated будет удалено в 5.0.0. Используйте одноименное свойство у `SplitLayout`.\n *\n * Свойство для отрисовки `ModalRoot`.\n */\n modal?: React.ReactNode;\n}\n\nexport interface RootState {\n activeView: string;\n transition: boolean;\n isBack?: boolean;\n prevView?: string;\n}\n\nconst Root: React.FC<RootProps> = ({\n popout = null, modal, children,\n activeView: _activeView, onTransition,\n nav,\n ...restProps\n}) => {\n const scroll = React.useContext(ScrollContext);\n const platform = usePlatform();\n const { document } = useDOM();\n const scrolls = React.useRef<Record<string, number>>({}).current;\n const viewNodes = React.useRef<Record<string, HTMLElement>>({}).current;\n\n const { transitionMotionEnabled = true } = React.useContext(ConfigProviderContext);\n const { animate } = React.useContext(SplitColContext);\n const disableAnimation = !transitionMotionEnabled || !animate;\n\n const views = React.Children.toArray(children) as React.ReactElement[];\n\n const [{ prevView, activeView, transition, isBack }, _setState] = React.useState<RootState>({\n activeView: _activeView,\n transition: false,\n });\n const transitionTo = (panel: string) => {\n if (panel !== activeView) {\n const viewIds = views.map((view) => getNavId(view.props, warn));\n const isBack = viewIds.indexOf(panel) < viewIds.indexOf(activeView);\n _setState({ activeView: panel, prevView: activeView, transition: true, isBack });\n }\n };\n const finishTransition = () => _setState({ activeView, prevView, isBack, transition: false });\n\n useIsomorphicLayoutEffect(() => {\n (document.activeElement as HTMLElement)?.blur();\n }, [!!popout, activeView]);\n\n // Нужен переход\n useIsomorphicLayoutEffect(() => transitionTo(_activeView), [_activeView]);\n // scroll restoration\n useIsomorphicLayoutEffect(() => {\n if (transition) {\n // save scroll\n scrolls[prevView] = scroll.getScroll().y;\n setPanelScroll(viewNodes[prevView], scrolls[prevView]);\n isBack && setPanelScroll(viewNodes[activeView], scrolls[activeView]);\n } else if (prevView) {\n // Закончился переход\n scroll.scrollTo(0, isBack ? scrolls[activeView] : 0);\n }\n }, [transition]);\n // onTransition\n useIsomorphicLayoutEffect(() => {\n if (!transition && prevView) {\n onTransition && onTransition({ isBack, from: prevView, to: activeView });\n }\n }, [transition]);\n\n const fallbackTransition = useTimeout(finishTransition, platform === IOS ? 600 : 300);\n React.useEffect(() => {\n if (!transition) {\n fallbackTransition.clear();\n return;\n }\n disableAnimation ? finishTransition() : fallbackTransition.set();\n }, [transition]);\n\n const onAnimationEnd = (e: React.AnimationEvent) => {\n if ([\n 'vkui-root-android-animation-hide-back',\n 'vkui-root-android-animation-show-forward',\n 'vkui-root-ios-animation-hide-back',\n 'vkui-root-ios-animation-show-forward',\n ].includes(e.animationName)) {\n finishTransition();\n }\n };\n\n return (\n <div {...restProps} vkuiClass={classNames(getClassName('Root', platform), {\n 'Root--transition': !disableAnimation && transition,\n 'Root--no-motion': disableAnimation,\n })}>\n {views.map((view) => {\n const viewId = getNavId(view.props, warn);\n if (viewId !== activeView && !(transition && viewId === prevView)) {\n return null;\n }\n const isTransitionTarget = transition && viewId === (isBack ? prevView : activeView);\n return (\n <div\n key={viewId}\n ref={(e) => viewNodes[viewId] = e}\n onAnimationEnd={isTransitionTarget ? onAnimationEnd : null}\n vkuiClass={classNames('Root__view', {\n 'Root__view--hide-back': transition && viewId === prevView && isBack,\n 'Root__view--hide-forward': transition && viewId === prevView && !isBack,\n 'Root__view--show-back': transition && viewId === activeView && isBack,\n 'Root__view--show-forward': transition && viewId === activeView && !isBack,\n 'Root__view--active': !transition && viewId === activeView,\n })}\n >{view}</div>\n );\n })}\n <AppRootPortal>\n {!!popout && <div vkuiClass=\"Root__popout\">{popout}</div>}\n {!!modal && <div vkuiClass=\"Root__modal\">{modal}</div>}\n </AppRootPortal>\n </div>\n );\n};\n\nexport default Root;\n\nfunction setPanelScroll(e: HTMLElement, scroll: number) {\n // eslint-disable-next-line no-restricted-properties\n const pan: HTMLElement | null = e.querySelector('[data-vkui-active-panel=true]');\n pan && (pan.scrollTop = scroll);\n}\n"],"file":"Root.js"}
@@ -29,7 +29,7 @@ var _icons = require("@vkontakte/icons");
29
29
 
30
30
  var _platform = require("../../lib/platform");
31
31
 
32
- var _Touch = _interopRequireDefault(require("../Touch/Touch"));
32
+ var _Touch = require("../Touch/Touch");
33
33
 
34
34
  var _utils = require("../../lib/utils");
35
35
 
@@ -144,10 +144,10 @@ var Search = function Search(_ref) {
144
144
  onClick: onCancel
145
145
  }, (0, _jsxRuntime.createScopedElement)("div", {
146
146
  vkuiClass: "Search__icons"
147
- }, icon && (0, _jsxRuntime.createScopedElement)(_Touch.default, {
147
+ }, icon && (0, _jsxRuntime.createScopedElement)(_Touch.Touch, {
148
148
  onStart: onIconClickStart,
149
149
  vkuiClass: "Search__icon"
150
- }, icon), !!value && (0, _jsxRuntime.createScopedElement)(_Touch.default, {
150
+ }, icon), !!value && (0, _jsxRuntime.createScopedElement)(_Touch.Touch, {
151
151
  onStart: onIconCancelClickStart,
152
152
  vkuiClass: "Search__icon"
153
153
  }, platform === _platform.VKCOM ? (0, _jsxRuntime.createScopedElement)(_icons.Icon24Cancel, null) : (0, _jsxRuntime.createScopedElement)(_icons.Icon16Clear, null))), platform === _platform.IOS && after && (0, _jsxRuntime.createScopedElement)("div", {