@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,318 +1,195 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
2
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
4
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
- import _createClass from "@babel/runtime/helpers/createClass";
6
- import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
7
- import _inherits from "@babel/runtime/helpers/inherits";
8
- import _createSuper from "@babel/runtime/helpers/createSuper";
9
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
10
- var _excluded = ["onStart", "onStartX", "onStartY", "onMove", "onMoveX", "onMoveY", "onLeave", "onEnter", "onEnd", "onEndX", "onEndY", "useCapture", "Component", "getRootRef", "noSlideClick", "window", "document"];
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
+ var _excluded = ["onStart", "onStartX", "onStartY", "onMove", "onMoveX", "onMoveY", "onLeave", "onEnter", "onEnd", "onEndX", "onEndY", "onClickCapture", "useCapture", "Component", "getRootRef", "noSlideClick"];
11
5
  import { createScopedElement } from "../../lib/jsxRuntime";
12
6
  import * as React from 'react';
13
7
  import { getSupportedEvents, coordX, coordY, touchEnabled } from "../../lib/touch";
14
- import { canUseDOM, withDOM } from "../../lib/dom";
15
- import { setRef, noop } from "../../lib/utils";
16
- var events = getSupportedEvents();
17
-
18
- var Touch = /*#__PURE__*/function (_React$Component) {
19
- _inherits(Touch, _React$Component);
20
-
21
- var _super = _createSuper(Touch);
22
-
23
- function Touch() {
24
- var _this;
25
-
26
- _classCallCheck(this, Touch);
27
-
28
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
29
- args[_key] = arguments[_key];
30
- }
31
-
32
- _this = _super.call.apply(_super, [this].concat(args));
33
-
34
- _defineProperty(_assertThisInitialized(_this), "didSlide", false);
35
-
36
- _defineProperty(_assertThisInitialized(_this), "gesture", {});
37
-
38
- _defineProperty(_assertThisInitialized(_this), "container", void 0);
39
-
40
- _defineProperty(_assertThisInitialized(_this), "onEnter", function (e) {
41
- if (_this.props.onEnter) {
42
- _this.props.onEnter(e);
43
- }
44
- });
45
-
46
- _defineProperty(_assertThisInitialized(_this), "onLeave", function (e) {
47
- if (_this.props.onLeave) {
48
- _this.props.onLeave(e);
49
- }
50
- });
51
-
52
- _defineProperty(_assertThisInitialized(_this), "onStart", function (e) {
53
- _this.gesture = {
54
- startX: coordX(e),
55
- startY: coordY(e),
56
- startT: new Date(),
57
- isPressed: true
58
- }; // Вызываем нужные колбеки из props
59
-
60
- var outputEvent = _objectSpread(_objectSpread({}, _this.gesture), {}, {
8
+ import { useDOM } from "../../lib/dom";
9
+ import { useExternRef } from "../../hooks/useExternRef";
10
+ import { useEventListener } from "../../hooks/useEventListener";
11
+ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
12
+ export var Touch = function Touch(_ref) {
13
+ var onStart = _ref.onStart,
14
+ onStartX = _ref.onStartX,
15
+ onStartY = _ref.onStartY,
16
+ _onMove = _ref.onMove,
17
+ onMoveX = _ref.onMoveX,
18
+ onMoveY = _ref.onMoveY,
19
+ onLeave = _ref.onLeave,
20
+ onEnter = _ref.onEnter,
21
+ _onEnd = _ref.onEnd,
22
+ onEndX = _ref.onEndX,
23
+ onEndY = _ref.onEndY,
24
+ onClickCapture = _ref.onClickCapture,
25
+ _ref$useCapture = _ref.useCapture,
26
+ useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture,
27
+ _ref$Component = _ref.Component,
28
+ Component = _ref$Component === void 0 ? 'div' : _ref$Component,
29
+ getRootRef = _ref.getRootRef,
30
+ _ref$noSlideClick = _ref.noSlideClick,
31
+ noSlideClick = _ref$noSlideClick === void 0 ? false : _ref$noSlideClick,
32
+ restProps = _objectWithoutProperties(_ref, _excluded);
33
+
34
+ var _useDOM = useDOM(),
35
+ document = _useDOM.document;
36
+
37
+ var events = React.useMemo(getSupportedEvents, []);
38
+ var didSlide = React.useRef(false);
39
+ var gesture = React.useRef({});
40
+
41
+ var handle = function handle(e, handers) {
42
+ return handers.forEach(function (cb) {
43
+ cb && cb(_objectSpread(_objectSpread({}, gesture.current), {}, {
61
44
  originalEvent: e
62
- });
63
-
64
- if (_this.props.onStart) {
65
- _this.props.onStart(outputEvent);
66
- }
67
-
68
- if (_this.props.onStartX) {
69
- _this.props.onStartX(outputEvent);
70
- }
71
-
72
- if (_this.props.onStartY) {
73
- _this.props.onStartY(outputEvent);
74
- }
75
-
76
- !touchEnabled && _this.subscribe(_this.document);
77
- });
78
-
79
- _defineProperty(_assertThisInitialized(_this), "onMove", function (e) {
80
- var _this$gesture = _this.gesture,
81
- isPressed = _this$gesture.isPressed,
82
- isX = _this$gesture.isX,
83
- isY = _this$gesture.isY,
84
- startX = _this$gesture.startX,
85
- startY = _this$gesture.startY;
86
-
87
- if (isPressed) {
88
- // смещения
89
- var shiftX = coordX(e) - startX;
90
- var shiftY = coordY(e) - startY; // абсолютные значения смещений
91
-
92
- var shiftXAbs = Math.abs(shiftX);
93
- var shiftYAbs = Math.abs(shiftY); // Если определяем мультитач, то прерываем жест
94
-
95
- if (!!e.touches && e.touches.length > 1) {
96
- return _this.onEnd(e);
97
- } // если мы ещё не определились
98
-
99
-
100
- if (!isX && !isY) {
101
- var willBeX = shiftXAbs >= 5 && shiftXAbs > shiftYAbs;
102
- var willBeY = shiftYAbs >= 5 && shiftYAbs > shiftXAbs;
103
- var willBeSlidedX = willBeX && !!_this.props.onMoveX || !!_this.props.onMove;
104
- var willBeSlidedY = willBeY && !!_this.props.onMoveY || !!_this.props.onMove;
105
- _this.gesture.isY = willBeY;
106
- _this.gesture.isX = willBeX;
107
- _this.gesture.isSlideX = willBeSlidedX;
108
- _this.gesture.isSlideY = willBeSlidedY;
109
- _this.gesture.isSlide = willBeSlidedX || willBeSlidedY;
110
- }
111
-
112
- if (_this.gesture.isSlide) {
113
- _this.gesture.shiftX = shiftX;
114
- _this.gesture.shiftY = shiftY;
115
- _this.gesture.shiftXAbs = shiftXAbs;
116
- _this.gesture.shiftYAbs = shiftYAbs; // Вызываем нужные колбеки из props
117
-
118
- var _outputEvent = _objectSpread(_objectSpread({}, _this.gesture), {}, {
119
- originalEvent: e
120
- });
121
-
122
- if (_this.props.onMove) {
123
- _this.props.onMove(_outputEvent);
124
- }
125
-
126
- if (_this.gesture.isSlideX && _this.props.onMoveX) {
127
- _this.props.onMoveX(_outputEvent);
128
- }
129
-
130
- if (_this.gesture.isSlideY && _this.props.onMoveY) {
131
- _this.props.onMoveY(_outputEvent);
132
- }
133
- }
134
- }
45
+ }));
135
46
  });
136
-
137
- _defineProperty(_assertThisInitialized(_this), "onEnd", function (e) {
138
- var _this$gesture2 = _this.gesture,
139
- isPressed = _this$gesture2.isPressed,
140
- isSlide = _this$gesture2.isSlide,
141
- isSlideX = _this$gesture2.isSlideX,
142
- isSlideY = _this$gesture2.isSlideY;
143
-
144
- if (isPressed) {
145
- // Вызываем нужные колбеки из props
146
- var _outputEvent2 = _objectSpread(_objectSpread({}, _this.gesture), {}, {
147
- originalEvent: e
47
+ };
48
+
49
+ var mouseEnterHandler = useEventListener('mouseenter', onEnter);
50
+ var mouseLeaveHandler = useEventListener('mouseleave', onLeave);
51
+ var startHandler = useEventListener(events[0], function (e) {
52
+ gesture.current = {
53
+ startX: coordX(e),
54
+ startY: coordY(e),
55
+ startT: new Date(),
56
+ isPressed: true
57
+ };
58
+ handle(e, [onStart, onStartX, onStartY]);
59
+ !touchEnabled() && subscribe(document);
60
+ }, {
61
+ capture: useCapture,
62
+ passive: false
63
+ });
64
+ var containerRef = useExternRef(getRootRef);
65
+ useIsomorphicLayoutEffect(function () {
66
+ var el = containerRef.current;
67
+ mouseEnterHandler.add(el);
68
+ mouseLeaveHandler.add(el);
69
+ startHandler.add(el);
70
+ touchEnabled() && subscribe(el);
71
+ }, [Component]);
72
+
73
+ function onMove(e) {
74
+ var _gesture$current = gesture.current,
75
+ isPressed = _gesture$current.isPressed,
76
+ isX = _gesture$current.isX,
77
+ isY = _gesture$current.isY,
78
+ startX = _gesture$current.startX,
79
+ startY = _gesture$current.startY;
80
+
81
+ if (isPressed) {
82
+ // смещения
83
+ var shiftX = coordX(e) - startX;
84
+ var shiftY = coordY(e) - startY; // абсолютные значения смещений
85
+
86
+ var shiftXAbs = Math.abs(shiftX);
87
+ var shiftYAbs = Math.abs(shiftY); // Если определяем мультитач, то прерываем жест
88
+
89
+ if (!!e.touches && e.touches.length > 1) {
90
+ return onEnd(e);
91
+ } // если мы ещё не определились
92
+
93
+
94
+ if (!isX && !isY) {
95
+ var willBeX = shiftXAbs >= 5 && shiftXAbs > shiftYAbs;
96
+ var willBeY = shiftYAbs >= 5 && shiftYAbs > shiftXAbs;
97
+ var willBeSlidedX = willBeX && (!!onMoveX || !!_onMove);
98
+ var willBeSlidedY = willBeY && (!!onMoveY || !!_onMove);
99
+ Object.assign(gesture.current, {
100
+ isY: willBeY,
101
+ isX: willBeX,
102
+ isSlideX: willBeSlidedX,
103
+ isSlideY: willBeSlidedY,
104
+ isSlide: willBeSlidedX || willBeSlidedY
148
105
  });
149
-
150
- if (_this.props.onEnd) {
151
- _this.props.onEnd(_outputEvent2);
152
- }
153
-
154
- if (isSlideY && _this.props.onEndY) {
155
- _this.props.onEndY(_outputEvent2);
156
- }
157
-
158
- if (isSlideX && _this.props.onEndX) {
159
- _this.props.onEndX(_outputEvent2);
160
- }
161
106
  }
162
107
 
163
- _this.didSlide = isSlide;
164
- _this.gesture = {}; // Если это был тач-евент, симулируем отмену hover
165
-
166
- if (e.type === 'touchend' || e.type === 'touchcancel') {
167
- _this.onLeave(e);
108
+ if (gesture.current.isSlide) {
109
+ Object.assign(gesture.current, {
110
+ shiftX: shiftX,
111
+ shiftY: shiftY,
112
+ shiftXAbs: shiftXAbs,
113
+ shiftYAbs: shiftYAbs
114
+ });
115
+ handle(e, [_onMove, gesture.current.isSlideX && onMoveX, gesture.current.isSlideY && onMoveY]);
168
116
  }
117
+ }
118
+ }
169
119
 
170
- !touchEnabled && _this.unsubscribe();
171
- });
172
-
173
- _defineProperty(_assertThisInitialized(_this), "unsubscribe", noop);
174
-
175
- _defineProperty(_assertThisInitialized(_this), "onDragStart", function (e) {
176
- var target = e.target;
120
+ function onEnd(e) {
121
+ var _gesture$current2 = gesture.current,
122
+ isPressed = _gesture$current2.isPressed,
123
+ isSlide = _gesture$current2.isSlide,
124
+ isSlideX = _gesture$current2.isSlideX,
125
+ isSlideY = _gesture$current2.isSlideY;
177
126
 
178
- if (target.tagName === 'A' || target.tagName === 'IMG') {
179
- e.preventDefault();
180
- }
181
- });
127
+ if (isPressed) {
128
+ handle(e, [_onEnd, isSlideY && onEndY, isSlideX && onEndX]);
129
+ }
182
130
 
183
- _defineProperty(_assertThisInitialized(_this), "postGestureClick", function (e) {
184
- var _this$props = _this.props,
185
- onClickCapture = _this$props.onClickCapture,
186
- noSlideClick = _this$props.noSlideClick;
131
+ didSlide.current = isSlide;
132
+ gesture.current = {}; // Если это был тач-евент, симулируем отмену hover
187
133
 
188
- if (!_this.didSlide) {
189
- return onClickCapture && onClickCapture(e);
190
- }
134
+ if (e.type === 'touchend' || e.type === 'touchcancel') {
135
+ onLeave && onLeave(e);
136
+ }
191
137
 
192
- if (e.target.tagName === 'A') {
193
- e.preventDefault();
194
- }
138
+ !touchEnabled() && subscribe(null);
139
+ }
195
140
 
196
- if (noSlideClick) {
197
- e.stopPropagation();
198
- } else {
199
- onClickCapture && onClickCapture(e);
200
- }
141
+ var listenerParams = {
142
+ capture: useCapture,
143
+ passive: false
144
+ };
145
+ var listeners = [useEventListener(events[1], onMove, listenerParams), useEventListener(events[2], onEnd, listenerParams), useEventListener(events[3], onEnd, listenerParams)];
201
146
 
202
- _this.didSlide = false;
147
+ function subscribe(el) {
148
+ listeners.forEach(function (l) {
149
+ return l.add(el);
203
150
  });
151
+ }
152
+ /**
153
+ * Обработчик событий dragstart
154
+ * Отменяет нативное браузерное поведение для вложенных ссылок и изображений
155
+ */
204
156
 
205
- _defineProperty(_assertThisInitialized(_this), "getRef", function (container) {
206
- _this.container = container;
207
- setRef(container, _this.props.getRootRef);
208
- });
209
157
 
210
- return _this;
211
- }
158
+ var onDragStart = function onDragStart(e) {
159
+ var target = e.target;
212
160
 
213
- _createClass(Touch, [{
214
- key: "document",
215
- get: function get() {
216
- return this.props.document;
161
+ if (target.tagName === 'A' || target.tagName === 'IMG') {
162
+ e.preventDefault();
217
163
  }
218
- }, {
219
- key: "componentDidMount",
220
- value: function componentDidMount() {
221
- if (canUseDOM) {
222
- this.container.addEventListener(events[0], this.onStart, {
223
- capture: this.props.useCapture,
224
- passive: false
225
- });
226
- touchEnabled && this.subscribe(this.container);
227
- this.container.addEventListener('mouseenter', this.onEnter, {
228
- capture: this.props.useCapture,
229
- passive: true
230
- });
231
- this.container.addEventListener('mouseleave', this.onLeave, {
232
- capture: this.props.useCapture,
233
- passive: true
234
- });
235
- }
236
- }
237
- }, {
238
- key: "componentWillUnmount",
239
- value: function componentWillUnmount() {
240
- this.container.removeEventListener(events[0], this.onStart);
241
- this.unsubscribe();
242
- this.container.removeEventListener('mouseenter', this.onEnter);
243
- this.container.removeEventListener('mouseleave', this.onLeave);
244
- }
245
- /**
246
- * Обработчик событий mouseenter
247
- *
248
- * @param {Object} e Браузерное событие
249
- * @return {void}
250
- */
164
+ };
165
+ /**
166
+ * Обработчик клика по компоненту
167
+ * Отменяет переход по вложенной ссылке, если был зафиксирован свайп
168
+ */
251
169
 
252
- }, {
253
- key: "subscribe",
254
- value: function subscribe(element) {
255
- var _this2 = this;
256
-
257
- this.unsubscribe();
258
- var listenerParams = {
259
- capture: this.props.useCapture,
260
- passive: false
261
- };
262
- element.addEventListener(events[1], this.onMove, listenerParams);
263
- element.addEventListener(events[2], this.onEnd, listenerParams);
264
- element.addEventListener(events[3], this.onEnd, listenerParams);
265
170
 
266
- this.unsubscribe = function () {
267
- // Здесь нужен последний аргумент с такими же параметрами, потому что
268
- // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.
269
- // https://github.com/VKCOM/VKUI/issues/444
270
- element.removeEventListener(events[1], _this2.onMove, listenerParams);
271
- element.removeEventListener(events[2], _this2.onEnd, listenerParams);
272
- element.removeEventListener(events[3], _this2.onEnd, listenerParams);
273
- _this2.unsubscribe = noop;
274
- };
171
+ var postGestureClick = function postGestureClick(e) {
172
+ if (!didSlide.current) {
173
+ return onClickCapture && onClickCapture(e);
275
174
  }
276
- }, {
277
- key: "render",
278
- value: function render() {
279
- var _this$props2 = this.props,
280
- onStart = _this$props2.onStart,
281
- onStartX = _this$props2.onStartX,
282
- onStartY = _this$props2.onStartY,
283
- onMove = _this$props2.onMove,
284
- onMoveX = _this$props2.onMoveX,
285
- onMoveY = _this$props2.onMoveY,
286
- onLeave = _this$props2.onLeave,
287
- onEnter = _this$props2.onEnter,
288
- onEnd = _this$props2.onEnd,
289
- onEndX = _this$props2.onEndX,
290
- onEndY = _this$props2.onEndY,
291
- useCapture = _this$props2.useCapture,
292
- Component = _this$props2.Component,
293
- getRootRef = _this$props2.getRootRef,
294
- noSlideClick = _this$props2.noSlideClick,
295
- window = _this$props2.window,
296
- document = _this$props2.document,
297
- restProps = _objectWithoutProperties(_this$props2, _excluded);
298
175
 
299
- return createScopedElement(Component, _extends({}, restProps, {
300
- onDragStart: this.onDragStart,
301
- onClickCapture: this.postGestureClick,
302
- ref: this.getRef
303
- }), this.props.children);
176
+ if (e.target.tagName === 'A') {
177
+ e.preventDefault();
304
178
  }
305
- }]);
306
179
 
307
- return Touch;
308
- }(React.Component);
180
+ if (noSlideClick) {
181
+ e.stopPropagation();
182
+ } else {
183
+ onClickCapture && onClickCapture(e);
184
+ }
309
185
 
310
- _defineProperty(Touch, "defaultProps", {
311
- Component: 'div',
312
- children: '',
313
- useCapture: false,
314
- noSlideClick: false
315
- });
186
+ didSlide.current = false;
187
+ };
316
188
 
317
- export default withDOM(Touch);
189
+ return createScopedElement(Component, _extends({}, restProps, {
190
+ onDragStart: onDragStart,
191
+ onClickCapture: postGestureClick,
192
+ ref: containerRef
193
+ }));
194
+ };
318
195
  //# sourceMappingURL=Touch.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Touch/Touch.tsx"],"names":["React","getSupportedEvents","coordX","coordY","touchEnabled","canUseDOM","withDOM","setRef","noop","events","Touch","e","props","onEnter","onLeave","gesture","startX","startY","startT","Date","isPressed","outputEvent","originalEvent","onStart","onStartX","onStartY","subscribe","document","isX","isY","shiftX","shiftY","shiftXAbs","Math","abs","shiftYAbs","touches","length","onEnd","willBeX","willBeY","willBeSlidedX","onMoveX","onMove","willBeSlidedY","onMoveY","isSlideX","isSlideY","isSlide","onEndY","onEndX","didSlide","type","unsubscribe","target","tagName","preventDefault","onClickCapture","noSlideClick","stopPropagation","container","getRootRef","addEventListener","capture","useCapture","passive","removeEventListener","element","listenerParams","Component","window","restProps","onDragStart","postGestureClick","getRef","children"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n getSupportedEvents,\n coordX,\n coordY,\n touchEnabled,\n VKUITouchEvent,\n VKUITouchEventHander,\n} from '../../lib/touch';\nimport { HasRootRef } from '../../types';\nimport { canUseDOM, DOMProps, withDOM } from '../../lib/dom';\nimport { setRef, noop } from '../../lib/utils';\n\nexport interface TouchProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement> {\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n onStart?(outputEvent: TouchEvent): void;\n onStartX?(outputEvent: TouchEvent): void;\n onStartY?(outputEvent: TouchEvent): void;\n onMove?(outputEvent: TouchEvent): void;\n onMoveX?(outputEvent: TouchEvent): void;\n onMoveY?(outputEvent: TouchEvent): void;\n onEnd?(outputEvent: TouchEvent): void;\n onEndX?(outputEvent: TouchEvent): void;\n onEndY?(outputEvent: TouchEvent): void;\n useCapture?: boolean;\n noSlideClick?: boolean;\n Component?: React.ElementType;\n}\n\nexport interface Gesture {\n startX?: number;\n startY?: number;\n startT?: Date;\n isPressed?: boolean;\n isY?: boolean;\n isX?: boolean;\n isSlideX?: boolean;\n isSlideY?: boolean;\n isSlide?: boolean;\n shiftX?: number;\n shiftY?: number;\n shiftXAbs?: number;\n shiftYAbs?: number;\n}\n\nexport interface TouchEvent extends Gesture {\n originalEvent: VKUITouchEvent;\n}\n\nexport type TouchEventHandler = (e: TouchEvent) => void;\nexport type ClickHandler = (e: React.MouseEvent<HTMLElement>) => void;\nexport type DragHandler = (e: React.DragEvent<HTMLElement>) => void;\n\nconst events = getSupportedEvents();\n\nclass Touch extends React.Component<TouchProps & DOMProps> {\n didSlide = false;\n gesture: Partial<Gesture> = {};\n container: HTMLElement;\n\n static defaultProps: TouchProps = {\n Component: 'div',\n children: '',\n useCapture: false,\n noSlideClick: false,\n };\n\n get document() {\n return this.props.document;\n }\n\n componentDidMount() {\n if (canUseDOM) {\n this.container.addEventListener(events[0], this.onStart, { capture: this.props.useCapture, passive: false });\n touchEnabled && this.subscribe(this.container);\n\n this.container.addEventListener('mouseenter', this.onEnter, { capture: this.props.useCapture, passive: true });\n this.container.addEventListener('mouseleave', this.onLeave, { capture: this.props.useCapture, passive: true });\n }\n }\n\n componentWillUnmount() {\n this.container.removeEventListener(events[0], this.onStart);\n this.unsubscribe();\n\n this.container.removeEventListener('mouseenter', this.onEnter);\n this.container.removeEventListener('mouseleave', this.onLeave);\n }\n\n /**\n * Обработчик событий mouseenter\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n onEnter = (e: MouseEvent) => {\n if (this.props.onEnter) {\n this.props.onEnter(e);\n }\n };\n\n /**\n * Обработчик событий mouseleave\n *\n * @param {Object} e Браузерное событие\n * @param {boolean} simulated флаг, с которым обработчик был вызван симулятивно\n * @return {void}\n */\n onLeave = (e: MouseEvent) => {\n if (this.props.onLeave) {\n this.props.onLeave(e);\n }\n };\n\n /**\n * Обработчик событий touchstart\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n onStart: VKUITouchEventHander = (e: VKUITouchEvent) => {\n this.gesture = {\n startX: coordX(e),\n startY: coordY(e),\n startT: new Date(),\n isPressed: true,\n };\n\n // Вызываем нужные колбеки из props\n const outputEvent = {\n ...this.gesture,\n originalEvent: e,\n };\n\n if (this.props.onStart) {\n this.props.onStart(outputEvent);\n }\n\n if (this.props.onStartX) {\n this.props.onStartX(outputEvent);\n }\n\n if (this.props.onStartY) {\n this.props.onStartY(outputEvent);\n }\n\n !touchEnabled && this.subscribe(this.document);\n };\n\n /**\n * Обработчик событий touchmove\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n onMove: VKUITouchEventHander = (e: VKUITouchEvent) => {\n const { isPressed, isX, isY, startX, startY } = this.gesture;\n\n if (isPressed) {\n // смещения\n const shiftX = coordX(e) - startX;\n const shiftY = coordY(e) - startY;\n\n // абсолютные значения смещений\n const shiftXAbs = Math.abs(shiftX);\n const shiftYAbs = Math.abs(shiftY);\n\n // Если определяем мультитач, то прерываем жест\n if (!!e.touches && e.touches.length > 1) {\n return this.onEnd(e);\n }\n\n // если мы ещё не определились\n if (!isX && !isY) {\n let willBeX = shiftXAbs >= 5 && shiftXAbs > shiftYAbs;\n let willBeY = shiftYAbs >= 5 && shiftYAbs > shiftXAbs;\n let willBeSlidedX = willBeX && !!this.props.onMoveX || !!this.props.onMove;\n let willBeSlidedY = willBeY && !!this.props.onMoveY || !!this.props.onMove;\n\n this.gesture.isY = willBeY;\n this.gesture.isX = willBeX;\n this.gesture.isSlideX = willBeSlidedX;\n this.gesture.isSlideY = willBeSlidedY;\n this.gesture.isSlide = willBeSlidedX || willBeSlidedY;\n }\n\n if (this.gesture.isSlide) {\n this.gesture.shiftX = shiftX;\n this.gesture.shiftY = shiftY;\n this.gesture.shiftXAbs = shiftXAbs;\n this.gesture.shiftYAbs = shiftYAbs;\n\n // Вызываем нужные колбеки из props\n const outputEvent: TouchEvent = {\n ...this.gesture,\n originalEvent: e,\n };\n\n if (this.props.onMove) {\n this.props.onMove(outputEvent);\n }\n\n if (this.gesture.isSlideX && this.props.onMoveX) {\n this.props.onMoveX(outputEvent);\n }\n\n if (this.gesture.isSlideY && this.props.onMoveY) {\n this.props.onMoveY(outputEvent);\n }\n }\n }\n };\n\n /**\n * Обработчик событий touchend, touchcancel\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n onEnd: VKUITouchEventHander = (e: VKUITouchEvent) => {\n const { isPressed, isSlide, isSlideX, isSlideY } = this.gesture;\n\n if (isPressed) {\n // Вызываем нужные колбеки из props\n const outputEvent: TouchEvent = {\n ...this.gesture,\n originalEvent: e,\n };\n\n if (this.props.onEnd) {\n this.props.onEnd(outputEvent);\n }\n\n if (isSlideY && this.props.onEndY) {\n this.props.onEndY(outputEvent);\n }\n\n if (isSlideX && this.props.onEndX) {\n this.props.onEndX(outputEvent);\n }\n }\n\n this.didSlide = isSlide;\n this.gesture = {};\n\n // Если это был тач-евент, симулируем отмену hover\n if (e.type === 'touchend' || e.type === 'touchcancel') {\n this.onLeave(e);\n }\n\n !touchEnabled && this.unsubscribe();\n };\n\n subscribe(element: HTMLElement | Document) {\n this.unsubscribe();\n const listenerParams = { capture: this.props.useCapture, passive: false };\n element.addEventListener(events[1], this.onMove, listenerParams);\n element.addEventListener(events[2], this.onEnd, listenerParams);\n element.addEventListener(events[3], this.onEnd, listenerParams);\n this.unsubscribe = () => {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n element.removeEventListener(events[1], this.onMove, listenerParams);\n element.removeEventListener(events[2], this.onEnd, listenerParams);\n element.removeEventListener(events[3], this.onEnd, listenerParams);\n this.unsubscribe = noop;\n };\n }\n unsubscribe = noop;\n\n /**\n * Обработчик событий dragstart\n * Отменяет нативное браузерное поведение для вложенных ссылок и изображений\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n onDragStart: DragHandler = (e: React.DragEvent<HTMLElement>) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'A' || target.tagName === 'IMG') {\n e.preventDefault();\n }\n };\n\n /**\n * Обработчик клика по компоненту\n * Отменяет переход по вложенной ссылке, если был зафиксирован свайп\n *\n * @param {Object} e Браузерное событие\n * @return {void}\n */\n postGestureClick: ClickHandler = (e) => {\n const { onClickCapture, noSlideClick } = this.props;\n if (!this.didSlide) {\n return onClickCapture && onClickCapture(e);\n }\n if ((e.target as HTMLElement).tagName === 'A') {\n e.preventDefault();\n }\n if (noSlideClick) {\n e.stopPropagation();\n } else {\n onClickCapture && onClickCapture(e);\n }\n this.didSlide = false;\n };\n\n getRef: React.RefCallback<HTMLElement> = (container) => {\n this.container = container;\n setRef(container, this.props.getRootRef);\n };\n\n render() {\n const {\n onStart,\n onStartX,\n onStartY,\n onMove,\n onMoveX,\n onMoveY,\n onLeave,\n onEnter,\n onEnd,\n onEndX,\n onEndY,\n useCapture,\n Component,\n getRootRef,\n noSlideClick,\n window,\n document,\n ...restProps\n } = this.props;\n\n return (\n <Component\n {...restProps}\n onDragStart={this.onDragStart}\n onClickCapture={this.postGestureClick}\n ref={this.getRef}\n >\n {this.props.children}\n </Component>\n );\n }\n}\n\nexport default withDOM<TouchProps>(Touch);\n"],"file":"Touch.js"}
1
+ {"version":3,"sources":["../../../../src/components/Touch/Touch.tsx"],"names":["React","getSupportedEvents","coordX","coordY","touchEnabled","useDOM","useExternRef","useEventListener","useIsomorphicLayoutEffect","Touch","onStart","onStartX","onStartY","_onMove","onMove","onMoveX","onMoveY","onLeave","onEnter","_onEnd","onEnd","onEndX","onEndY","onClickCapture","useCapture","Component","getRootRef","noSlideClick","restProps","document","events","useMemo","didSlide","useRef","gesture","handle","e","handers","forEach","cb","current","originalEvent","mouseEnterHandler","mouseLeaveHandler","startHandler","startX","startY","startT","Date","isPressed","subscribe","capture","passive","containerRef","el","add","isX","isY","shiftX","shiftY","shiftXAbs","Math","abs","shiftYAbs","touches","length","willBeX","willBeY","willBeSlidedX","willBeSlidedY","Object","assign","isSlideX","isSlideY","isSlide","type","listenerParams","listeners","l","onDragStart","target","tagName","preventDefault","postGestureClick","stopPropagation"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { getSupportedEvents, coordX, coordY, touchEnabled, VKUITouchEvent } from '../../lib/touch';\nimport { HasRootRef } from '../../types';\nimport { useDOM } from '../../lib/dom';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\n\nexport interface TouchProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement> {\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n onStart?(outputEvent: TouchEvent): void;\n onStartX?(outputEvent: TouchEvent): void;\n onStartY?(outputEvent: TouchEvent): void;\n onMove?(outputEvent: TouchEvent): void;\n onMoveX?(outputEvent: TouchEvent): void;\n onMoveY?(outputEvent: TouchEvent): void;\n onEnd?(outputEvent: TouchEvent): void;\n onEndX?(outputEvent: TouchEvent): void;\n onEndY?(outputEvent: TouchEvent): void;\n useCapture?: boolean;\n noSlideClick?: boolean;\n Component?: React.ElementType;\n}\n\nexport interface Gesture {\n startX?: number;\n startY?: number;\n startT?: Date;\n isPressed?: boolean;\n isY?: boolean;\n isX?: boolean;\n isSlideX?: boolean;\n isSlideY?: boolean;\n isSlide?: boolean;\n shiftX?: number;\n shiftY?: number;\n shiftXAbs?: number;\n shiftYAbs?: number;\n}\n\nexport interface TouchEvent extends Gesture {\n originalEvent: VKUITouchEvent;\n}\n\nexport type TouchEventHandler = (e: TouchEvent) => void;\nexport type ClickHandler = (e: React.MouseEvent<HTMLElement>) => void;\nexport type DragHandler = (e: React.DragEvent<HTMLElement>) => void;\n\nexport const Touch: React.FC<TouchProps> = ({\n onStart,\n onStartX,\n onStartY,\n onMove: _onMove,\n onMoveX,\n onMoveY,\n onLeave,\n onEnter,\n onEnd: _onEnd,\n onEndX,\n onEndY,\n onClickCapture,\n useCapture = false,\n Component = 'div',\n getRootRef,\n noSlideClick = false,\n ...restProps\n}) => {\n const { document } = useDOM();\n const events = React.useMemo(getSupportedEvents, []);\n const didSlide = React.useRef(false);\n const gesture = React.useRef<Partial<Gesture>>({});\n const handle = (e: any, handers: any[]) => handers.forEach((cb) => {\n cb && cb({ ...gesture.current, originalEvent: e });\n });\n\n const mouseEnterHandler = useEventListener('mouseenter', onEnter);\n const mouseLeaveHandler = useEventListener('mouseleave', onLeave);\n const startHandler = useEventListener(events[0], (e: VKUITouchEvent) => {\n gesture.current = {\n startX: coordX(e),\n startY: coordY(e),\n startT: new Date(),\n isPressed: true,\n };\n\n handle(e, [onStart, onStartX, onStartY]);\n !touchEnabled() && subscribe(document);\n }, { capture: useCapture, passive: false });\n const containerRef = useExternRef(getRootRef);\n\n useIsomorphicLayoutEffect(() => {\n const el = containerRef.current;\n mouseEnterHandler.add(el);\n mouseLeaveHandler.add(el);\n startHandler.add(el);\n touchEnabled() && subscribe(el);\n }, [Component]);\n\n function onMove(e: VKUITouchEvent) {\n const { isPressed, isX, isY, startX, startY } = gesture.current;\n\n if (isPressed) {\n // смещения\n const shiftX = coordX(e) - startX;\n const shiftY = coordY(e) - startY;\n\n // абсолютные значения смещений\n const shiftXAbs = Math.abs(shiftX);\n const shiftYAbs = Math.abs(shiftY);\n\n // Если определяем мультитач, то прерываем жест\n if (!!e.touches && e.touches.length > 1) {\n return onEnd(e);\n }\n\n // если мы ещё не определились\n if (!isX && !isY) {\n const willBeX = shiftXAbs >= 5 && shiftXAbs > shiftYAbs;\n const willBeY = shiftYAbs >= 5 && shiftYAbs > shiftXAbs;\n const willBeSlidedX = willBeX && (!!onMoveX || !!_onMove);\n const willBeSlidedY = willBeY && (!!onMoveY || !!_onMove);\n\n Object.assign(gesture.current, {\n isY: willBeY,\n isX: willBeX,\n isSlideX: willBeSlidedX,\n isSlideY: willBeSlidedY,\n isSlide: willBeSlidedX || willBeSlidedY,\n });\n }\n\n if (gesture.current.isSlide) {\n Object.assign(gesture.current, {\n shiftX,\n shiftY,\n shiftXAbs,\n shiftYAbs,\n });\n\n handle(e, [_onMove, gesture.current.isSlideX && onMoveX, gesture.current.isSlideY && onMoveY]);\n }\n }\n }\n\n function onEnd(e: VKUITouchEvent) {\n const { isPressed, isSlide, isSlideX, isSlideY } = gesture.current;\n\n if (isPressed) {\n handle(e, [_onEnd, isSlideY && onEndY, isSlideX && onEndX]);\n }\n\n didSlide.current = isSlide;\n gesture.current = {};\n\n // Если это был тач-евент, симулируем отмену hover\n if (e.type === 'touchend' || e.type === 'touchcancel') {\n onLeave && onLeave(e);\n }\n\n !touchEnabled() && subscribe(null);\n }\n\n const listenerParams = { capture: useCapture, passive: false };\n const listeners = [\n useEventListener(events[1], onMove, listenerParams),\n useEventListener(events[2], onEnd, listenerParams),\n useEventListener(events[3], onEnd, listenerParams),\n ];\n function subscribe(el: HTMLElement | Document | null) {\n listeners.forEach((l) => l.add(el));\n }\n\n /**\n * Обработчик событий dragstart\n * Отменяет нативное браузерное поведение для вложенных ссылок и изображений\n */\n const onDragStart = (e: React.DragEvent<HTMLElement>) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'A' || target.tagName === 'IMG') {\n e.preventDefault();\n }\n };\n\n /**\n * Обработчик клика по компоненту\n * Отменяет переход по вложенной ссылке, если был зафиксирован свайп\n */\n const postGestureClick: typeof onClickCapture = (e) => {\n if (!didSlide.current) {\n return onClickCapture && onClickCapture(e);\n }\n if ((e.target as HTMLElement).tagName === 'A') {\n e.preventDefault();\n }\n if (noSlideClick) {\n e.stopPropagation();\n } else {\n onClickCapture && onClickCapture(e);\n }\n didSlide.current = false;\n };\n\n return (\n <Component\n {...restProps}\n onDragStart={onDragStart}\n onClickCapture={postGestureClick}\n ref={containerRef}\n />\n );\n};\n"],"file":"Touch.js"}
@@ -1 +1 @@
1
- .vkuiUsersStack{display:flex;align-items:center;color:#818c99;color:var(--text_secondary)}.vkuiUsersStack__photos{display:flex}.vkuiUsersStack__photo{background-position:center;background-repeat:no-repeat;background-size:cover;border-radius:50%;background-color:rgba(0,28,61,.08);background-color:var(--placeholder_icon_background)}.vkuiUsersStack__photo--others{display:flex;align-items:center;justify-content:center;color:#fff;background:#99a2ad;background:var(--content_placeholder_icon)}.vkuiUsersStack--size-xs .vkuiUsersStack__photo{width:16px;height:16px}.vkuiUsersStack--size-s .vkuiUsersStack__photo{width:24px;height:24px}.vkuiUsersStack--size-m .vkuiUsersStack__photo{width:32px;height:32px}.vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:4px}.vkuiUsersStack:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-2px}.vkuiUsersStack--size-xs:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-1px;-webkit-clip-path:url(#users_stack_mask_16_left);clip-path:url(#users_stack_mask_16_left)}.vkuiUsersStack--size-s:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo+.vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_24_left);clip-path:url(#users_stack_mask_24_left)}.vkuiUsersStack--size-m:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo+.vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_left);clip-path:url(#users_stack_mask_32_left)}.vkuiUsersStack--size-m.vkuiUsersStack--others:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_right);clip-path:url(#users_stack_mask_32_right)}.vkuiUsersStack--size-m.vkuiUsersStack--others:not(.vkuiUsersStack--simple) .vkuiUsersStack__photo:last-child{-webkit-clip-path:none;clip-path:none}.vkuiUsersStack__text{min-width:0;flex:1;margin:0 0 0 8px}.vkuiUsersStack--l-vertical{flex-direction:column;justify-content:center}.vkuiUsersStack--l-vertical .vkuiUsersStack__text{margin:8px 0 0;text-align:center}.vkuiModalCardBase .vkuiUsersStack{margin-top:20px}.vkuiRichCell__bottom .vkuiUsersStack{padding:5px 0 0}
1
+ .vkuiUsersStack{display:flex;align-items:center;color:#818c99;color:var(--text_secondary)}.vkuiUsersStack__photos{display:flex}.vkuiUsersStack__photo{background-position:center;background-repeat:no-repeat;background-size:cover;border-radius:50%;background-color:rgba(0,28,61,.08);background-color:var(--placeholder_icon_background)}.vkuiUsersStack__photo--others{display:flex;align-items:center;justify-content:center;color:#fff;background:#99a2ad;background:var(--content_placeholder_icon)}.vkuiUsersStack--size-xs .vkuiUsersStack__photo{width:16px;height:16px}.vkuiUsersStack--size-s .vkuiUsersStack__photo{width:24px;height:24px}.vkuiUsersStack--size-m .vkuiUsersStack__photo{width:32px;height:32px}.vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-2px}.vkuiUsersStack--size-xs .vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-1px;-webkit-clip-path:url(#users_stack_mask_16_left);clip-path:url(#users_stack_mask_16_left)}.vkuiUsersStack--size-s .vkuiUsersStack__photo+.vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_24_left);clip-path:url(#users_stack_mask_24_left)}.vkuiUsersStack--size-m .vkuiUsersStack__photo+.vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_left);clip-path:url(#users_stack_mask_32_left)}.vkuiUsersStack--size-m.vkuiUsersStack--others .vkuiUsersStack__photo{-webkit-clip-path:url(#users_stack_mask_32_right);clip-path:url(#users_stack_mask_32_right)}.vkuiUsersStack--size-m.vkuiUsersStack--others .vkuiUsersStack__photo:last-child{-webkit-clip-path:none;clip-path:none}.vkuiUsersStack__text{min-width:0;flex:1;margin:0 0 0 8px}.vkuiUsersStack--l-vertical{flex-direction:column;justify-content:center}.vkuiUsersStack--l-vertical .vkuiUsersStack__text{margin:8px 0 0;text-align:center}.vkuiModalCardBase .vkuiUsersStack{margin-top:20px}.vkuiRichCell__bottom .vkuiUsersStack{padding:5px 0 0}
@@ -4,22 +4,17 @@ var _excluded = ["photos", "visibleCount", "size", "layout", "children"];
4
4
  import { createScopedElement } from "../../lib/jsxRuntime";
5
5
  import * as React from 'react';
6
6
  import { getClassName } from "../../helpers/getClassName";
7
- import { useBrowserInfo } from "../../hooks/useBrowserInfo";
8
7
  import { usePlatform } from "../../hooks/usePlatform";
9
8
  import { hasReactNode } from "../../lib/utils";
10
9
  import { classNames } from "../../lib/classNames";
11
- import { System } from "../../lib/browser";
12
10
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
13
11
  import Caption from "../Typography/Caption/Caption";
14
12
  import Subhead from "../Typography/Subhead/Subhead";
15
13
  import { createMasks } from "./masks";
14
+ import { useDOM } from "../../lib/dom";
16
15
  import "./UsersStack.css";
17
16
 
18
17
  var UsersStack = function UsersStack(props) {
19
- var _useBrowserInfo = useBrowserInfo(),
20
- system = _useBrowserInfo.system,
21
- systemVersion = _useBrowserInfo.systemVersion;
22
-
23
18
  var platform = usePlatform();
24
19
 
25
20
  var photos = props.photos,
@@ -29,22 +24,18 @@ var UsersStack = function UsersStack(props) {
29
24
  children = props.children,
30
25
  restProps = _objectWithoutProperties(props, _excluded);
31
26
 
27
+ var _useDOM = useDOM(),
28
+ document = _useDOM.document;
29
+
32
30
  useIsomorphicLayoutEffect(function () {
33
- createMasks();
34
- }, []);
31
+ createMasks(document);
32
+ }, [document]);
35
33
  var othersCount = Math.max(0, photos.length - visibleCount);
36
34
  var canShowOthers = othersCount > 0 && size === 'm';
37
35
  var photosShown = photos.slice(0, visibleCount);
38
- var canUseClipPath = true;
39
-
40
- if (system === System.IOS) {
41
- canUseClipPath = systemVersion && systemVersion.major >= 12;
42
- }
43
-
44
36
  return createScopedElement("div", _extends({}, restProps, {
45
37
  vkuiClass: classNames(getClassName('UsersStack', platform), "UsersStack--size-".concat(size), "UsersStack--l-".concat(layout), {
46
- 'UsersStack--others': canShowOthers,
47
- 'UsersStack--simple': !canUseClipPath
38
+ 'UsersStack--others': canShowOthers
48
39
  })
49
40
  }), createScopedElement("div", {
50
41
  vkuiClass: "UsersStack__photos",