@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/Cell/Cell.tsx"],"names":["React","classNames","getClassName","Touch","ANDROID","IOS","VKCOM","Icon24Reorder","Icon24ReorderIos","Icon24CheckCircleOn","Icon24CheckCircleOff","Icon24CheckBoxOff","Icon24CheckBoxOn","SimpleCell","Removable","usePlatform","ListContext","Cell","props","onRemove","removePlaceholder","onDragFinish","className","style","before","after","disabled","removable","draggable","selectable","Component","onChange","name","checked","defaultChecked","getRootRef","restProps","rootElRef","useRef","platform","useState","dragging","setDragging","undefined","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","dragDirection","setDragDirection","onDragStart","rootEl","current","_siblings","Array","from","parentElement","childNodes","rootElIdx","indexOf","onDragMove","e","originalEvent","preventDefault","transform","shiftY","forEach","sibling","siblingIndex","rootGesture","getBoundingClientRect","siblingGesture","bottom","top","height","onDragEnd","to","onDragClick","nativeEvent","stopPropagation","useContext","toggleDrag","useEffect","IconOff","IconOn","simpleCell","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport Touch, { TouchEvent } from '../Touch/Touch';\nimport { ANDROID, IOS, VKCOM } from '../../lib/platform';\nimport { Icon24Reorder, Icon24ReorderIos, Icon24CheckCircleOn, Icon24CheckCircleOff, Icon24CheckBoxOff, Icon24CheckBoxOn } from '@vkontakte/icons';\nimport SimpleCell, { SimpleCellProps } from '../SimpleCell/SimpleCell';\nimport { HasPlatform } from '../../types';\nimport { Removable, RemovableProps } from '../Removable/Removable';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { ListContext } from '../../components/List/ListContext';\nimport './Cell.css';\n\nexport interface CellProps extends SimpleCellProps, HasPlatform, RemovableProps {\n /**\n * В режиме перетаскивания ячейка перестает быть кликабельной, то есть при клике переданный onClick вызываться не будет\n */\n draggable?: boolean;\n removable?: boolean;\n /**\n * Имя для input в режиме selectable\n */\n name?: string;\n selectable?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса cheсked, как зависящий напрямую от входящего значения\n */\n checked?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса defaultChecked как неконтролируемый компонент\n */\n defaultChecked?: boolean;\n /**\n * Коллбэк срабатывает при завершении перетаскивания.\n * **Важно:** режим перетаскивания не меняет порядок ячеек в DOM. В коллбэке есть объект с полями `from` и `to`.\n * Эти числа нужны для того, чтобы разработчик понимал, с какого индекса на какой произошел переход. В песочнице\n * есть рабочий пример с обработкой этих чисел и перерисовкой списка.\n */\n onDragFinish?: ({ from, to }: { from: number; to: number }) => void;\n}\n\nexport const Cell: React.FC<CellProps> = (props: CellProps) => {\n const {\n onRemove,\n removePlaceholder,\n onDragFinish,\n className,\n style,\n before,\n after,\n disabled,\n removable,\n draggable,\n selectable,\n Component,\n onChange,\n name,\n checked,\n defaultChecked,\n getRootRef,\n ...restProps\n } = props;\n const rootElRef = React.useRef(null);\n const platform = usePlatform();\n\n const [dragging, setDragging] = React.useState<boolean>(false);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>(undefined);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(undefined);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(undefined);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up'>(undefined);\n\n const onDragStart = () => {\n const rootEl = rootElRef?.current;\n\n setDragging(true);\n\n const _siblings: HTMLElement[] = Array.from(rootEl.parentElement.childNodes);\n const rootElIdx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(rootElIdx);\n setDragEndIndex(rootElIdx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n\n const rootEl = rootElRef?.current;\n\n rootEl.style.transform = `translateY(${e.shiftY}px)`;\n setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');\n setDragShift(e.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const rootGesture = rootEl.getBoundingClientRect();\n\n const siblingGesture = sibling.getBoundingClientRect();\n\n if (dragStartIndex < siblingIndex) {\n if (rootGesture.bottom > siblingGesture.top + siblingGesture.height / 2) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootGesture.top < siblingGesture.bottom - siblingGesture.height / 2 && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootGesture.top < siblingGesture.bottom - siblingGesture.height / 2) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootGesture.bottom > siblingGesture.top + siblingGesture.height / 2 && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n };\n\n const onDragEnd = () => {\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = null;\n });\n\n setSiblings(undefined);\n setDragEndIndex(undefined);\n setDragStartIndex(undefined);\n setDragDirection(undefined);\n setDragShift(undefined);\n\n setDragging(false);\n\n props.onDragFinish && props.onDragFinish({ from, to });\n };\n\n const onDragClick = (e: React.MouseEvent) => {\n e.nativeEvent.stopPropagation();\n e.preventDefault();\n };\n\n const { toggleDrag } = React.useContext(ListContext);\n React.useEffect(() => {\n if (dragging) {\n toggleDrag(true);\n return () => toggleDrag(false);\n }\n return undefined;\n }, [dragging]);\n\n const IconOff = platform === ANDROID ? Icon24CheckBoxOff : Icon24CheckCircleOff;\n const IconOn = platform === ANDROID ? Icon24CheckBoxOn : Icon24CheckCircleOn;\n\n const simpleCell = (\n <SimpleCell\n {...restProps}\n disabled={draggable || removable || disabled}\n Component={selectable ? 'label' : Component}\n htmlFor={selectable ? name : undefined}\n before={\n <React.Fragment>\n {(platform === ANDROID || platform === VKCOM) && draggable && (\n <Touch\n vkuiClass=\"Cell__dragger\"\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={onDragClick}\n ><Icon24Reorder /></Touch>\n )}\n {selectable && (\n <React.Fragment>\n <input\n type=\"checkbox\"\n vkuiClass=\"Cell__checkbox\"\n name={name}\n onChange={onChange}\n defaultChecked={defaultChecked}\n checked={checked}\n disabled={disabled}\n />\n <span vkuiClass=\"Cell__marker\">\n <IconOff vkuiClass=\"Cell__marker-in\" />\n <IconOn vkuiClass=\"Cell__marker-in Cell__marker-in--checked\" />\n </span>\n </React.Fragment>\n )}\n {before}\n </React.Fragment>\n }\n after={\n <React.Fragment>\n {platform === IOS && draggable && (\n <Touch\n vkuiClass=\"Cell__dragger\"\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={onDragClick}\n ><Icon24ReorderIos /></Touch>\n )}\n {after}\n </React.Fragment>\n }\n />\n );\n\n return (\n <div\n vkuiClass={classNames(getClassName('Cell', platform), {\n 'Cell--dragging': dragging,\n 'Cell--removable': removable,\n 'Cell--selectable': selectable,\n 'Cell--disabled': disabled,\n })}\n className={className}\n style={style}\n ref={rootElRef}\n >\n {removable\n ? <Removable removePlaceholder={removePlaceholder} onRemove={(e) => onRemove(e, rootElRef?.current)}>{simpleCell}</Removable>\n : simpleCell\n }\n </div>\n );\n};\n\nCell.defaultProps = {\n removePlaceholder: 'Удалить',\n};\n"],"file":"Cell.js"}
1
+ {"version":3,"sources":["../../../src/components/Cell/Cell.tsx"],"names":["React","classNames","getClassName","Touch","ANDROID","IOS","VKCOM","Icon24Reorder","Icon24ReorderIos","Icon24CheckCircleOn","Icon24CheckCircleOff","Icon24CheckBoxOff","Icon24CheckBoxOn","SimpleCell","Removable","usePlatform","ListContext","Cell","props","onRemove","removePlaceholder","onDragFinish","className","style","before","after","disabled","removable","draggable","selectable","Component","onChange","name","checked","defaultChecked","getRootRef","restProps","rootElRef","useRef","platform","useState","dragging","setDragging","undefined","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","dragDirection","setDragDirection","onDragStart","rootEl","current","_siblings","Array","from","parentElement","childNodes","rootElIdx","indexOf","onDragMove","e","originalEvent","preventDefault","transform","shiftY","forEach","sibling","siblingIndex","rootGesture","getBoundingClientRect","siblingGesture","bottom","top","height","onDragEnd","to","onDragClick","nativeEvent","stopPropagation","useContext","toggleDrag","useEffect","IconOff","IconOn","simpleCell","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport { ANDROID, IOS, VKCOM } from '../../lib/platform';\nimport { Icon24Reorder, Icon24ReorderIos, Icon24CheckCircleOn, Icon24CheckCircleOff, Icon24CheckBoxOff, Icon24CheckBoxOn } from '@vkontakte/icons';\nimport SimpleCell, { SimpleCellProps } from '../SimpleCell/SimpleCell';\nimport { HasPlatform } from '../../types';\nimport { Removable, RemovableProps } from '../Removable/Removable';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { ListContext } from '../../components/List/ListContext';\nimport './Cell.css';\n\nexport interface CellProps extends SimpleCellProps, HasPlatform, RemovableProps {\n /**\n * В режиме перетаскивания ячейка перестает быть кликабельной, то есть при клике переданный onClick вызываться не будет\n */\n draggable?: boolean;\n removable?: boolean;\n /**\n * Имя для input в режиме selectable\n */\n name?: string;\n selectable?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса cheсked, как зависящий напрямую от входящего значения\n */\n checked?: boolean;\n /**\n * В режиме selectable реагирует на входящие значения пропса defaultChecked как неконтролируемый компонент\n */\n defaultChecked?: boolean;\n /**\n * Коллбэк срабатывает при завершении перетаскивания.\n * **Важно:** режим перетаскивания не меняет порядок ячеек в DOM. В коллбэке есть объект с полями `from` и `to`.\n * Эти числа нужны для того, чтобы разработчик понимал, с какого индекса на какой произошел переход. В песочнице\n * есть рабочий пример с обработкой этих чисел и перерисовкой списка.\n */\n onDragFinish?: ({ from, to }: { from: number; to: number }) => void;\n}\n\nexport const Cell: React.FC<CellProps> = (props: CellProps) => {\n const {\n onRemove,\n removePlaceholder,\n onDragFinish,\n className,\n style,\n before,\n after,\n disabled,\n removable,\n draggable,\n selectable,\n Component,\n onChange,\n name,\n checked,\n defaultChecked,\n getRootRef,\n ...restProps\n } = props;\n const rootElRef = React.useRef(null);\n const platform = usePlatform();\n\n const [dragging, setDragging] = React.useState<boolean>(false);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>(undefined);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(undefined);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(undefined);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up'>(undefined);\n\n const onDragStart = () => {\n const rootEl = rootElRef?.current;\n\n setDragging(true);\n\n const _siblings: HTMLElement[] = Array.from(rootEl.parentElement.childNodes);\n const rootElIdx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(rootElIdx);\n setDragEndIndex(rootElIdx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n\n const rootEl = rootElRef?.current;\n\n rootEl.style.transform = `translateY(${e.shiftY}px)`;\n setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');\n setDragShift(e.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const rootGesture = rootEl.getBoundingClientRect();\n\n const siblingGesture = sibling.getBoundingClientRect();\n\n if (dragStartIndex < siblingIndex) {\n if (rootGesture.bottom > siblingGesture.top + siblingGesture.height / 2) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootGesture.top < siblingGesture.bottom - siblingGesture.height / 2 && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootGesture.top < siblingGesture.bottom - siblingGesture.height / 2) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootGesture.bottom > siblingGesture.top + siblingGesture.height / 2 && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n };\n\n const onDragEnd = () => {\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = null;\n });\n\n setSiblings(undefined);\n setDragEndIndex(undefined);\n setDragStartIndex(undefined);\n setDragDirection(undefined);\n setDragShift(undefined);\n\n setDragging(false);\n\n props.onDragFinish && props.onDragFinish({ from, to });\n };\n\n const onDragClick = (e: React.MouseEvent) => {\n e.nativeEvent.stopPropagation();\n e.preventDefault();\n };\n\n const { toggleDrag } = React.useContext(ListContext);\n React.useEffect(() => {\n if (dragging) {\n toggleDrag(true);\n return () => toggleDrag(false);\n }\n return undefined;\n }, [dragging]);\n\n const IconOff = platform === ANDROID ? Icon24CheckBoxOff : Icon24CheckCircleOff;\n const IconOn = platform === ANDROID ? Icon24CheckBoxOn : Icon24CheckCircleOn;\n\n const simpleCell = (\n <SimpleCell\n {...restProps}\n disabled={draggable || removable || disabled}\n Component={selectable ? 'label' : Component}\n htmlFor={selectable ? name : undefined}\n before={\n <React.Fragment>\n {(platform === ANDROID || platform === VKCOM) && draggable && (\n <Touch\n vkuiClass=\"Cell__dragger\"\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={onDragClick}\n ><Icon24Reorder /></Touch>\n )}\n {selectable && (\n <React.Fragment>\n <input\n type=\"checkbox\"\n vkuiClass=\"Cell__checkbox\"\n name={name}\n onChange={onChange}\n defaultChecked={defaultChecked}\n checked={checked}\n disabled={disabled}\n />\n <span vkuiClass=\"Cell__marker\">\n <IconOff vkuiClass=\"Cell__marker-in\" />\n <IconOn vkuiClass=\"Cell__marker-in Cell__marker-in--checked\" />\n </span>\n </React.Fragment>\n )}\n {before}\n </React.Fragment>\n }\n after={\n <React.Fragment>\n {platform === IOS && draggable && (\n <Touch\n vkuiClass=\"Cell__dragger\"\n onStart={onDragStart}\n onMoveY={onDragMove}\n onEnd={onDragEnd}\n onClick={onDragClick}\n ><Icon24ReorderIos /></Touch>\n )}\n {after}\n </React.Fragment>\n }\n />\n );\n\n return (\n <div\n vkuiClass={classNames(getClassName('Cell', platform), {\n 'Cell--dragging': dragging,\n 'Cell--removable': removable,\n 'Cell--selectable': selectable,\n 'Cell--disabled': disabled,\n })}\n className={className}\n style={style}\n ref={rootElRef}\n >\n {removable\n ? <Removable removePlaceholder={removePlaceholder} onRemove={(e) => onRemove(e, rootElRef?.current)}>{simpleCell}</Removable>\n : simpleCell\n }\n </div>\n );\n};\n\nCell.defaultProps = {\n removePlaceholder: 'Удалить',\n};\n"],"file":"Cell.js"}
@@ -6,7 +6,7 @@ import './ChipsSelect.css';
6
6
  export interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {
7
7
  popupDirection?: 'top' | 'bottom';
8
8
  options?: Option[];
9
- filterFn?: (value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean;
9
+ filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);
10
10
  /**
11
11
  * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)
12
12
  */
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["style", "onFocus", "onKeyDown", "className", "fetching", "renderOption", "emptyText", "getRef", "getRootRef", "disabled", "placeholder", "tabIndex", "getOptionValue", "getOptionLabel", "showSelected", "getNewOptionData", "renderChip", "popupDirection", "creatable", "filterFn", "inputValue", "creatableText", "sizeY", "closeAfterSelect", "onChangeStart", "after"],
5
+ var _excluded = ["style", "onFocus", "onKeyDown", "className", "fetching", "renderOption", "emptyText", "getRef", "getRootRef", "disabled", "placeholder", "tabIndex", "getOptionValue", "getOptionLabel", "showSelected", "getNewOptionData", "renderChip", "popupDirection", "creatable", "filterFn", "inputValue", "creatableText", "sizeY", "closeAfterSelect", "onChangeStart", "after", "options"],
6
6
  _excluded2 = ["option"];
7
7
  import { createScopedElement } from "../../lib/jsxRuntime";
8
8
  import * as React from 'react';
@@ -20,6 +20,7 @@ import Caption from "../Typography/Caption/Caption";
20
20
  import { prefixClass } from "../../lib/prefixClass";
21
21
  import { useExternRef } from "../../hooks/useExternRef";
22
22
  import { useGlobalEventListener } from "../../hooks/useGlobalEventListener";
23
+ import { defaultFilterFn } from "../../lib/select";
23
24
  var FOCUS_ACTION_NEXT = 'next';
24
25
  var FOCUS_ACTION_PREV = 'prev';
25
26
 
@@ -52,6 +53,7 @@ var ChipsSelect = function ChipsSelect(props) {
52
53
  closeAfterSelect = props.closeAfterSelect,
53
54
  onChangeStart = props.onChangeStart,
54
55
  after = props.after,
56
+ options = props.options,
55
57
  restProps = _objectWithoutProperties(props, _excluded);
56
58
 
57
59
  var _useDOM = useDOM(),
@@ -310,11 +312,7 @@ var chipsSelectDefaultProps = _objectSpread(_objectSpread({}, chipsInputDefaultP
310
312
  showSelected: true,
311
313
  closeAfterSelect: true,
312
314
  options: [],
313
- filterFn: function filterFn(value, option, getOptionLabel) {
314
- var _getOptionLabel, _getOptionLabel$toLow;
315
-
316
- return !value || value && ((_getOptionLabel = getOptionLabel(option)) === null || _getOptionLabel === void 0 ? void 0 : (_getOptionLabel$toLow = _getOptionLabel.toLowerCase()) === null || _getOptionLabel$toLow === void 0 ? void 0 : _getOptionLabel$toLow.startsWith(value === null || value === void 0 ? void 0 : value.toLowerCase()));
317
- },
315
+ filterFn: defaultFilterFn,
318
316
  renderOption: function renderOption(_ref2) {
319
317
  var option = _ref2.option,
320
318
  restProps = _objectWithoutProperties(_ref2, _excluded2);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["React","Icon20Dropdown","classNames","Spinner","CustomScrollView","ChipsInput","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","withAdaptivity","noop","useDOM","Caption","prefixClass","useExternRef","useGlobalEventListener","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","restProps","document","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","options","toLowerCase","startsWith","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown } from '@vkontakte/icons';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: (value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean;\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\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 const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<Icon20Dropdown />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n\n return (\n <React.Fragment key={getOptionValue(option)}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: (value?: string, option?: ChipsInputOption, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => {\n return (\n !value || value && getOptionLabel(option)?.toLowerCase()?.startsWith(value?.toLowerCase())\n );\n },\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["React","Icon20Dropdown","classNames","Spinner","CustomScrollView","ChipsInput","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","withAdaptivity","noop","useDOM","Caption","prefixClass","useExternRef","useGlobalEventListener","defaultFilterFn","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","options","restProps","document","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown } from '@vkontakte/icons';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { defaultFilterFn } from '../../lib/select';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, options, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\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 const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<Icon20Dropdown />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n\n return (\n <React.Fragment key={getOptionValue(option)}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
@@ -43,9 +43,9 @@ export var useChipsSelect = function useChipsSelect(props) {
43
43
  };
44
44
 
45
45
  var filteredOptions = React.useMemo(function () {
46
- return options.filter(function (option) {
46
+ return filterFn ? options.filter(function (option) {
47
47
  return filterFn(fieldValue, option, getOptionLabel);
48
- });
48
+ }) : options;
49
49
  }, [options, filterFn, fieldValue, getOptionLabel]);
50
50
  filteredOptions = React.useMemo(function () {
51
51
  if (!filteredOptions.length) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"names":["React","useChipsInput","useChipsSelect","props","options","filterFn","getOptionLabel","getOptionValue","showSelected","useState","opened","setOpened","focusedOptionIndex","setFocusedOptionIndex","focusedOption","setFocusedOption","fieldValue","selectedOptions","chipsInputState","handleInputChange","e","filteredOptions","useMemo","filter","option","length","filteredSet","Set","selected","map","item","includes","delete"],"mappings":";;;;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,SAASC,aAAT;AAGA,OAAO,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAkCC,KAAlC,EAA+E;AAC3G,MAAQC,OAAR,GAA4ED,KAA5E,CAAQC,OAAR;AAAA,MAAiBC,QAAjB,GAA4EF,KAA5E,CAAiBE,QAAjB;AAAA,MAA2BC,cAA3B,GAA4EH,KAA5E,CAA2BG,cAA3B;AAAA,MAA2CC,cAA3C,GAA4EJ,KAA5E,CAA2CI,cAA3C;AAAA,MAA2DC,YAA3D,GAA4EL,KAA5E,CAA2DK,YAA3D;;AAEA,wBAA4BR,KAAK,CAACS,QAAN,CAAe,KAAf,CAA5B;AAAA;AAAA,MAAOC,MAAP;AAAA,MAAeC,SAAf;;AACA,yBAAoDX,KAAK,CAACS,QAAN,CAAuB,CAAvB,CAApD;AAAA;AAAA,MAAOG,kBAAP;AAAA,MAA2BC,qBAA3B;;AACA,yBAA0Cb,KAAK,CAACS,QAAN,CAAuB,IAAvB,CAA1C;AAAA;AAAA,MAAOK,aAAP;AAAA,MAAsBC,gBAAtB;;AAEA,uBAA4Dd,aAAa,CAACE,KAAD,CAAzE;AAAA,MAAQa,UAAR,kBAAQA,UAAR;AAAA,MAAoBC,eAApB,kBAAoBA,eAApB;AAAA,MAAwCC,eAAxC;;AAEA,MAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,CAAD,EAA4C;AACpEF,IAAAA,eAAe,CAACC,iBAAhB,CAAkCC,CAAlC;;AAEA,QAAI,CAACV,MAAL,EAAa;AACXC,MAAAA,SAAS,CAAC,IAAD,CAAT;AACAE,MAAAA,qBAAqB,CAAC,CAAD,CAArB;AACD;AACF,GAPD;;AASA,MAAIQ,eAAe,GAAGrB,KAAK,CAACsB,OAAN,CAAc,YAAM;AACxC,WAAOlB,OAAO,CAACmB,MAAR,CAAe,UAACC,MAAD;AAAA,aAAoBnB,QAAQ,CAACW,UAAD,EAAaQ,MAAb,EAAqBlB,cAArB,CAA5B;AAAA,KAAf,CAAP;AACD,GAFqB,EAEnB,CAACF,OAAD,EAAUC,QAAV,EAAoBW,UAApB,EAAgCV,cAAhC,CAFmB,CAAtB;AAIAe,EAAAA,eAAe,GAAGrB,KAAK,CAACsB,OAAN,CAAc,YAAM;AACpC,QAAI,CAACD,eAAe,CAACI,MAArB,EAA6B;AAC3B,aAAOJ,eAAP;AACD;;AAED,QAAMK,WAAW,GAAG,IAAIC,GAAJ,CAAQN,eAAR,CAApB;AACA,QAAMO,QAAQ,GAAGX,eAAe,CAACY,GAAhB,CAAoB,UAACC,IAAD;AAAA,aAAUvB,cAAc,CAACuB,IAAD,CAAxB;AAAA,KAApB,CAAjB;;AANoC,+CAQjBJ,WARiB;AAAA;;AAAA;AAQpC,0DAAgC;AAAA,YAArBI,IAAqB;;AAC9B,YAAIF,QAAQ,CAACG,QAAT,CAAkBxB,cAAc,CAACuB,IAAD,CAAhC,CAAJ,EAA6C;AAC3CJ,UAAAA,WAAW,CAACM,MAAZ,CAAmBF,IAAnB;AACD;AACF;AAZmC;AAAA;AAAA;AAAA;AAAA;;AAcpC,8BAAWJ,WAAX;AACD,GAfiB,EAef,CAAClB,YAAD,EAAea,eAAf,EAAgCJ,eAAhC,CAfe,CAAlB;AAiBA,yCACKC,eADL;AACsBF,IAAAA,UAAU,EAAVA,UADtB;AACkCG,IAAAA,iBAAiB,EAAjBA,iBADlC;AACqDT,IAAAA,MAAM,EAANA,MADrD;AAC6DC,IAAAA,SAAS,EAATA,SAD7D;AACwEU,IAAAA,eAAe,EAAfA,eADxE;AAEET,IAAAA,kBAAkB,EAAlBA,kBAFF;AAEsBC,IAAAA,qBAAqB,EAArBA,qBAFtB;AAE6CC,IAAAA,aAAa,EAAbA,aAF7C;AAE4DC,IAAAA,gBAAgB,EAAhBA,gBAF5D;AAE8EE,IAAAA,eAAe,EAAfA;AAF9E;AAID,CA3CM","sourcesContent":["import * as React from 'react';\nimport { ChipsInputOption } from '../ChipsInput/ChipsInput';\nimport { useChipsInput } from '../ChipsInput/useChipsInput';\nimport { ChipsSelectProps } from './ChipsSelect';\n\nexport const useChipsSelect = <Option extends ChipsInputOption>(props: Partial<ChipsSelectProps<Option>>) => {\n const { options, filterFn, getOptionLabel, getOptionValue, showSelected } = props;\n\n const [opened, setOpened] = React.useState(false);\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number>(0);\n const [focusedOption, setFocusedOption] = React.useState<Option>(null);\n\n const { fieldValue, selectedOptions, ...chipsInputState } = useChipsInput(props);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n chipsInputState.handleInputChange(e);\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n }\n };\n\n let filteredOptions = React.useMemo(() => {\n return options.filter((option: Option) => filterFn(fieldValue, option, getOptionLabel));\n }, [options, filterFn, fieldValue, getOptionLabel]);\n\n filteredOptions = React.useMemo(() => {\n if (!filteredOptions.length) {\n return filteredOptions;\n }\n\n const filteredSet = new Set(filteredOptions);\n const selected = selectedOptions.map((item) => getOptionValue(item));\n\n for (const item of filteredSet) {\n if (selected.includes(getOptionValue(item))) {\n filteredSet.delete(item);\n }\n }\n\n return [...filteredSet];\n }, [showSelected, filteredOptions, selectedOptions]);\n\n return {\n ...chipsInputState, fieldValue, handleInputChange, opened, setOpened, filteredOptions,\n focusedOptionIndex, setFocusedOptionIndex, focusedOption, setFocusedOption, selectedOptions,\n };\n};\n"],"file":"useChipsSelect.js"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"names":["React","useChipsInput","useChipsSelect","props","options","filterFn","getOptionLabel","getOptionValue","showSelected","useState","opened","setOpened","focusedOptionIndex","setFocusedOptionIndex","focusedOption","setFocusedOption","fieldValue","selectedOptions","chipsInputState","handleInputChange","e","filteredOptions","useMemo","filter","option","length","filteredSet","Set","selected","map","item","includes","delete"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { ChipsInputOption } from '../ChipsInput/ChipsInput';\nimport { useChipsInput } from '../ChipsInput/useChipsInput';\nimport { ChipsSelectProps } from './ChipsSelect';\n\nexport const useChipsSelect = <Option extends ChipsInputOption>(props: Partial<ChipsSelectProps<Option>>) => {\n const { options, filterFn, getOptionLabel, getOptionValue, showSelected } = props;\n\n const [opened, setOpened] = React.useState(false);\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number>(0);\n const [focusedOption, setFocusedOption] = React.useState<Option>(null);\n\n const { fieldValue, selectedOptions, ...chipsInputState } = useChipsInput(props);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n chipsInputState.handleInputChange(e);\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n }\n };\n\n let filteredOptions = React.useMemo(() => {\n return filterFn ? options.filter((option: Option) => filterFn(fieldValue, option, getOptionLabel)) : options;\n }, [options, filterFn, fieldValue, getOptionLabel]);\n\n filteredOptions = React.useMemo(() => {\n if (!filteredOptions.length) {\n return filteredOptions;\n }\n\n const filteredSet = new Set(filteredOptions);\n const selected = selectedOptions.map((item) => getOptionValue(item));\n\n for (const item of filteredSet) {\n if (selected.includes(getOptionValue(item))) {\n filteredSet.delete(item);\n }\n }\n\n return [...filteredSet];\n }, [showSelected, filteredOptions, selectedOptions]);\n\n return {\n ...chipsInputState, fieldValue, handleInputChange, opened, setOpened, filteredOptions,\n focusedOptionIndex, setFocusedOptionIndex, focusedOption, setFocusedOption, selectedOptions,\n };\n};\n"],"file":"useChipsSelect.js"}
@@ -38,7 +38,7 @@ export interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormF
38
38
  /**
39
39
  * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.
40
40
  */
41
- filterFn?: false | ((value: string, option: CustomSelectOptionInterface) => boolean);
41
+ filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);
42
42
  popupDirection?: 'top' | 'bottom';
43
43
  /**
44
44
  * Рендер-проп для кастомного рендера опции.
@@ -76,7 +76,7 @@ declare class CustomSelect extends React.Component<CustomSelectProps, CustomSele
76
76
  [index: string]: any;
77
77
  value: string | number | readonly string[];
78
78
  label: string;
79
- }[], inputValue: string, filterFn: false | ((value: string, option: CustomSelectOptionInterface) => boolean)) => {
79
+ }[], inputValue: string, filterFn: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean)) => {
80
80
  [index: string]: any;
81
81
  value: string | number | readonly string[];
82
82
  label: string;
@@ -23,6 +23,7 @@ import { Icon20Dropdown, Icon24Dropdown } from '@vkontakte/icons';
23
23
  import Caption from "../Typography/Caption/Caption";
24
24
  import { warnOnce } from "../../lib/warnOnce";
25
25
  import Spinner from "../Spinner/Spinner";
26
+ import { defaultFilterFn } from "../../lib/select";
26
27
 
27
28
  var findIndexAfter = function findIndexAfter(options) {
28
29
  var startIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
@@ -609,9 +610,7 @@ _defineProperty(CustomSelect, "defaultProps", {
609
610
  },
610
611
  options: [],
611
612
  emptyText: 'Ничего не найдено',
612
- filterFn: function filterFn(value, option) {
613
- return option.label.toLowerCase().includes(value.toLowerCase());
614
- }
613
+ filterFn: defaultFilterFn
615
614
  });
616
615
 
617
616
  export default withPlatform(withAdaptivity(CustomSelect, {
@@ -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,18 +1,13 @@
1
1
  import * as React from 'react';
2
- import { HasPlatform, HasRef, HasRootRef } from '../../types';
3
- import { SplitColContextProps } from '../SplitCol/SplitCol';
2
+ import { HasRef, HasRootRef } from '../../types';
4
3
  import './FixedLayout.css';
5
- export interface FixedLayoutProps extends React.HTMLAttributes<HTMLDivElement>, HasRootRef<HTMLDivElement>, HasRef<HTMLDivElement>, HasPlatform {
4
+ export interface FixedLayoutProps extends React.HTMLAttributes<HTMLDivElement>, HasRootRef<HTMLDivElement>, HasRef<HTMLDivElement> {
6
5
  vertical?: 'top' | 'bottom';
7
6
  /**
8
7
  * Это свойство определяет, будет ли фон компонента окрашен в цвет фона контента.
9
8
  * Это часто необходимо для фиксированных кнопок в нижней части экрана.
10
9
  */
11
10
  filled?: boolean;
12
- /**
13
- * @ignore
14
- */
15
- splitCol?: SplitColContextProps;
16
11
  }
17
12
  export interface FixedLayoutState {
18
13
  position: 'absolute' | null;
@@ -20,5 +15,5 @@ export interface FixedLayoutState {
20
15
  bottom: number;
21
16
  width: string;
22
17
  }
23
- declare const _default: React.FC<FixedLayoutProps>;
24
- export default _default;
18
+ declare const FixedLayout: React.FC<FixedLayoutProps>;
19
+ export default FixedLayout;