@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/CustomSelect/CustomSelect.tsx"],"names":["React","SelectMimicry","debounce","setRef","classNames","CustomScrollView","SizeType","withAdaptivity","withPlatform","CustomSelectOption","getClassName","Input","Icon20Dropdown","Icon24Dropdown","Caption","warnOnce","Spinner","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","CustomSelect","props","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","item","nativeSelectValue","value","event","Event","bubbles","selectEl","dispatchEvent","close","open","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","map","resolvedContent","onLabelClick","onInputKeyDown","COMPACT","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { SizeType, withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { Icon20Dropdown, Icon24Dropdown } from '@vkontakte/icons';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nconst warn = warnOnce('CustomSelect');\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: (value, option) => option.label.toLowerCase().includes(value.toLowerCase()),\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n public state: CustomSelectState;\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget));\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n if (prevProps.value !== this.props.value || prevProps.options !== this.props.options) {\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={sizeY === SizeType.COMPACT ? <Icon20Dropdown /> : <Icon24Dropdown />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":["React","SelectMimicry","debounce","setRef","classNames","CustomScrollView","SizeType","withAdaptivity","withPlatform","CustomSelectOption","getClassName","Input","Icon20Dropdown","Icon24Dropdown","Caption","warnOnce","Spinner","defaultFilterFn","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","CustomSelect","props","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","item","nativeSelectValue","value","event","Event","bubbles","selectEl","dispatchEvent","close","open","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","map","resolvedContent","onLabelClick","onInputKeyDown","COMPACT","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { SizeType, withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { Icon20Dropdown, Icon24Dropdown } from '@vkontakte/icons';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport { defaultFilterFn } from '../../lib/select';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nconst warn = warnOnce('CustomSelect');\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: defaultFilterFn,\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n public state: CustomSelectState;\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget));\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n if (prevProps.value !== this.props.value || prevProps.options !== this.props.options) {\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={sizeY === SizeType.COMPACT ? <Icon20Dropdown /> : <Icon24Dropdown />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
@@ -1,205 +1,114 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
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 = ["children", "style", "vertical", "getRootRef", "getRef", "platform", "filled", "splitCol", "panel", "getPanelNode", "window", "document"];
5
+ var _excluded = ["children", "style", "vertical", "getRootRef", "getRef", "filled"];
11
6
  import { createScopedElement } from "../../lib/jsxRuntime";
12
7
  import * as React from 'react';
13
8
  import { getClassName } from "../../helpers/getClassName";
14
9
  import { classNames } from "../../lib/classNames";
15
10
  import { transitionEndEventName, transitionStartEventName } from "../View/View";
16
- import { withContext } from "../../hoc/withContext";
17
- import { withPlatform } from "../../hoc/withPlatform";
18
- import { withPanelContext } from "../Panel/withPanelContext";
19
- import { setRef } from "../../lib/utils";
20
11
  import { SplitColContext } from "../SplitCol/SplitCol";
21
12
  import { TooltipContainer } from "../Tooltip/TooltipContainer";
22
- import { withDOM } from "../../lib/dom";
13
+ import { PanelContext } from "../Panel/PanelContext";
14
+ import { useDOM } from "../../lib/dom";
23
15
  import { IOS } from "../../lib/platform";
24
16
  import { warnOnce } from "../../lib/warnOnce";
17
+ import { useGlobalEventListener } from "../../hooks/useGlobalEventListener";
18
+ import { useExternRef } from "../../hooks/useExternRef";
19
+ import { usePlatform } from "../../hooks/usePlatform";
25
20
  import "./FixedLayout.css";
26
21
  var warn = warnOnce('FixedLayout');
27
22
 
28
- var FixedLayout = /*#__PURE__*/function (_React$Component) {
29
- _inherits(FixedLayout, _React$Component);
23
+ var FixedLayout = function FixedLayout(_ref) {
24
+ var children = _ref.children,
25
+ style = _ref.style,
26
+ vertical = _ref.vertical,
27
+ getRootRef = _ref.getRootRef,
28
+ getRef = _ref.getRef,
29
+ filled = _ref.filled,
30
+ restProps = _objectWithoutProperties(_ref, _excluded);
30
31
 
31
- var _super = _createSuper(FixedLayout);
32
+ var platform = usePlatform();
32
33
 
33
- function FixedLayout() {
34
- var _this;
34
+ var _React$useContext = React.useContext(SplitColContext),
35
+ colRef = _React$useContext.colRef;
35
36
 
36
- _classCallCheck(this, FixedLayout);
37
+ var _useDOM = useDOM(),
38
+ window = _useDOM.window,
39
+ document = _useDOM.document;
37
40
 
38
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
39
- args[_key] = arguments[_key];
40
- }
41
+ var _React$useContext2 = React.useContext(PanelContext),
42
+ panel = _React$useContext2.panel,
43
+ getPanelNode = _React$useContext2.getPanelNode;
41
44
 
42
- _this = _super.call.apply(_super, [this].concat(args));
43
-
44
- _defineProperty(_assertThisInitialized(_this), "state", {
45
- position: 'absolute',
46
- top: null,
47
- bottom: null,
48
- width: ''
49
- });
50
-
51
- _defineProperty(_assertThisInitialized(_this), "el", void 0);
52
-
53
- _defineProperty(_assertThisInitialized(_this), "onMountResizeTimeout", void 0);
54
-
55
- _defineProperty(_assertThisInitialized(_this), "onViewTransitionStart", function (e) {
56
- var panelScroll = e.detail.scrolls[_this.props.panel] || 0; // support for unstable ViewInfinite
57
-
58
- if (Array.isArray(panelScroll)) {
59
- var scrolls = panelScroll;
60
- panelScroll = scrolls[scrolls.length - 1];
61
- }
62
-
63
- var fromPanelHasScroll = _this.props.panel === e.detail.from && panelScroll > 0;
64
- var toPanelHasScroll = _this.props.panel === e.detail.to && panelScroll > 0; // если переход назад на Android - анимация только у панели с которой уходим (detail.from), и подстраиваться под скролл надо только на ней
65
- // на iOS переход между панелями горизонтальный, поэтому там нужно подстраивать хедеры на обеих панелях
66
-
67
- var panelAnimated = _this.props.platform === IOS || !(_this.props.panel === e.detail.to && e.detail.isBack); // Для панелей, с которых уходим всегда выставляется скролл
68
- // Для панелей на которые приходим надо смотреть, есть ли браузерный скролл и применяется ли к ней анимация перехода:
69
-
70
- if (fromPanelHasScroll || toPanelHasScroll && _this.canTargetPanelScroll && panelAnimated) {
71
- _this.setState({
72
- position: 'absolute',
73
- top: _this.props.vertical === 'top' || fromPanelHasScroll ? _this.el.offsetTop + panelScroll : null,
74
- bottom: _this.props.vertical === 'bottom' && !fromPanelHasScroll ? -panelScroll : null,
75
- width: ''
76
- });
77
- }
78
- });
79
-
80
- _defineProperty(_assertThisInitialized(_this), "onViewTransitionEnd", function () {
81
- _this.setState({
82
- position: null,
83
- top: null,
84
- bottom: null
85
- });
45
+ var _React$useState = React.useState({}),
46
+ _React$useState2 = _slicedToArray(_React$useState, 2),
47
+ transitionOverrideStyle = _React$useState2[0],
48
+ setTransitionOverrideStyle = _React$useState2[1];
86
49
 
87
- _this.doResize();
88
- });
89
-
90
- _defineProperty(_assertThisInitialized(_this), "doResize", function () {
91
- var colRef = _this.props.splitCol.colRef;
92
-
93
- if (colRef && colRef.current) {
94
- var node = colRef.current;
95
- var width = node.offsetWidth;
96
-
97
- _this.setState({
98
- width: "".concat(width, "px"),
99
- position: null
100
- });
101
- } else {
102
- _this.setState({
103
- width: '',
104
- position: null
105
- });
106
- }
107
- });
108
-
109
- _defineProperty(_assertThisInitialized(_this), "getRef", function (element) {
110
- _this.el = element;
111
- setRef(element, _this.props.getRootRef);
112
- });
113
-
114
- return _this;
115
- }
116
-
117
- _createClass(FixedLayout, [{
118
- key: "document",
119
- get: function get() {
120
- return this.props.document;
121
- }
122
- }, {
123
- key: "window",
124
- get: function get() {
125
- return this.props.window;
126
- }
127
- }, {
128
- key: "currentPanel",
129
- get: function get() {
130
- var elem = this.props.getPanelNode();
50
+ var _React$useState3 = React.useState(null),
51
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
52
+ width = _React$useState4[0],
53
+ setWidth = _React$useState4[1];
131
54
 
132
- if (process.env.NODE_ENV === 'development' && !elem) {
133
- warn('Panel element not found');
134
- }
55
+ var elRef = useExternRef(getRootRef);
135
56
 
136
- return elem;
137
- }
138
- }, {
139
- key: "canTargetPanelScroll",
140
- get: function get() {
141
- var panelEl = this.currentPanel;
57
+ var doResize = function doResize() {
58
+ return setWidth(colRef !== null && colRef !== void 0 && colRef.current ? "".concat(colRef.current.offsetWidth, "px") : null);
59
+ };
142
60
 
143
- if (!panelEl) {
144
- return true; // Всегда предпологаем, что может быть скролл в случае, если нет document
145
- }
61
+ React.useEffect(doResize, []);
62
+ useGlobalEventListener(window, 'resize', doResize);
63
+ useGlobalEventListener(document, transitionStartEventName, function (e) {
64
+ var panelScroll = e.detail.scrolls[panel] || 0; // support for unstable ViewInfinite
146
65
 
147
- return panelEl.scrollHeight > panelEl.clientHeight;
66
+ if (Array.isArray(panelScroll)) {
67
+ var scrolls = panelScroll;
68
+ panelScroll = scrolls[scrolls.length - 1];
148
69
  }
149
- }, {
150
- key: "componentDidMount",
151
- value: function componentDidMount() {
152
- var _this2 = this;
153
70
 
154
- this.onMountResizeTimeout = setTimeout(function () {
155
- return _this2.doResize();
156
- });
157
- this.window.addEventListener('resize', this.doResize);
158
- this.document.addEventListener(transitionStartEventName, this.onViewTransitionStart);
159
- this.document.addEventListener(transitionEndEventName, this.onViewTransitionEnd);
160
- }
161
- }, {
162
- key: "componentWillUnmount",
163
- value: function componentWillUnmount() {
164
- clearTimeout(this.onMountResizeTimeout);
165
- this.window.removeEventListener('resize', this.doResize);
166
- this.document.removeEventListener(transitionStartEventName, this.onViewTransitionStart);
167
- this.document.removeEventListener(transitionEndEventName, this.onViewTransitionEnd);
168
- }
169
- }, {
170
- key: "render",
171
- value: function render() {
172
- var _this$props = this.props,
173
- children = _this$props.children,
174
- style = _this$props.style,
175
- vertical = _this$props.vertical,
176
- getRootRef = _this$props.getRootRef,
177
- getRef = _this$props.getRef,
178
- platform = _this$props.platform,
179
- filled = _this$props.filled,
180
- splitCol = _this$props.splitCol,
181
- panel = _this$props.panel,
182
- getPanelNode = _this$props.getPanelNode,
183
- window = _this$props.window,
184
- document = _this$props.document,
185
- restProps = _objectWithoutProperties(_this$props, _excluded);
186
-
187
- return createScopedElement(TooltipContainer, _extends({}, restProps, {
188
- fixed: true,
189
- ref: this.getRef,
190
- vkuiClass: classNames(getClassName('FixedLayout', platform), _defineProperty({
191
- 'FixedLayout--filled': filled
192
- }, "FixedLayout--".concat(vertical), !!vertical)),
193
- style: _objectSpread(_objectSpread({}, style), this.state)
194
- }), createScopedElement("div", {
195
- vkuiClass: "FixedLayout__in",
196
- ref: getRef
197
- }, children));
198
- }
199
- }]);
71
+ var fromPanelHasScroll = panel === e.detail.from && panelScroll > 0;
72
+ var toPanelHasScroll = panel === e.detail.to && panelScroll > 0; // если переход назад на Android - анимация только у панели с которой уходим (detail.from), и подстраиваться под скролл надо только на ней
73
+ // на iOS переход между панелями горизонтальный, поэтому там нужно подстраивать хедеры на обеих панелях
74
+
75
+ var panelAnimated = platform === IOS || !(panel === e.detail.to && e.detail.isBack);
76
+ var currentPanel = getPanelNode();
77
+
78
+ if (process.env.NODE_ENV === 'development' && !currentPanel) {
79
+ warn('Panel element not found');
80
+ } // Всегда предпологаем, что может быть скролл в случае, если нет document
200
81
 
201
- return FixedLayout;
202
- }(React.Component);
203
82
 
204
- export default withContext(withPlatform(withPanelContext(withDOM(FixedLayout))), SplitColContext, 'splitCol');
83
+ var canTargetPanelScroll = !currentPanel || currentPanel.scrollHeight > currentPanel.clientHeight; // Для панелей, с которых уходим всегда выставляется скролл
84
+ // Для панелей на которые приходим надо смотреть, есть ли браузерный скролл и применяется ли к ней анимация перехода:
85
+
86
+ if (fromPanelHasScroll || toPanelHasScroll && canTargetPanelScroll && panelAnimated) {
87
+ setTransitionOverrideStyle({
88
+ position: 'absolute',
89
+ top: vertical === 'top' || fromPanelHasScroll ? elRef.current.offsetTop + panelScroll : null,
90
+ bottom: vertical === 'bottom' && !fromPanelHasScroll ? -panelScroll : null
91
+ });
92
+ }
93
+ });
94
+ useGlobalEventListener(document, transitionEndEventName, function () {
95
+ setTransitionOverrideStyle({});
96
+ doResize();
97
+ });
98
+ return createScopedElement(TooltipContainer, _extends({}, restProps, {
99
+ fixed: true,
100
+ ref: elRef,
101
+ vkuiClass: classNames(getClassName('FixedLayout', platform), {
102
+ 'FixedLayout--filled': filled
103
+ }, "FixedLayout--".concat(vertical)),
104
+ style: _objectSpread(_objectSpread(_objectSpread({}, style), transitionOverrideStyle), {}, {
105
+ width: width
106
+ })
107
+ }), createScopedElement("div", {
108
+ vkuiClass: "FixedLayout__in",
109
+ ref: getRef
110
+ }, children));
111
+ };
112
+
113
+ export default FixedLayout;
205
114
  //# sourceMappingURL=FixedLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FixedLayout/FixedLayout.tsx"],"names":["React","getClassName","classNames","transitionEndEventName","transitionStartEventName","withContext","withPlatform","withPanelContext","setRef","SplitColContext","TooltipContainer","withDOM","IOS","warnOnce","warn","FixedLayout","position","top","bottom","width","e","panelScroll","detail","scrolls","props","panel","Array","isArray","length","fromPanelHasScroll","from","toPanelHasScroll","to","panelAnimated","platform","isBack","canTargetPanelScroll","setState","vertical","el","offsetTop","doResize","colRef","splitCol","current","node","offsetWidth","element","getRootRef","document","window","elem","getPanelNode","process","env","NODE_ENV","panelEl","currentPanel","scrollHeight","clientHeight","onMountResizeTimeout","setTimeout","addEventListener","onViewTransitionStart","onViewTransitionEnd","clearTimeout","removeEventListener","children","style","getRef","filled","restProps","state","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { getClassName } from '../../helpers/getClassName';\nimport { classNames } from '../../lib/classNames';\nimport { transitionEndEventName, TransitionStartEventDetail, transitionStartEventName } from '../View/View';\nimport { withContext } from '../../hoc/withContext';\nimport { HasPlatform, HasRef, HasRootRef } from '../../types';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { withPanelContext } from '../Panel/withPanelContext';\nimport { setRef } from '../../lib/utils';\nimport { SplitColContext, SplitColContextProps } from '../SplitCol/SplitCol';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { PanelContextProps } from '../Panel/PanelContext';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { IOS } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport './FixedLayout.css';\n\nexport interface FixedLayoutProps extends\n React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement>,\n HasPlatform {\n vertical?: 'top' | 'bottom';\n /**\n * Это свойство определяет, будет ли фон компонента окрашен в цвет фона контента.\n * Это часто необходимо для фиксированных кнопок в нижней части экрана.\n */\n filled?: boolean;\n /**\n * @ignore\n */\n splitCol?: SplitColContextProps;\n}\n\nexport interface FixedLayoutState {\n position: 'absolute' | null;\n top: number;\n bottom: number;\n width: string;\n}\n\nconst warn = warnOnce('FixedLayout');\n\nclass FixedLayout extends React.Component<FixedLayoutProps & DOMProps & PanelContextProps, FixedLayoutState> {\n state: FixedLayoutState = {\n position: 'absolute',\n top: null,\n bottom: null,\n width: '',\n };\n\n el: HTMLDivElement;\n\n private onMountResizeTimeout: number;\n\n get document() {\n return this.props.document;\n }\n\n get window() {\n return this.props.window;\n }\n\n get currentPanel(): HTMLElement {\n const elem = this.props.getPanelNode();\n\n if (process.env.NODE_ENV === 'development' && !elem) {\n warn('Panel element not found');\n }\n\n return elem;\n }\n\n get canTargetPanelScroll() {\n const panelEl = this.currentPanel;\n if (!panelEl) {\n return true; // Всегда предпологаем, что может быть скролл в случае, если нет document\n }\n return panelEl.scrollHeight > panelEl.clientHeight;\n }\n\n componentDidMount() {\n this.onMountResizeTimeout = setTimeout(() => this.doResize());\n this.window.addEventListener('resize', this.doResize);\n\n this.document.addEventListener(transitionStartEventName, this.onViewTransitionStart);\n this.document.addEventListener(transitionEndEventName, this.onViewTransitionEnd);\n }\n\n componentWillUnmount() {\n clearTimeout(this.onMountResizeTimeout);\n this.window.removeEventListener('resize', this.doResize);\n\n this.document.removeEventListener(transitionStartEventName, this.onViewTransitionStart);\n this.document.removeEventListener(transitionEndEventName, this.onViewTransitionEnd);\n }\n\n onViewTransitionStart: EventListener = (e: CustomEvent<TransitionStartEventDetail>) => {\n let panelScroll = e.detail.scrolls[this.props.panel] || 0;\n\n // support for unstable ViewInfinite\n if (Array.isArray(panelScroll)) {\n const scrolls = panelScroll as number[];\n panelScroll = scrolls[scrolls.length - 1];\n }\n\n const fromPanelHasScroll = this.props.panel === e.detail.from && panelScroll > 0;\n const toPanelHasScroll = this.props.panel === e.detail.to && panelScroll > 0;\n\n // если переход назад на Android - анимация только у панели с которой уходим (detail.from), и подстраиваться под скролл надо только на ней\n // на iOS переход между панелями горизонтальный, поэтому там нужно подстраивать хедеры на обеих панелях\n const panelAnimated = this.props.platform === IOS || !(this.props.panel === e.detail.to && e.detail.isBack);\n\n // Для панелей, с которых уходим всегда выставляется скролл\n // Для панелей на которые приходим надо смотреть, есть ли браузерный скролл и применяется ли к ней анимация перехода:\n if (fromPanelHasScroll || toPanelHasScroll && this.canTargetPanelScroll && panelAnimated) {\n this.setState({\n position: 'absolute',\n top: this.props.vertical === 'top' || fromPanelHasScroll ? this.el.offsetTop + panelScroll : null,\n bottom: this.props.vertical === 'bottom' && !fromPanelHasScroll ? -panelScroll : null,\n width: '',\n });\n }\n };\n\n onViewTransitionEnd: VoidFunction = () => {\n this.setState({\n position: null,\n top: null,\n bottom: null,\n });\n\n this.doResize();\n };\n\n doResize = () => {\n const { colRef } = this.props.splitCol;\n\n if (colRef && colRef.current) {\n const node: HTMLElement = colRef.current;\n const width = node.offsetWidth;\n\n this.setState({ width: `${width}px`, position: null });\n } else {\n this.setState({ width: '', position: null });\n }\n };\n\n getRef: React.RefCallback<HTMLDivElement> = (element) => {\n this.el = element;\n setRef(element, this.props.getRootRef);\n };\n\n render() {\n const {\n children,\n style,\n vertical,\n getRootRef,\n getRef,\n platform,\n filled,\n splitCol,\n panel,\n getPanelNode,\n window,\n document,\n ...restProps\n } = this.props;\n\n return (\n <TooltipContainer\n {...restProps}\n fixed\n ref={this.getRef}\n vkuiClass={classNames(getClassName('FixedLayout', platform), {\n 'FixedLayout--filled': filled,\n [`FixedLayout--${vertical}`]: !!vertical,\n })}\n style={{ ...style, ...this.state }}\n >\n <div vkuiClass=\"FixedLayout__in\" ref={getRef}>{children}</div>\n </TooltipContainer>\n );\n }\n}\n\nexport default withContext(\n withPlatform(withPanelContext(withDOM<FixedLayoutProps>(FixedLayout))),\n SplitColContext,\n 'splitCol',\n);\n"],"file":"FixedLayout.js"}
1
+ {"version":3,"sources":["../../../../src/components/FixedLayout/FixedLayout.tsx"],"names":["React","getClassName","classNames","transitionEndEventName","transitionStartEventName","SplitColContext","TooltipContainer","PanelContext","useDOM","IOS","warnOnce","useGlobalEventListener","useExternRef","usePlatform","warn","FixedLayout","children","style","vertical","getRootRef","getRef","filled","restProps","platform","useContext","colRef","window","document","panel","getPanelNode","useState","transitionOverrideStyle","setTransitionOverrideStyle","width","setWidth","elRef","doResize","current","offsetWidth","useEffect","e","panelScroll","detail","scrolls","Array","isArray","length","fromPanelHasScroll","from","toPanelHasScroll","to","panelAnimated","isBack","currentPanel","process","env","NODE_ENV","canTargetPanelScroll","scrollHeight","clientHeight","position","top","offsetTop","bottom"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { getClassName } from '../../helpers/getClassName';\nimport { classNames } from '../../lib/classNames';\nimport { transitionEndEventName, TransitionStartEventDetail, transitionStartEventName } from '../View/View';\nimport { HasRef, HasRootRef } from '../../types';\nimport { SplitColContext } from '../SplitCol/SplitCol';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { PanelContext } from '../Panel/PanelContext';\nimport { useDOM } from '../../lib/dom';\nimport { IOS } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './FixedLayout.css';\n\nexport interface FixedLayoutProps extends\n React.HTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n vertical?: 'top' | 'bottom';\n /**\n * Это свойство определяет, будет ли фон компонента окрашен в цвет фона контента.\n * Это часто необходимо для фиксированных кнопок в нижней части экрана.\n */\n filled?: boolean;\n}\n\nexport interface FixedLayoutState {\n position: 'absolute' | null;\n top: number;\n bottom: number;\n width: string;\n}\n\nconst warn = warnOnce('FixedLayout');\n\nconst FixedLayout: React.FC<FixedLayoutProps> = ({\n children, style, vertical, getRootRef, getRef, filled,\n ...restProps\n}) => {\n const platform = usePlatform();\n const { colRef } = React.useContext(SplitColContext);\n const { window, document } = useDOM();\n const { panel, getPanelNode } = React.useContext(PanelContext);\n const [transitionOverrideStyle, setTransitionOverrideStyle] = React.useState<React.CSSProperties>({});\n const [width, setWidth] = React.useState<string>(null);\n const elRef = useExternRef(getRootRef);\n\n const doResize = () => setWidth(colRef?.current ? `${colRef.current.offsetWidth}px` : null);\n React.useEffect(doResize, []);\n useGlobalEventListener(window, 'resize', doResize);\n useGlobalEventListener(document, transitionStartEventName, (e: CustomEvent<TransitionStartEventDetail>) => {\n let panelScroll = e.detail.scrolls[panel] || 0;\n\n // support for unstable ViewInfinite\n if (Array.isArray(panelScroll)) {\n const scrolls = panelScroll as number[];\n panelScroll = scrolls[scrolls.length - 1];\n }\n\n const fromPanelHasScroll = panel === e.detail.from && panelScroll > 0;\n const toPanelHasScroll = panel === e.detail.to && panelScroll > 0;\n\n // если переход назад на Android - анимация только у панели с которой уходим (detail.from), и подстраиваться под скролл надо только на ней\n // на iOS переход между панелями горизонтальный, поэтому там нужно подстраивать хедеры на обеих панелях\n const panelAnimated = platform === IOS || !(panel === e.detail.to && e.detail.isBack);\n\n const currentPanel = getPanelNode();\n if (process.env.NODE_ENV === 'development' && !currentPanel) {\n warn('Panel element not found');\n }\n // Всегда предпологаем, что может быть скролл в случае, если нет document\n const canTargetPanelScroll = !currentPanel || currentPanel.scrollHeight > currentPanel.clientHeight;\n\n // Для панелей, с которых уходим всегда выставляется скролл\n // Для панелей на которые приходим надо смотреть, есть ли браузерный скролл и применяется ли к ней анимация перехода:\n if (fromPanelHasScroll || toPanelHasScroll && canTargetPanelScroll && panelAnimated) {\n setTransitionOverrideStyle({\n position: 'absolute',\n top: vertical === 'top' || fromPanelHasScroll ? elRef.current.offsetTop + panelScroll : null,\n bottom: vertical === 'bottom' && !fromPanelHasScroll ? -panelScroll : null,\n });\n }\n });\n useGlobalEventListener(document, transitionEndEventName, () => {\n setTransitionOverrideStyle({});\n doResize();\n });\n\n return (\n <TooltipContainer\n {...restProps}\n fixed\n ref={elRef}\n vkuiClass={classNames(getClassName('FixedLayout', platform), {\n 'FixedLayout--filled': filled,\n }, `FixedLayout--${vertical}`)}\n style={{ ...style, ...transitionOverrideStyle, width }}\n >\n <div vkuiClass=\"FixedLayout__in\" ref={getRef}>{children}</div>\n </TooltipContainer>\n );\n};\n\nexport default FixedLayout;\n"],"file":"FixedLayout.js"}
@@ -12,7 +12,7 @@ var _excluded = ["children", "slideWidth", "slideIndex", "isDraggable", "onDragS
12
12
  import { createScopedElement } from "../../lib/jsxRuntime";
13
13
  import * as React from 'react';
14
14
  import { getClassName } from "../../helpers/getClassName";
15
- import Touch from "../Touch/Touch";
15
+ import { Touch } from "../Touch/Touch";
16
16
  import { classNames } from "../../lib/classNames";
17
17
  import { withPlatform } from "../../hoc/withPlatform";
18
18
  import { withDOM } from "../../lib/dom";