@vkontakte/vkui 4.34.0 → 4.35.0

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 (690) hide show
  1. package/.browserslistrc +5 -0
  2. package/.cache/.eslintcache +1 -1
  3. package/.cache/.stylelintcache +1 -1
  4. package/.cache/.tsbuildinfo +291 -268
  5. package/.cache/ts/src/components/ActionSheetItem/ActionSheetItem.d.ts +1 -1
  6. package/.cache/ts/src/components/AppRoot/AppRoot.d.ts +1 -1
  7. package/.cache/ts/src/components/Button/Button.d.ts +1 -1
  8. package/.cache/ts/src/components/CardGrid/CardGrid.d.ts +1 -1
  9. package/.cache/ts/src/components/Checkbox/Checkbox.d.ts +1 -1
  10. package/.cache/ts/src/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  11. package/.cache/ts/src/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  12. package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +1 -1
  13. package/.cache/ts/src/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -1
  14. package/.cache/ts/src/components/DatePicker/DatePicker.d.ts +1 -1
  15. package/.cache/ts/src/components/Dropdown/Dropdown.d.ts +46 -5
  16. package/.cache/ts/src/components/Epic/Epic.d.ts +1 -1
  17. package/.cache/ts/src/components/FocusTrap/FocusTrap.d.ts +1 -1
  18. package/.cache/ts/src/components/Group/Group.d.ts +1 -1
  19. package/.cache/ts/src/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  20. package/.cache/ts/src/components/IconButton/IconButton.d.ts +1 -1
  21. package/.cache/ts/src/components/Input/Input.d.ts +1 -1
  22. package/.cache/ts/src/components/ModalCard/ModalCard.d.ts +1 -1
  23. package/.cache/ts/src/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  24. package/.cache/ts/src/components/ModalPage/ModalPage.d.ts +1 -1
  25. package/.cache/ts/src/components/ModalRoot/ModalRoot.d.ts +1 -1
  26. package/.cache/ts/src/components/ModalRoot/ModalRootAdaptive.d.ts +1 -1
  27. package/.cache/ts/src/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  28. package/.cache/ts/src/components/NativeSelect/NativeSelect.d.ts +1 -1
  29. package/.cache/ts/src/components/Panel/Panel.d.ts +1 -1
  30. package/.cache/ts/src/components/PanelHeader/PanelHeader.d.ts +1 -1
  31. package/.cache/ts/src/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
  32. package/.cache/ts/src/components/PopoutRoot/PopoutRoot.d.ts +1 -1
  33. package/.cache/ts/src/components/Popper/Popper.d.ts +18 -1
  34. package/.cache/ts/src/components/PopperArrow/PopperArrow.d.ts +8 -0
  35. package/.cache/ts/src/components/Radio/Radio.d.ts +1 -1
  36. package/.cache/ts/src/components/RangeSlider/UniversalSlider.d.ts +1 -1
  37. package/.cache/ts/src/components/RichCell/RichCell.d.ts +1 -1
  38. package/.cache/ts/src/components/RichTooltip/RichTooltip.d.ts +7 -2
  39. package/.cache/ts/src/components/Search/Search.d.ts +1 -1
  40. package/.cache/ts/src/components/Select/Select.d.ts +1 -1
  41. package/.cache/ts/src/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  42. package/.cache/ts/src/components/SimpleCell/SimpleCell.d.ts +1 -1
  43. package/.cache/ts/src/components/Snackbar/Snackbar.d.ts +5 -1
  44. package/.cache/ts/src/components/SplitCol/SplitCol.d.ts +1 -0
  45. package/.cache/ts/src/components/Tabbar/Tabbar.d.ts +8 -1
  46. package/.cache/ts/src/components/Tabs/Tabs.d.ts +14 -3
  47. package/.cache/ts/src/components/TabsItem/TabsItem.d.ts +22 -1
  48. package/.cache/ts/src/components/Tappable/Tappable.d.ts +1 -1
  49. package/.cache/ts/src/components/TextTooltip/TextTooltip.d.ts +5 -1
  50. package/.cache/ts/src/components/Textarea/Textarea.d.ts +4 -1
  51. package/.cache/ts/src/components/Tooltip/Tooltip.d.ts +18 -1
  52. package/.cache/ts/src/components/Typography/Headline/Headline.d.ts +3 -3
  53. package/.cache/ts/src/components/View/View.d.ts +2 -18
  54. package/.cache/ts/src/components/View/ViewInfinite.d.ts +1 -1
  55. package/.cache/ts/src/components/WriteBar/WriteBar.d.ts +5 -1
  56. package/.cache/ts/src/hoc/withAdaptivity.d.ts +1 -1
  57. package/.cache/ts/src/hoc/withContext.d.ts +1 -1
  58. package/.cache/ts/src/hoc/withPlatform.d.ts +1 -1
  59. package/.cache/ts/src/tokenized/index.d.ts +26 -0
  60. package/.eslintrc.json +14 -4
  61. package/dist/cjs/components/AppRoot/AppRoot.js +13 -15
  62. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  63. package/dist/cjs/components/Button/Button.js +6 -4
  64. package/dist/cjs/components/Button/Button.js.map +1 -1
  65. package/dist/cjs/components/CardScroll/CardScroll.js +3 -1
  66. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  67. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +5 -0
  68. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  69. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js +7 -1
  70. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  71. package/dist/cjs/components/CustomSelect/CustomSelect.js +477 -553
  72. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  73. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js +73 -35
  74. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  75. package/dist/cjs/components/Dropdown/Dropdown.js +147 -26
  76. package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -1
  77. package/dist/cjs/components/Epic/Epic.js +1 -6
  78. package/dist/cjs/components/Epic/Epic.js.map +1 -1
  79. package/dist/cjs/components/FocusTrap/FocusTrap.js +9 -10
  80. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  81. package/dist/cjs/components/FormField/FormField.js +4 -10
  82. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  83. package/dist/cjs/components/HorizontalCell/HorizontalCell.js +4 -7
  84. package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
  85. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +1 -0
  86. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  87. package/dist/cjs/components/Input/Input.js +3 -6
  88. package/dist/cjs/components/Input/Input.js.map +1 -1
  89. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js +2 -2
  90. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  91. package/dist/cjs/components/ModalCardBase/ModalCardBase.js +1 -0
  92. package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
  93. package/dist/cjs/components/NativeSelect/NativeSelect.js +1 -0
  94. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  95. package/dist/cjs/components/Panel/Panel.js +1 -0
  96. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  97. package/dist/cjs/components/PanelHeader/PanelHeader.js +1 -0
  98. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  99. package/dist/cjs/components/Popper/Popper.js +16 -22
  100. package/dist/cjs/components/Popper/Popper.js.map +1 -1
  101. package/dist/cjs/components/PopperArrow/PopperArrow.js +40 -0
  102. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -0
  103. package/dist/cjs/components/Radio/Radio.js +1 -0
  104. package/dist/cjs/components/Radio/Radio.js.map +1 -1
  105. package/dist/cjs/components/RangeSlider/UniversalSlider.js +1 -0
  106. package/dist/cjs/components/RangeSlider/UniversalSlider.js.map +1 -1
  107. package/dist/cjs/components/RichTooltip/RichTooltip.js +6 -15
  108. package/dist/cjs/components/RichTooltip/RichTooltip.js.map +1 -1
  109. package/dist/cjs/components/Select/Select.js +1 -0
  110. package/dist/cjs/components/Select/Select.js.map +1 -1
  111. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +4 -1
  112. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  113. package/dist/cjs/components/SimpleCell/SimpleCell.js +21 -31
  114. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  115. package/dist/cjs/components/Snackbar/Snackbar.js +7 -11
  116. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  117. package/dist/cjs/components/SplitCol/SplitCol.js +7 -1
  118. package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
  119. package/dist/cjs/components/SplitLayout/SplitLayout.js +5 -8
  120. package/dist/cjs/components/SplitLayout/SplitLayout.js.map +1 -1
  121. package/dist/cjs/components/Tabbar/Tabbar.js +15 -14
  122. package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
  123. package/dist/cjs/components/TabbarItem/TabbarItem.js +8 -10
  124. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  125. package/dist/cjs/components/Tabs/Tabs.js +23 -5
  126. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  127. package/dist/cjs/components/TabsItem/TabsItem.js +39 -22
  128. package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
  129. package/dist/cjs/components/TextTooltip/TextTooltip.js +6 -9
  130. package/dist/cjs/components/TextTooltip/TextTooltip.js.map +1 -1
  131. package/dist/cjs/components/Textarea/Textarea.js +5 -4
  132. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  133. package/dist/cjs/components/Tooltip/Tooltip.js +94 -71
  134. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  135. package/dist/cjs/components/Typography/Headline/Headline.js +11 -2
  136. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  137. package/dist/cjs/components/View/View.js +388 -453
  138. package/dist/cjs/components/View/View.js.map +1 -1
  139. package/dist/cjs/components/WriteBar/WriteBar.js +12 -5
  140. package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
  141. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js +3 -8
  142. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  143. package/dist/cjs/hoc/withAdaptivity.js.map +1 -1
  144. package/dist/cjs/hoc/withContext.js.map +1 -1
  145. package/dist/cjs/hoc/withPlatform.js.map +1 -1
  146. package/dist/cjs/hooks/useOrientationChange.js +2 -1
  147. package/dist/cjs/hooks/useOrientationChange.js.map +1 -1
  148. package/dist/cjs/tokenized/index.js +104 -0
  149. package/dist/cjs/tokenized/index.js.map +1 -1
  150. package/dist/components/ActionSheetItem/ActionSheetItem.d.ts +1 -1
  151. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  152. package/dist/components/AppRoot/AppRoot.js +13 -15
  153. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  154. package/dist/components/Button/Button.d.ts +1 -1
  155. package/dist/components/Button/Button.js +6 -4
  156. package/dist/components/Button/Button.js.map +1 -1
  157. package/dist/components/CardGrid/CardGrid.d.ts +1 -1
  158. package/dist/components/CardScroll/CardScroll.js +3 -1
  159. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  160. package/dist/components/Checkbox/Checkbox.d.ts +1 -1
  161. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  162. package/dist/components/ChipsSelect/ChipsSelect.js +5 -0
  163. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  164. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  165. package/dist/components/ConfigProvider/ConfigProviderContext.js +3 -0
  166. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  167. package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
  168. package/dist/components/CustomSelect/CustomSelect.js +473 -579
  169. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  170. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -1
  171. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +71 -35
  172. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  173. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  174. package/dist/components/Dropdown/Dropdown.d.ts +46 -5
  175. package/dist/components/Dropdown/Dropdown.js +137 -27
  176. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  177. package/dist/components/Epic/Epic.d.ts +1 -1
  178. package/dist/components/Epic/Epic.js +1 -4
  179. package/dist/components/Epic/Epic.js.map +1 -1
  180. package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
  181. package/dist/components/FocusTrap/FocusTrap.js +9 -9
  182. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  183. package/dist/components/FormField/FormField.js +4 -8
  184. package/dist/components/FormField/FormField.js.map +1 -1
  185. package/dist/components/Group/Group.d.ts +1 -1
  186. package/dist/components/HorizontalCell/HorizontalCell.js +3 -5
  187. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  188. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  189. package/dist/components/HorizontalScroll/HorizontalScroll.js +1 -0
  190. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  191. package/dist/components/IconButton/IconButton.d.ts +1 -1
  192. package/dist/components/Input/Input.d.ts +1 -1
  193. package/dist/components/Input/Input.js +3 -4
  194. package/dist/components/Input/Input.js.map +1 -1
  195. package/dist/components/MiniInfoCell/MiniInfoCell.js +2 -2
  196. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  197. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  198. package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  199. package/dist/components/ModalCardBase/ModalCardBase.js +1 -0
  200. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  201. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  202. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  203. package/dist/components/ModalRoot/ModalRootAdaptive.d.ts +1 -1
  204. package/dist/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  205. package/dist/components/NativeSelect/NativeSelect.d.ts +1 -1
  206. package/dist/components/NativeSelect/NativeSelect.js +1 -0
  207. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  208. package/dist/components/Panel/Panel.d.ts +1 -1
  209. package/dist/components/Panel/Panel.js +1 -0
  210. package/dist/components/Panel/Panel.js.map +1 -1
  211. package/dist/components/PanelHeader/PanelHeader.d.ts +1 -1
  212. package/dist/components/PanelHeader/PanelHeader.js +1 -0
  213. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  214. package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
  215. package/dist/components/PopoutRoot/PopoutRoot.d.ts +1 -1
  216. package/dist/components/Popper/Popper.d.ts +18 -1
  217. package/dist/components/Popper/Popper.js +15 -22
  218. package/dist/components/Popper/Popper.js.map +1 -1
  219. package/dist/components/PopperArrow/PopperArrow.d.ts +8 -0
  220. package/dist/components/PopperArrow/PopperArrow.js +27 -0
  221. package/dist/components/PopperArrow/PopperArrow.js.map +1 -0
  222. package/dist/components/Radio/Radio.d.ts +1 -1
  223. package/dist/components/Radio/Radio.js +1 -0
  224. package/dist/components/Radio/Radio.js.map +1 -1
  225. package/dist/components/RangeSlider/UniversalSlider.d.ts +1 -1
  226. package/dist/components/RangeSlider/UniversalSlider.js +1 -0
  227. package/dist/components/RangeSlider/UniversalSlider.js.map +1 -1
  228. package/dist/components/RichCell/RichCell.d.ts +1 -1
  229. package/dist/components/RichTooltip/RichTooltip.d.ts +7 -2
  230. package/dist/components/RichTooltip/RichTooltip.js +5 -10
  231. package/dist/components/RichTooltip/RichTooltip.js.map +1 -1
  232. package/dist/components/Search/Search.d.ts +1 -1
  233. package/dist/components/Select/Select.d.ts +1 -1
  234. package/dist/components/Select/Select.js +1 -0
  235. package/dist/components/Select/Select.js.map +1 -1
  236. package/dist/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  237. package/dist/components/SelectMimicry/SelectMimicry.js +4 -1
  238. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  239. package/dist/components/SimpleCell/SimpleCell.d.ts +1 -1
  240. package/dist/components/SimpleCell/SimpleCell.js +19 -28
  241. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  242. package/dist/components/Snackbar/Snackbar.d.ts +5 -1
  243. package/dist/components/Snackbar/Snackbar.js +8 -11
  244. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  245. package/dist/components/SplitCol/SplitCol.d.ts +1 -0
  246. package/dist/components/SplitCol/SplitCol.js +3 -0
  247. package/dist/components/SplitCol/SplitCol.js.map +1 -1
  248. package/dist/components/SplitLayout/SplitLayout.js +4 -7
  249. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  250. package/dist/components/Tabbar/Tabbar.d.ts +8 -1
  251. package/dist/components/Tabbar/Tabbar.js +15 -14
  252. package/dist/components/Tabbar/Tabbar.js.map +1 -1
  253. package/dist/components/TabbarItem/TabbarItem.js +7 -9
  254. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  255. package/dist/components/Tabs/Tabs.d.ts +14 -3
  256. package/dist/components/Tabs/Tabs.js +23 -5
  257. package/dist/components/Tabs/Tabs.js.map +1 -1
  258. package/dist/components/TabsItem/TabsItem.d.ts +22 -1
  259. package/dist/components/TabsItem/TabsItem.js +40 -21
  260. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  261. package/dist/components/Tappable/Tappable.d.ts +1 -1
  262. package/dist/components/TextTooltip/TextTooltip.d.ts +5 -1
  263. package/dist/components/TextTooltip/TextTooltip.js +5 -7
  264. package/dist/components/TextTooltip/TextTooltip.js.map +1 -1
  265. package/dist/components/Textarea/Textarea.d.ts +4 -1
  266. package/dist/components/Textarea/Textarea.js +5 -4
  267. package/dist/components/Textarea/Textarea.js.map +1 -1
  268. package/dist/components/Tooltip/Tooltip.d.ts +18 -1
  269. package/dist/components/Tooltip/Tooltip.js +89 -68
  270. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  271. package/dist/components/Typography/Headline/Headline.d.ts +3 -3
  272. package/dist/components/Typography/Headline/Headline.js +10 -2
  273. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  274. package/dist/components/View/View.d.ts +2 -18
  275. package/dist/components/View/View.js +384 -462
  276. package/dist/components/View/View.js.map +1 -1
  277. package/dist/components/View/ViewInfinite.d.ts +1 -1
  278. package/dist/components/WriteBar/WriteBar.d.ts +5 -1
  279. package/dist/components/WriteBar/WriteBar.js +10 -5
  280. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  281. package/dist/components/WriteBarIcon/WriteBarIcon.js +3 -6
  282. package/dist/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  283. package/dist/components.css +143 -127
  284. package/dist/components.css.map +1 -1
  285. package/dist/cssm/components/ActionSheet/ActionSheet.css +1 -1
  286. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +1 -1
  287. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.d.ts +1 -1
  288. package/dist/cssm/components/Alert/Alert.css +1 -1
  289. package/dist/cssm/components/AppRoot/AppRoot.css +1 -1
  290. package/dist/cssm/components/AppRoot/AppRoot.d.ts +1 -1
  291. package/dist/cssm/components/AppRoot/AppRoot.js +13 -15
  292. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  293. package/dist/cssm/components/Avatar/Avatar.css +3 -5
  294. package/dist/cssm/components/Badge/Badge.css +3 -3
  295. package/dist/cssm/components/Banner/Banner.css +5 -5
  296. package/dist/cssm/components/BaseGallery/BaseGallery.css +1 -1
  297. package/dist/cssm/components/Button/Button.css +53 -35
  298. package/dist/cssm/components/Button/Button.d.ts +1 -1
  299. package/dist/cssm/components/Button/Button.js +6 -4
  300. package/dist/cssm/components/Button/Button.js.map +1 -1
  301. package/dist/cssm/components/Calendar/Calendar.css +1 -1
  302. package/dist/cssm/components/CalendarDay/CalendarDay.css +1 -1
  303. package/dist/cssm/components/CalendarDays/CalendarDays.css +1 -1
  304. package/dist/cssm/components/CalendarHeader/CalendarHeader.css +1 -1
  305. package/dist/cssm/components/CalendarRange/CalendarRange.css +1 -1
  306. package/dist/cssm/components/CalendarTime/CalendarTime.css +1 -1
  307. package/dist/cssm/components/Card/Card.css +5 -6
  308. package/dist/cssm/components/CardGrid/CardGrid.css +1 -1
  309. package/dist/cssm/components/CardGrid/CardGrid.d.ts +1 -1
  310. package/dist/cssm/components/CardScroll/CardScroll.css +1 -1
  311. package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
  312. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  313. package/dist/cssm/components/Cell/Cell.css +3 -3
  314. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -1
  315. package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -1
  316. package/dist/cssm/components/CellButton/CellButton.css +1 -1
  317. package/dist/cssm/components/Checkbox/Checkbox.css +1 -1
  318. package/dist/cssm/components/Checkbox/Checkbox.d.ts +1 -1
  319. package/dist/cssm/components/Chip/Chip.css +1 -1
  320. package/dist/cssm/components/ChipsInput/ChipsInput.css +1 -1
  321. package/dist/cssm/components/ChipsSelect/ChipsSelect.css +1 -1
  322. package/dist/cssm/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  323. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +5 -0
  324. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  325. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  326. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +3 -0
  327. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  328. package/dist/cssm/components/ContentCard/ContentCard.css +1 -1
  329. package/dist/cssm/components/Counter/Counter.css +31 -31
  330. package/dist/cssm/components/CustomScrollView/CustomScrollView.css +1 -1
  331. package/dist/cssm/components/CustomSelect/CustomSelect.css +1 -1
  332. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
  333. package/dist/cssm/components/CustomSelect/CustomSelect.js +473 -579
  334. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  335. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.css +3 -3
  336. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -1
  337. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +71 -35
  338. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  339. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.css +3 -3
  340. package/dist/cssm/components/DateInput/DateInput.css +1 -1
  341. package/dist/cssm/components/DatePicker/DatePicker.css +1 -1
  342. package/dist/cssm/components/DatePicker/DatePicker.d.ts +1 -1
  343. package/dist/cssm/components/DateRangeInput/DateRangeInput.css +1 -1
  344. package/dist/cssm/components/Dropdown/Dropdown.css +1 -1
  345. package/dist/cssm/components/Dropdown/Dropdown.d.ts +46 -5
  346. package/dist/cssm/components/Dropdown/Dropdown.js +137 -27
  347. package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -1
  348. package/dist/cssm/components/Epic/Epic.css +1 -1
  349. package/dist/cssm/components/Epic/Epic.d.ts +1 -1
  350. package/dist/cssm/components/Epic/Epic.js +1 -4
  351. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  352. package/dist/cssm/components/FixedLayout/FixedLayout.css +1 -1
  353. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +1 -1
  354. package/dist/cssm/components/FocusTrap/FocusTrap.js +9 -9
  355. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  356. package/dist/cssm/components/FocusVisible/FocusVisible.css +1 -1
  357. package/dist/cssm/components/Footer/Footer.css +1 -1
  358. package/dist/cssm/components/FormField/FormField.css +9 -9
  359. package/dist/cssm/components/FormField/FormField.js +4 -8
  360. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  361. package/dist/cssm/components/FormItem/FormItem.css +1 -1
  362. package/dist/cssm/components/FormLayout/FormLayout.css +1 -1
  363. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
  364. package/dist/cssm/components/FormStatus/FormStatus.css +1 -1
  365. package/dist/cssm/components/Gradient/Gradient.css +1 -1
  366. package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -1
  367. package/dist/cssm/components/Group/Group.css +1 -1
  368. package/dist/cssm/components/Group/Group.d.ts +1 -1
  369. package/dist/cssm/components/Header/Header.css +1 -1
  370. package/dist/cssm/components/HorizontalCell/HorizontalCell.css +1 -1
  371. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +3 -5
  372. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  373. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.css +1 -1
  374. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts +1 -1
  375. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +1 -0
  376. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  377. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +3 -3
  378. package/dist/cssm/components/IconButton/IconButton.css +1 -1
  379. package/dist/cssm/components/IconButton/IconButton.d.ts +1 -1
  380. package/dist/cssm/components/InfoRow/InfoRow.css +1 -1
  381. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -1
  382. package/dist/cssm/components/Input/Input.css +1 -1
  383. package/dist/cssm/components/Input/Input.d.ts +1 -1
  384. package/dist/cssm/components/Input/Input.js +3 -4
  385. package/dist/cssm/components/Input/Input.js.map +1 -1
  386. package/dist/cssm/components/InputLike/InputLike.css +1 -1
  387. package/dist/cssm/components/InputLike/InputLikeDivider.css +1 -1
  388. package/dist/cssm/components/Link/Link.css +1 -1
  389. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.css +1 -1
  390. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +2 -2
  391. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  392. package/dist/cssm/components/ModalCard/ModalCard.css +1 -1
  393. package/dist/cssm/components/ModalCard/ModalCard.d.ts +1 -1
  394. package/dist/cssm/components/ModalCardBase/ModalCardBase.css +3 -3
  395. package/dist/cssm/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  396. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +1 -0
  397. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  398. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.css +1 -1
  399. package/dist/cssm/components/ModalPage/ModalPage.css +1 -1
  400. package/dist/cssm/components/ModalPage/ModalPage.d.ts +1 -1
  401. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.css +1 -1
  402. package/dist/cssm/components/ModalRoot/ModalRoot.css +1 -1
  403. package/dist/cssm/components/ModalRoot/ModalRoot.d.ts +1 -1
  404. package/dist/cssm/components/ModalRoot/ModalRootAdaptive.d.ts +1 -1
  405. package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  406. package/dist/cssm/components/NativeSelect/NativeSelect.d.ts +1 -1
  407. package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -0
  408. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  409. package/dist/cssm/components/Pagination/Pagination.css +1 -1
  410. package/dist/cssm/components/Panel/Panel.css +1 -1
  411. package/dist/cssm/components/Panel/Panel.d.ts +1 -1
  412. package/dist/cssm/components/Panel/Panel.js +1 -0
  413. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  414. package/dist/cssm/components/PanelHeader/PanelHeader.css +1 -1
  415. package/dist/cssm/components/PanelHeader/PanelHeader.d.ts +1 -1
  416. package/dist/cssm/components/PanelHeader/PanelHeader.js +1 -0
  417. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  418. package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.d.ts +1 -1
  419. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.css +1 -1
  420. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.css +1 -1
  421. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.css +1 -1
  422. package/dist/cssm/components/Placeholder/Placeholder.css +3 -3
  423. package/dist/cssm/components/PopoutRoot/PopoutRoot.css +1 -1
  424. package/dist/cssm/components/PopoutRoot/PopoutRoot.d.ts +1 -1
  425. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.css +1 -1
  426. package/dist/cssm/components/Popper/Popper.css +1 -1
  427. package/dist/cssm/components/Popper/Popper.d.ts +18 -1
  428. package/dist/cssm/components/Popper/Popper.js +15 -22
  429. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  430. package/dist/cssm/components/PopperArrow/PopperArrow.css +1 -0
  431. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +8 -0
  432. package/dist/cssm/components/PopperArrow/PopperArrow.js +28 -0
  433. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -0
  434. package/dist/cssm/components/Progress/Progress.css +1 -1
  435. package/dist/cssm/components/PromoBanner/PromoBanner.css +1 -1
  436. package/dist/cssm/components/PullToRefresh/PullToRefresh.css +3 -3
  437. package/dist/cssm/components/Radio/Radio.css +1 -1
  438. package/dist/cssm/components/Radio/Radio.d.ts +1 -1
  439. package/dist/cssm/components/Radio/Radio.js +1 -0
  440. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  441. package/dist/cssm/components/RadioGroup/RadioGroup.css +1 -1
  442. package/dist/cssm/components/RangeSlider/UniversalSlider.d.ts +1 -1
  443. package/dist/cssm/components/RangeSlider/UniversalSlider.js +1 -0
  444. package/dist/cssm/components/RangeSlider/UniversalSlider.js.map +1 -1
  445. package/dist/cssm/components/Removable/Removable.css +1 -1
  446. package/dist/cssm/components/RichCell/RichCell.css +3 -3
  447. package/dist/cssm/components/RichCell/RichCell.d.ts +1 -1
  448. package/dist/cssm/components/RichTooltip/RichTooltip.css +3 -1
  449. package/dist/cssm/components/RichTooltip/RichTooltip.d.ts +7 -2
  450. package/dist/cssm/components/RichTooltip/RichTooltip.js +5 -10
  451. package/dist/cssm/components/RichTooltip/RichTooltip.js.map +1 -1
  452. package/dist/cssm/components/Root/Root.css +1 -1
  453. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.css +1 -1
  454. package/dist/cssm/components/Search/Search.css +1 -1
  455. package/dist/cssm/components/Search/Search.d.ts +1 -1
  456. package/dist/cssm/components/SegmentedControl/SegmentedControl.css +1 -1
  457. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.css +1 -1
  458. package/dist/cssm/components/Select/Select.css +1 -1
  459. package/dist/cssm/components/Select/Select.d.ts +1 -1
  460. package/dist/cssm/components/Select/Select.js +1 -0
  461. package/dist/cssm/components/Select/Select.js.map +1 -1
  462. package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  463. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +4 -1
  464. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  465. package/dist/cssm/components/Separator/Separator.css +1 -1
  466. package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
  467. package/dist/cssm/components/SimpleCell/SimpleCell.d.ts +1 -1
  468. package/dist/cssm/components/SimpleCell/SimpleCell.js +19 -28
  469. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  470. package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.css +1 -1
  471. package/dist/cssm/components/Slider/Slider.css +3 -3
  472. package/dist/cssm/components/SliderSwitch/SliderSwitch.css +1 -1
  473. package/dist/cssm/components/Snackbar/Snackbar.css +1 -1
  474. package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
  475. package/dist/cssm/components/Snackbar/Snackbar.js +8 -11
  476. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  477. package/dist/cssm/components/Spacing/Spacing.css +1 -1
  478. package/dist/cssm/components/Spinner/Spinner.css +1 -1
  479. package/dist/cssm/components/SplitCol/SplitCol.css +1 -1
  480. package/dist/cssm/components/SplitCol/SplitCol.d.ts +1 -0
  481. package/dist/cssm/components/SplitCol/SplitCol.js +3 -0
  482. package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
  483. package/dist/cssm/components/SplitLayout/SplitLayout.css +1 -1
  484. package/dist/cssm/components/SplitLayout/SplitLayout.js +4 -7
  485. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  486. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.css +1 -1
  487. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.css +1 -1
  488. package/dist/cssm/components/Switch/Switch.css +3 -3
  489. package/dist/cssm/components/Tabbar/Tabbar.css +5 -3
  490. package/dist/cssm/components/Tabbar/Tabbar.d.ts +8 -1
  491. package/dist/cssm/components/Tabbar/Tabbar.js +15 -14
  492. package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
  493. package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
  494. package/dist/cssm/components/TabbarItem/TabbarItem.js +7 -9
  495. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  496. package/dist/cssm/components/Tabs/Tabs.css +1 -1
  497. package/dist/cssm/components/Tabs/Tabs.d.ts +14 -3
  498. package/dist/cssm/components/Tabs/Tabs.js +23 -5
  499. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  500. package/dist/cssm/components/TabsItem/TabsItem.css +5 -1
  501. package/dist/cssm/components/TabsItem/TabsItem.d.ts +22 -1
  502. package/dist/cssm/components/TabsItem/TabsItem.js +40 -21
  503. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  504. package/dist/cssm/components/Tappable/Tappable.css +5 -5
  505. package/dist/cssm/components/Tappable/Tappable.d.ts +1 -1
  506. package/dist/cssm/components/TextTooltip/TextTooltip.css +1 -1
  507. package/dist/cssm/components/TextTooltip/TextTooltip.d.ts +5 -1
  508. package/dist/cssm/components/TextTooltip/TextTooltip.js +5 -7
  509. package/dist/cssm/components/TextTooltip/TextTooltip.js.map +1 -1
  510. package/dist/cssm/components/Textarea/Textarea.css +1 -1
  511. package/dist/cssm/components/Textarea/Textarea.d.ts +4 -1
  512. package/dist/cssm/components/Textarea/Textarea.js +5 -4
  513. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  514. package/dist/cssm/components/Tooltip/Tooltip.css +1 -1
  515. package/dist/cssm/components/Tooltip/Tooltip.d.ts +18 -1
  516. package/dist/cssm/components/Tooltip/Tooltip.js +89 -68
  517. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  518. package/dist/cssm/components/Typography/Caption/Caption.css +1 -1
  519. package/dist/cssm/components/Typography/Footnote/Footnote.css +1 -1
  520. package/dist/cssm/components/Typography/Headline/Headline.css +1 -1
  521. package/dist/cssm/components/Typography/Headline/Headline.d.ts +3 -3
  522. package/dist/cssm/components/Typography/Headline/Headline.js +10 -2
  523. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  524. package/dist/cssm/components/Typography/Paragraph/Paragraph.css +1 -1
  525. package/dist/cssm/components/Typography/Subhead/Subhead.css +1 -1
  526. package/dist/cssm/components/Typography/Text/Text.css +1 -1
  527. package/dist/cssm/components/Typography/Title/Title.css +1 -1
  528. package/dist/cssm/components/UsersStack/UsersStack.css +5 -5
  529. package/dist/cssm/components/View/View.css +1 -1
  530. package/dist/cssm/components/View/View.d.ts +2 -18
  531. package/dist/cssm/components/View/View.js +384 -462
  532. package/dist/cssm/components/View/View.js.map +1 -1
  533. package/dist/cssm/components/View/ViewIOS.css +1 -1
  534. package/dist/cssm/components/View/ViewInfinite.d.ts +1 -1
  535. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.css +1 -1
  536. package/dist/cssm/components/WriteBar/WriteBar.css +3 -1
  537. package/dist/cssm/components/WriteBar/WriteBar.d.ts +5 -1
  538. package/dist/cssm/components/WriteBar/WriteBar.js +10 -5
  539. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  540. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.css +1 -1
  541. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js +3 -6
  542. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  543. package/dist/cssm/fonts/fonts.css +1 -1
  544. package/dist/cssm/hoc/withAdaptivity.d.ts +1 -1
  545. package/dist/cssm/hoc/withAdaptivity.js.map +1 -1
  546. package/dist/cssm/hoc/withContext.d.ts +1 -1
  547. package/dist/cssm/hoc/withContext.js.map +1 -1
  548. package/dist/cssm/hoc/withPlatform.d.ts +1 -1
  549. package/dist/cssm/hoc/withPlatform.js.map +1 -1
  550. package/dist/cssm/hooks/useOrientationChange.js +2 -1
  551. package/dist/cssm/hooks/useOrientationChange.js.map +1 -1
  552. package/dist/cssm/lib/calendar.d.ts +2 -2
  553. package/dist/cssm/styles/animations.css +1 -1
  554. package/dist/cssm/styles/bright_light.css +1 -1
  555. package/dist/cssm/styles/common.css +1 -1
  556. package/dist/cssm/styles/components.css +143 -127
  557. package/dist/cssm/styles/constants.css +3 -10
  558. package/dist/cssm/styles/space_gray.css +1 -1
  559. package/dist/cssm/styles/themes.css +1 -16
  560. package/dist/cssm/styles/unstable.css +3 -1
  561. package/dist/cssm/styles/vkcom_dark.css +1 -6
  562. package/dist/cssm/styles/vkcom_light.css +1 -11
  563. package/dist/cssm/tokenized/index.d.ts +26 -0
  564. package/dist/cssm/tokenized/index.js +13 -0
  565. package/dist/cssm/tokenized/index.js.map +1 -1
  566. package/dist/default_scheme.css +1 -1
  567. package/dist/default_scheme.css.map +1 -1
  568. package/dist/fonts.css +1 -1
  569. package/dist/fonts.css.map +1 -1
  570. package/dist/hoc/withAdaptivity.d.ts +1 -1
  571. package/dist/hoc/withAdaptivity.js.map +1 -1
  572. package/dist/hoc/withContext.d.ts +1 -1
  573. package/dist/hoc/withContext.js.map +1 -1
  574. package/dist/hoc/withPlatform.d.ts +1 -1
  575. package/dist/hoc/withPlatform.js.map +1 -1
  576. package/dist/hooks/useOrientationChange.js +2 -1
  577. package/dist/hooks/useOrientationChange.js.map +1 -1
  578. package/dist/lib/calendar.d.ts +2 -2
  579. package/dist/tokenized/index.d.ts +26 -0
  580. package/dist/tokenized/index.js +13 -0
  581. package/dist/tokenized/index.js.map +1 -1
  582. package/dist/unstable.css +3 -1
  583. package/dist/unstable.css.map +1 -1
  584. package/dist/vkui.css +144 -143
  585. package/dist/vkui.css.map +1 -1
  586. package/package.json +6 -5
  587. package/src/components/AppRoot/AppRoot.tsx +15 -11
  588. package/src/components/Badge/Badge.css +0 -5
  589. package/src/components/Button/Button.css +0 -4
  590. package/src/components/Button/Button.tsx +4 -2
  591. package/src/components/Button/Readme.md +30 -59
  592. package/src/components/CardScroll/CardScroll.tsx +1 -1
  593. package/src/components/Cell/Cell.css +3 -2
  594. package/src/components/ChipsInput/ChipsInput.css +2 -0
  595. package/src/components/ChipsSelect/ChipsSelect.tsx +8 -0
  596. package/src/components/ConfigProvider/ConfigProviderContext.tsx +2 -0
  597. package/src/components/Counter/Counter.css +30 -0
  598. package/src/components/CustomScrollView/CustomScrollView.css +10 -5
  599. package/src/components/CustomSelect/CustomSelect.tsx +543 -573
  600. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +45 -22
  601. package/src/components/Dropdown/Dropdown.css +12 -0
  602. package/src/components/Dropdown/Dropdown.tsx +174 -20
  603. package/src/components/Dropdown/Readme.md +1 -0
  604. package/src/components/Epic/Epic.tsx +1 -4
  605. package/src/components/FixedLayout/Readme.md +103 -109
  606. package/src/components/FocusTrap/FocusTrap.tsx +10 -10
  607. package/src/components/FormField/FormField.css +31 -22
  608. package/src/components/FormField/FormField.tsx +4 -8
  609. package/src/components/FormField/Readme.md +9 -82
  610. package/src/components/Group/Group.css +1 -1
  611. package/src/components/Group/Readme.md +1 -1
  612. package/src/components/HorizontalCell/HorizontalCell.css +25 -43
  613. package/src/components/HorizontalCell/HorizontalCell.tsx +3 -9
  614. package/src/components/HorizontalScroll/HorizontalScroll.css +23 -0
  615. package/src/components/HorizontalScroll/HorizontalScroll.tsx +2 -0
  616. package/src/components/IconButton/IconButton.css +46 -25
  617. package/src/components/Input/Input.css +20 -9
  618. package/src/components/Input/Input.tsx +6 -5
  619. package/src/components/Input/Readme.md +128 -24
  620. package/src/components/MiniInfoCell/MiniInfoCell.css +13 -3
  621. package/src/components/MiniInfoCell/MiniInfoCell.tsx +3 -3
  622. package/src/components/ModalCardBase/ModalCardBase.tsx +2 -0
  623. package/src/components/NativeSelect/NativeSelect.tsx +2 -0
  624. package/src/components/Panel/Panel.tsx +2 -0
  625. package/src/components/PanelHeader/PanelHeader.tsx +2 -0
  626. package/src/components/Popper/Popper.css +0 -35
  627. package/src/components/Popper/Popper.tsx +33 -25
  628. package/src/components/PopperArrow/PopperArrow.css +34 -0
  629. package/src/components/PopperArrow/PopperArrow.tsx +40 -0
  630. package/src/components/Radio/Radio.tsx +2 -0
  631. package/src/components/RangeSlider/UniversalSlider.tsx +2 -0
  632. package/src/components/RichTooltip/RichTooltip.css +44 -4
  633. package/src/components/RichTooltip/RichTooltip.tsx +9 -11
  634. package/src/components/ScreenSpinner/ScreenSpinner.css +1 -1
  635. package/src/components/Select/Select.css +23 -9
  636. package/src/components/Select/Select.tsx +2 -0
  637. package/src/components/SelectMimicry/SelectMimicry.tsx +6 -2
  638. package/src/components/SimpleCell/Readme.md +115 -129
  639. package/src/components/SimpleCell/SimpleCell.css +30 -68
  640. package/src/components/SimpleCell/SimpleCell.tsx +23 -25
  641. package/src/components/Snackbar/Readme.md +95 -123
  642. package/src/components/Snackbar/Snackbar.css +18 -27
  643. package/src/components/Snackbar/Snackbar.tsx +17 -11
  644. package/src/components/SplitCol/SplitCol.css +1 -1
  645. package/src/components/SplitCol/SplitCol.tsx +2 -0
  646. package/src/components/SplitLayout/SplitLayout.css +3 -7
  647. package/src/components/SplitLayout/SplitLayout.tsx +9 -6
  648. package/src/components/Switch/Switch.css +6 -2
  649. package/src/components/Tabbar/Tabbar.css +4 -1
  650. package/src/components/Tabbar/Tabbar.tsx +23 -12
  651. package/src/components/TabbarItem/TabbarItem.css +7 -5
  652. package/src/components/TabbarItem/TabbarItem.tsx +13 -7
  653. package/src/components/Tabs/Readme.md +191 -251
  654. package/src/components/Tabs/Tabs.css +27 -80
  655. package/src/components/Tabs/Tabs.tsx +45 -7
  656. package/src/components/TabsItem/Readme.md +1 -0
  657. package/src/components/TabsItem/TabsItem.css +191 -106
  658. package/src/components/TabsItem/TabsItem.tsx +72 -20
  659. package/src/components/TextTooltip/TextTooltip.css +41 -11
  660. package/src/components/TextTooltip/TextTooltip.tsx +9 -13
  661. package/src/components/Textarea/Textarea.css +7 -3
  662. package/src/components/Textarea/Textarea.tsx +5 -4
  663. package/src/components/Tooltip/Readme.md +128 -101
  664. package/src/components/Tooltip/Tooltip.css +29 -40
  665. package/src/components/Tooltip/Tooltip.tsx +98 -66
  666. package/src/components/Typography/Headline/Headline.tsx +15 -1
  667. package/src/components/View/Readme.md +2 -0
  668. package/src/components/View/View.tsx +451 -514
  669. package/src/components/WriteBar/WriteBar.css +27 -33
  670. package/src/components/WriteBar/WriteBar.tsx +16 -5
  671. package/src/components/WriteBarIcon/WriteBarIcon.css +6 -19
  672. package/src/components/WriteBarIcon/WriteBarIcon.tsx +6 -6
  673. package/src/hoc/withAdaptivity.tsx +4 -4
  674. package/src/hoc/withContext.tsx +1 -1
  675. package/src/hoc/withPlatform.tsx +1 -1
  676. package/src/hooks/useOrientationChange.ts +1 -0
  677. package/src/styles/components.css +1 -0
  678. package/src/styles/constants.css +8 -0
  679. package/src/tokenized/index.ts +39 -0
  680. package/tsconfig.json +1 -1
  681. package/.cache/ts/src/components/ClickPopper/ClickPopper.d.ts +0 -21
  682. package/dist/cjs/components/ClickPopper/ClickPopper.js +0 -96
  683. package/dist/cjs/components/ClickPopper/ClickPopper.js.map +0 -1
  684. package/dist/components/ClickPopper/ClickPopper.d.ts +0 -21
  685. package/dist/components/ClickPopper/ClickPopper.js +0 -71
  686. package/dist/components/ClickPopper/ClickPopper.js.map +0 -1
  687. package/dist/cssm/components/ClickPopper/ClickPopper.d.ts +0 -21
  688. package/dist/cssm/components/ClickPopper/ClickPopper.js +0 -71
  689. package/dist/cssm/components/ClickPopper/ClickPopper.js.map +0 -1
  690. package/src/components/ClickPopper/ClickPopper.tsx +0 -86
@@ -1,31 +1,24 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
- import _createClass from "@babel/runtime/helpers/createClass";
5
- import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
6
- import _inherits from "@babel/runtime/helpers/inherits";
7
- import _createSuper from "@babel/runtime/helpers/createSuper";
8
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
9
4
  import _typeof from "@babel/runtime/helpers/typeof";
10
- var _excluded = ["before", "searchable", "name", "className", "getRef", "getRootRef", "popupDirection", "options", "sizeY", "platform", "style", "onChange", "onBlur", "onFocus", "onClick", "renderOption", "children", "emptyText", "onInputChange", "filterFn", "renderDropdown", "onOpen", "onClose", "fetching", "icon", "dropdownOffsetDistance", "fixDropdownWidth", "forceDropdownPortal", "selectType", "autoHideScrollbar", "autoHideScrollbarDelay"],
11
- _excluded2 = ["option"];
5
+ var _excluded = ["option"],
6
+ _excluded2 = ["before", "name", "className", "getRef", "getRootRef", "popupDirection", "sizeY", "platform", "style", "onChange", "children", "onInputChange", "renderDropdown", "onOpen", "onClose", "fetching", "forceDropdownPortal", "selectType", "autoHideScrollbar", "autoHideScrollbarDelay", "searchable", "renderOption", "options", "emptyText", "filterFn", "icon", "dropdownOffsetDistance", "fixDropdownWidth"];
12
7
  import { createScopedElement } from "../../lib/jsxRuntime";
13
8
  import * as React from "react";
14
9
  import { SelectMimicry } from "../SelectMimicry/SelectMimicry";
15
- import { debounce, setRef, multiRef, getTitleFromChildren } from "../../lib/utils";
10
+ import { debounce, multiRef, getTitleFromChildren } from "../../lib/utils";
16
11
  import { classNames } from "../../lib/classNames";
17
12
  import { withAdaptivity } from "../../hoc/withAdaptivity";
18
- import { withPlatform } from "../../hoc/withPlatform";
19
13
  import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption";
20
- import { getClassName } from "../../helpers/getClassName";
21
14
  import { Input } from "../Input/Input";
22
15
  import { DropdownIcon } from "../DropdownIcon/DropdownIcon";
23
16
  import { Caption } from "../Typography/Caption/Caption";
24
17
  import { warnOnce } from "../../lib/warnOnce";
25
18
  import { defaultFilterFn, getFormFieldModeFromSelectType } from "../../lib/select";
26
- import { is } from "../../lib/is";
27
19
  import { CustomSelectDropdown } from "../CustomSelectDropdown/CustomSelectDropdown";
28
20
  import { SelectType } from "../Select/Select";
21
+ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
29
22
 
30
23
  var findIndexAfter = function findIndexAfter() {
31
24
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
@@ -71,629 +64,530 @@ var checkOptionsValueType = function checkOptionsValueType(options) {
71
64
  }
72
65
  };
73
66
 
74
- var CustomSelectComponent = /*#__PURE__*/function (_React$Component) {
75
- _inherits(CustomSelectComponent, _React$Component);
67
+ function defaultRenderOptionFn(_ref) {
68
+ var option = _ref.option,
69
+ props = _objectWithoutProperties(_ref, _excluded);
76
70
 
77
- var _super = _createSuper(CustomSelectComponent);
71
+ return createScopedElement(CustomSelectOption, props);
72
+ }
78
73
 
79
- function CustomSelectComponent(props) {
80
- var _this;
81
-
82
- _classCallCheck(this, CustomSelectComponent);
83
-
84
- _this = _super.call(this, props);
85
-
86
- _defineProperty(_assertThisInitialized(_this), "keyboardInput", void 0);
87
-
88
- _defineProperty(_assertThisInitialized(_this), "isControlledOutside", false);
89
-
90
- _defineProperty(_assertThisInitialized(_this), "selectEl", null);
91
-
92
- _defineProperty(_assertThisInitialized(_this), "scrollBoxRef", /*#__PURE__*/React.createRef());
93
-
94
- _defineProperty(_assertThisInitialized(_this), "containerRef", /*#__PURE__*/React.createRef());
95
-
96
- _defineProperty(_assertThisInitialized(_this), "resetKeyboardInput", function () {
97
- _this.keyboardInput = "";
98
- });
74
+ var handleOptionDown = function handleOptionDown(e) {
75
+ e.preventDefault();
76
+ };
99
77
 
100
- _defineProperty(_assertThisInitialized(_this), "getSelectedItem", function () {
101
- var _this$state = _this.state,
102
- selectedOptionIndex = _this$state.selectedOptionIndex,
103
- options = _this$state.options;
78
+ function findSelectedIndex(options, value) {
79
+ var _options$findIndex;
104
80
 
105
- if (!(options !== null && options !== void 0 && options.length)) {
106
- return null;
107
- }
81
+ return (_options$findIndex = options.findIndex(function (item) {
82
+ value = typeof item.value === "number" ? Number(value) : value;
83
+ return item.value === value;
84
+ })) !== null && _options$findIndex !== void 0 ? _options$findIndex : -1;
85
+ }
108
86
 
109
- return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;
110
- });
111
-
112
- _defineProperty(_assertThisInitialized(_this), "filter", function (options, inputValue, filterFn) {
113
- return typeof filterFn === "function" ? options.filter(function (option) {
114
- return filterFn(inputValue, option);
115
- }) : options;
116
- });
87
+ var filter = function filter(options, inputValue, filterFn) {
88
+ return typeof filterFn === "function" ? options.filter(function (option) {
89
+ return filterFn(inputValue, option);
90
+ }) : options;
91
+ };
117
92
 
118
- _defineProperty(_assertThisInitialized(_this), "open", function () {
119
- _this.setState(function (_ref) {
120
- var selectedOptionIndex = _ref.selectedOptionIndex;
121
- return {
122
- opened: true,
123
- focusedOptionIndex: selectedOptionIndex
124
- };
125
- }, function () {
126
- var selectedOptionIndex = _this.state.selectedOptionIndex;
127
-
128
- if (selectedOptionIndex !== undefined && _this.isValidIndex(selectedOptionIndex)) {
129
- _this.scrollToElement(selectedOptionIndex, true);
130
- }
131
- });
93
+ var defaultOptions = [];
94
+ var defaultIcon = createScopedElement(DropdownIcon, null);
95
+
96
+ function CustomSelectComponent(props) {
97
+ var _props$value, _props$value2;
98
+
99
+ var before = props.before,
100
+ name = props.name,
101
+ className = props.className,
102
+ getRef = props.getRef,
103
+ getRootRef = props.getRootRef,
104
+ popupDirection = props.popupDirection,
105
+ sizeY = props.sizeY,
106
+ platform = props.platform,
107
+ style = props.style,
108
+ onChange = props.onChange,
109
+ children = props.children,
110
+ onInputChangeProp = props.onInputChange,
111
+ renderDropdown = props.renderDropdown,
112
+ onOpen = props.onOpen,
113
+ onClose = props.onClose,
114
+ fetching = props.fetching,
115
+ forceDropdownPortal = props.forceDropdownPortal,
116
+ _props$selectType = props.selectType,
117
+ selectType = _props$selectType === void 0 ? SelectType.default : _props$selectType,
118
+ autoHideScrollbar = props.autoHideScrollbar,
119
+ autoHideScrollbarDelay = props.autoHideScrollbarDelay,
120
+ _props$searchable = props.searchable,
121
+ searchable = _props$searchable === void 0 ? false : _props$searchable,
122
+ _props$renderOption = props.renderOption,
123
+ renderOptionProp = _props$renderOption === void 0 ? defaultRenderOptionFn : _props$renderOption,
124
+ _props$options = props.options,
125
+ optionsProp = _props$options === void 0 ? defaultOptions : _props$options,
126
+ _props$emptyText = props.emptyText,
127
+ emptyText = _props$emptyText === void 0 ? "Ничего не найдено" : _props$emptyText,
128
+ _props$filterFn = props.filterFn,
129
+ filterFn = _props$filterFn === void 0 ? defaultFilterFn : _props$filterFn,
130
+ _props$icon = props.icon,
131
+ icon = _props$icon === void 0 ? defaultIcon : _props$icon,
132
+ _props$dropdownOffset = props.dropdownOffsetDistance,
133
+ dropdownOffsetDistance = _props$dropdownOffset === void 0 ? 0 : _props$dropdownOffset,
134
+ _props$fixDropdownWid = props.fixDropdownWidth,
135
+ fixDropdownWidth = _props$fixDropdownWid === void 0 ? true : _props$fixDropdownWid,
136
+ restProps = _objectWithoutProperties(props, _excluded2);
137
+
138
+ if (process.env.NODE_ENV === "development") {
139
+ checkOptionsValueType(optionsProp);
140
+ }
132
141
 
133
- typeof _this.props.onOpen === "function" && _this.props.onOpen();
142
+ var containerRef = React.useRef(null);
143
+ var scrollBoxRef = React.useRef(null);
144
+ var selectElRef = React.useRef(null);
145
+
146
+ var _React$useState = React.useState(-1),
147
+ _React$useState2 = _slicedToArray(_React$useState, 2),
148
+ focusedOptionIndex = _React$useState2[0],
149
+ setFocusedOptionIndex = _React$useState2[1];
150
+
151
+ var _React$useState3 = React.useState(props.value !== undefined),
152
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
153
+ isControlledOutside = _React$useState4[0],
154
+ setIsControlledOutside = _React$useState4[1];
155
+
156
+ var _React$useState5 = React.useState(""),
157
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
158
+ inputValue = _React$useState6[0],
159
+ setInputValue = _React$useState6[1];
160
+
161
+ var _React$useState7 = React.useState((_props$value = props.value) !== null && _props$value !== void 0 ? _props$value : props.defaultValue),
162
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
163
+ nativeSelectValue = _React$useState8[0],
164
+ setNativeSelectValue = _React$useState8[1];
165
+
166
+ var _React$useState9 = React.useState(""),
167
+ _React$useState10 = _slicedToArray(_React$useState9, 2),
168
+ keyboardInput = _React$useState10[0],
169
+ setKeyboardInput = _React$useState10[1];
170
+
171
+ var _React$useState11 = React.useState(undefined),
172
+ _React$useState12 = _slicedToArray(_React$useState11, 2),
173
+ popperPlacement = _React$useState12[0],
174
+ setPopperPlacement = _React$useState12[1];
175
+
176
+ var _React$useState13 = React.useState(optionsProp),
177
+ _React$useState14 = _slicedToArray(_React$useState13, 2),
178
+ options = _React$useState14[0],
179
+ setOptions = _React$useState14[1];
180
+
181
+ var _React$useState15 = React.useState(findSelectedIndex(optionsProp, (_props$value2 = props.value) !== null && _props$value2 !== void 0 ? _props$value2 : props.defaultValue)),
182
+ _React$useState16 = _slicedToArray(_React$useState15, 2),
183
+ selectedOptionIndex = _React$useState16[0],
184
+ setSelectedOptionIndex = _React$useState16[1];
185
+
186
+ var _React$useState17 = React.useState(false),
187
+ _React$useState18 = _slicedToArray(_React$useState17, 2),
188
+ opened = _React$useState18[0],
189
+ setOpened = _React$useState18[1];
190
+
191
+ React.useEffect(function () {
192
+ setIsControlledOutside(props.value !== undefined);
193
+ setNativeSelectValue(function (nativeSelectValue) {
194
+ var _props$value3;
195
+
196
+ return (_props$value3 = props.value) !== null && _props$value3 !== void 0 ? _props$value3 : nativeSelectValue;
134
197
  });
198
+ }, [props.value]);
199
+ useIsomorphicLayoutEffect(function () {
200
+ if (nativeSelectValue) {
201
+ var _selectElRef$current;
135
202
 
136
- _defineProperty(_assertThisInitialized(_this), "close", function () {
137
- _this.resetKeyboardInput();
138
-
139
- _this.setState(function () {
140
- return {
141
- inputValue: "",
142
- opened: false,
143
- focusedOptionIndex: -1,
144
- options: _this.props.options
145
- };
203
+ var _event = new Event("change", {
204
+ bubbles: true
146
205
  });
147
206
 
148
- typeof _this.props.onClose === "function" && _this.props.onClose();
149
- });
150
-
151
- _defineProperty(_assertThisInitialized(_this), "selectFocused", function () {
152
- var focusedOptionIndex = _this.state.focusedOptionIndex;
153
-
154
- if (focusedOptionIndex !== undefined) {
155
- _this.select(focusedOptionIndex);
156
- }
157
- });
158
-
159
- _defineProperty(_assertThisInitialized(_this), "select", function (index) {
160
- var _this$state$options;
161
-
162
- if (!_this.isValidIndex(index)) {
163
- return;
164
- }
207
+ (_selectElRef$current = selectElRef.current) === null || _selectElRef$current === void 0 ? void 0 : _selectElRef$current.dispatchEvent(_event);
208
+ }
209
+ }, [nativeSelectValue]);
210
+ var selected = React.useMemo(function () {
211
+ if (!options.length) {
212
+ return null;
213
+ }
165
214
 
166
- var item = (_this$state$options = _this.state.options) === null || _this$state$options === void 0 ? void 0 : _this$state$options[index];
215
+ return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;
216
+ }, [options, selectedOptionIndex]);
217
+ var openedClassNames = React.useMemo(function () {
218
+ return classNames(opened && "Select--open", opened && dropdownOffsetDistance === 0 && (popperPlacement !== null && popperPlacement !== void 0 && popperPlacement.includes("top") ? "Select--pop-up" : "Select--pop-down"));
219
+ }, [dropdownOffsetDistance, opened, popperPlacement]);
220
+ var resetKeyboardInput = React.useCallback(function () {
221
+ setKeyboardInput("");
222
+ }, []);
223
+ var scrollToElement = React.useCallback(function (index) {
224
+ var center = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
225
+ var dropdown = scrollBoxRef.current;
226
+ var item = dropdown ? dropdown.children[index] : null;
227
+
228
+ if (!item || !dropdown) {
229
+ return;
230
+ }
167
231
 
168
- _this.setState({
169
- nativeSelectValue: item === null || item === void 0 ? void 0 : item.value
170
- }, function () {
171
- var _this$selectEl;
232
+ var dropdownHeight = dropdown.offsetHeight;
233
+ var scrollTop = dropdown.scrollTop;
234
+ var itemTop = item.offsetTop;
235
+ var itemHeight = item.offsetHeight;
236
+
237
+ if (center) {
238
+ dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
239
+ } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
240
+ dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
241
+ } else if (itemTop < scrollTop) {
242
+ dropdown.scrollTop = itemTop;
243
+ }
244
+ }, []);
245
+ var isValidIndex = React.useCallback(function (index) {
246
+ var _options$length;
172
247
 
173
- var event = new Event("change", {
174
- bubbles: true
175
- });
176
- (_this$selectEl = _this.selectEl) === null || _this$selectEl === void 0 ? void 0 : _this$selectEl.dispatchEvent(event);
177
- });
248
+ return index >= 0 && index < ((_options$length = options.length) !== null && _options$length !== void 0 ? _options$length : 0);
249
+ }, [options.length]);
250
+ var focusOptionByIndex = React.useCallback(function (index) {
251
+ var _options$length2;
178
252
 
179
- _this.close();
180
- });
253
+ var scrollTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
181
254
 
182
- _defineProperty(_assertThisInitialized(_this), "onClick", function () {
183
- _this.state.opened ? _this.close() : _this.open();
184
- });
255
+ if (index === undefined || index < 0 || index > ((_options$length2 = options.length) !== null && _options$length2 !== void 0 ? _options$length2 : 0) - 1) {
256
+ return;
257
+ }
185
258
 
186
- _defineProperty(_assertThisInitialized(_this), "onFocus", function () {
187
- var _this$selectEl2;
259
+ var option = options[index];
188
260
 
189
- var event = new Event("focus");
190
- (_this$selectEl2 = _this.selectEl) === null || _this$selectEl2 === void 0 ? void 0 : _this$selectEl2.dispatchEvent(event);
191
- });
261
+ if (option !== null && option !== void 0 && option.disabled) {
262
+ return;
263
+ }
192
264
 
193
- _defineProperty(_assertThisInitialized(_this), "onBlur", function () {
194
- var _this$selectEl3;
265
+ if (scrollTo) {
266
+ scrollToElement(index);
267
+ } // Это оптимизация, прежде всего, под `onMouseOver`
195
268
 
196
- _this.close();
197
269
 
198
- var event = new Event("blur");
199
- (_this$selectEl3 = _this.selectEl) === null || _this$selectEl3 === void 0 ? void 0 : _this$selectEl3.dispatchEvent(event);
270
+ setFocusedOptionIndex(function (focusedOptionIndex) {
271
+ return focusedOptionIndex !== index ? index : focusedOptionIndex;
200
272
  });
201
-
202
- _defineProperty(_assertThisInitialized(_this), "focusOptionByIndex", function (index) {
203
- var _this$state$options$l, _this$state$options2, _this$state$options3;
204
-
205
- var scrollTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
206
-
207
- if (index === undefined || index < 0 || index > ((_this$state$options$l = (_this$state$options2 = _this.state.options) === null || _this$state$options2 === void 0 ? void 0 : _this$state$options2.length) !== null && _this$state$options$l !== void 0 ? _this$state$options$l : 0) - 1) {
208
- return;
209
- }
210
-
211
- var option = (_this$state$options3 = _this.state.options) === null || _this$state$options3 === void 0 ? void 0 : _this$state$options3[index];
212
-
213
- if (option !== null && option !== void 0 && option.disabled) {
214
- return;
215
- }
216
-
217
- scrollTo && _this.scrollToElement(index);
218
-
219
- _this.setState(function (prevState) {
220
- return (// Это оптимизация, прежде всего, под `onMouseOver`
221
- prevState.focusedOptionIndex !== index ? {
222
- focusedOptionIndex: index
223
- } : null
224
- );
225
- });
273
+ }, [options, scrollToElement]);
274
+ var areOptionsShown = React.useCallback(function () {
275
+ return scrollBoxRef.current !== null;
276
+ }, []);
277
+ var onKeyboardInput = React.useCallback(function (key) {
278
+ var fullInput = keyboardInput + key;
279
+ var optionIndex = options.findIndex(function (option) {
280
+ return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);
226
281
  });
227
282
 
228
- _defineProperty(_assertThisInitialized(_this), "focusOption", function (type) {
229
- var focusedOptionIndex = _this.state.focusedOptionIndex;
230
- var index = focusedOptionIndex;
231
-
232
- if (type === "next") {
233
- var nextIndex = findIndexAfter(_this.state.options, index);
234
- index = nextIndex === -1 ? findIndexAfter(_this.state.options) : nextIndex; // Следующий за index или первый валидный до index
235
- } else if (type === "prev") {
236
- var beforeIndex = findIndexBefore(_this.state.options, index);
237
- index = beforeIndex === -1 ? findIndexBefore(_this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index
238
- }
239
-
240
- _this.focusOptionByIndex(index);
241
- });
283
+ if (optionIndex !== undefined && optionIndex > -1) {
284
+ focusOptionByIndex(optionIndex);
285
+ }
242
286
 
243
- _defineProperty(_assertThisInitialized(_this), "handleOptionHover", function (e) {
244
- var _e$currentTarget$pare;
287
+ setKeyboardInput(fullInput);
288
+ }, [focusOptionByIndex, keyboardInput, options]);
289
+ var close = React.useCallback(function () {
290
+ resetKeyboardInput();
291
+ setInputValue("");
292
+ setOpened(false);
293
+ setFocusedOptionIndex(-1);
294
+ setOptions(optionsProp);
295
+ onClose === null || onClose === void 0 ? void 0 : onClose();
296
+ }, [onClose, optionsProp, resetKeyboardInput]);
297
+ var selectFocused = React.useCallback(function () {
298
+ if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {
299
+ var item = options[focusedOptionIndex];
300
+ setNativeSelectValue(item === null || item === void 0 ? void 0 : item.value);
301
+ close();
302
+ }
303
+ }, [close, focusedOptionIndex, isValidIndex, options]);
304
+ var open = React.useCallback(function () {
305
+ setOpened(true);
306
+ setFocusedOptionIndex(selectedOptionIndex);
245
307
 
246
- _this.focusOptionByIndex(Array.prototype.indexOf.call((_e$currentTarget$pare = e.currentTarget.parentNode) === null || _e$currentTarget$pare === void 0 ? void 0 : _e$currentTarget$pare.children, e.currentTarget), false);
247
- });
308
+ if (typeof onOpen === "function") {
309
+ onOpen();
310
+ }
311
+ }, [onOpen, selectedOptionIndex]);
312
+ React.useEffect(function () {
313
+ if (opened && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {
314
+ scrollToElement(selectedOptionIndex, true);
315
+ }
316
+ }, [isValidIndex, opened, scrollToElement, selectedOptionIndex]);
317
+ var onBlur = React.useCallback(function () {
318
+ var _selectElRef$current2;
319
+
320
+ close();
321
+ var event = new Event("blur");
322
+ (_selectElRef$current2 = selectElRef.current) === null || _selectElRef$current2 === void 0 ? void 0 : _selectElRef$current2.dispatchEvent(event);
323
+ }, [close]);
324
+ var resetFocusedOption = React.useCallback(function () {
325
+ setFocusedOptionIndex(-1);
326
+ }, []);
327
+ var onFocus = React.useCallback(function () {
328
+ var _selectElRef$current3;
329
+
330
+ var event = new Event("focus");
331
+ (_selectElRef$current3 = selectElRef.current) === null || _selectElRef$current3 === void 0 ? void 0 : _selectElRef$current3.dispatchEvent(event);
332
+ }, []);
333
+ var onClick = React.useCallback(function () {
334
+ if (opened) {
335
+ close();
336
+ } else {
337
+ open();
338
+ }
339
+ }, [close, open, opened]);
340
+ var handleKeyUp = React.useMemo(function () {
341
+ return debounce(resetKeyboardInput, 1000);
342
+ }, [resetKeyboardInput]);
343
+ var focusOption = React.useCallback(function (type) {
344
+ var index = focusedOptionIndex;
345
+
346
+ if (type === "next") {
347
+ var nextIndex = findIndexAfter(options, index);
348
+ index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index
349
+ } else if (type === "prev") {
350
+ var beforeIndex = findIndexBefore(options, index);
351
+ index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index
352
+ }
248
353
 
249
- _defineProperty(_assertThisInitialized(_this), "handleOptionDown", function (e) {
354
+ focusOptionByIndex(index);
355
+ }, [focusOptionByIndex, focusedOptionIndex, options]);
356
+ React.useEffect(function () {
357
+ var _ref2, _props$value4;
358
+
359
+ var value = (_ref2 = (_props$value4 = props.value) !== null && _props$value4 !== void 0 ? _props$value4 : nativeSelectValue) !== null && _ref2 !== void 0 ? _ref2 : props.defaultValue;
360
+ var options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
361
+ setOptions(options);
362
+ setSelectedOptionIndex(findSelectedIndex(options, value));
363
+ }, [filterFn, inputValue, nativeSelectValue, optionsProp, props.defaultValue, props.value, searchable]);
364
+ /**
365
+ * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по
366
+ * выпадающему списку.
367
+ */
368
+
369
+ var onLabelClick = React.useCallback(function (e) {
370
+ var _scrollBoxRef$current;
371
+
372
+ if ((_scrollBoxRef$current = scrollBoxRef.current) !== null && _scrollBoxRef$current !== void 0 && _scrollBoxRef$current.contains(e.target)) {
250
373
  e.preventDefault();
251
- });
252
-
253
- _defineProperty(_assertThisInitialized(_this), "handleOptionClick", function (e) {
254
- var _e$currentTarget$pare2, _this$state$options4;
255
-
256
- var index = Array.prototype.indexOf.call((_e$currentTarget$pare2 = e.currentTarget.parentNode) === null || _e$currentTarget$pare2 === void 0 ? void 0 : _e$currentTarget$pare2.children, e.currentTarget);
257
- var option = (_this$state$options4 = _this.state.options) === null || _this$state$options4 === void 0 ? void 0 : _this$state$options4[index];
374
+ }
375
+ }, []);
376
+ var onNativeSelectChange = React.useCallback(function (e) {
377
+ var newSelectedOptionIndex = findSelectedIndex(options, e.currentTarget.value);
258
378
 
259
- if (option && !option.disabled) {
260
- _this.selectFocused();
379
+ if (selectedOptionIndex !== newSelectedOptionIndex) {
380
+ if (!isControlledOutside) {
381
+ setSelectedOptionIndex(newSelectedOptionIndex);
261
382
  }
262
- });
263
383
 
264
- _defineProperty(_assertThisInitialized(_this), "resetFocusedOption", function () {
265
- _this.setState({
266
- focusedOptionIndex: -1
267
- });
268
- });
269
-
270
- _defineProperty(_assertThisInitialized(_this), "onKeyboardInput", function (key) {
271
- var _this$state$options5;
384
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
385
+ }
386
+ }, [isControlledOutside, onChange, options, selectedOptionIndex]);
387
+ var onInputKeyDown = React.useCallback(function (event) {
388
+ ["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && areOptionsShown() && event.preventDefault();
389
+
390
+ switch (event.key) {
391
+ case "ArrowUp":
392
+ areOptionsShown() && focusOption("prev");
393
+ break;
394
+
395
+ case "ArrowDown":
396
+ areOptionsShown() && focusOption("next");
397
+ break;
398
+
399
+ case "Escape":
400
+ close();
401
+ break;
402
+
403
+ case "Enter":
404
+ areOptionsShown() && selectFocused();
405
+ break;
406
+ }
407
+ }, [areOptionsShown, close, focusOption, selectFocused]);
408
+ var onInputChange = React.useCallback(function (e) {
409
+ if (onInputChangeProp) {
410
+ var _options = onInputChangeProp(e, optionsProp);
272
411
 
273
- var fullInput = _this.keyboardInput + key;
274
- var optionIndex = (_this$state$options5 = _this.state.options) === null || _this$state$options5 === void 0 ? void 0 : _this$state$options5.findIndex(function (option) {
275
- return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);
276
- });
412
+ if (_options) {
413
+ if (process.env.NODE_ENV === "development") {
414
+ warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.");
415
+ }
277
416
 
278
- if (optionIndex !== undefined && optionIndex > -1) {
279
- _this.focusOptionByIndex(optionIndex);
417
+ setOptions(_options);
418
+ setSelectedOptionIndex(findSelectedIndex(_options, nativeSelectValue));
280
419
  }
420
+ } else {
421
+ var _options2 = filter(optionsProp, e.target.value, filterFn);
281
422
 
282
- _this.keyboardInput = fullInput;
283
- });
284
-
285
- _defineProperty(_assertThisInitialized(_this), "onLabelClick", function (e) {
286
- var _this$scrollBoxRef$cu;
287
-
288
- if ((_this$scrollBoxRef$cu = _this.scrollBoxRef.current) !== null && _this$scrollBoxRef$cu !== void 0 && _this$scrollBoxRef$cu.contains(e.target)) {
289
- e.preventDefault();
290
- }
291
- });
423
+ setOptions(_options2);
424
+ setSelectedOptionIndex(findSelectedIndex(_options2, nativeSelectValue));
425
+ }
292
426
 
293
- _defineProperty(_assertThisInitialized(_this), "onNativeSelectChange", function (e) {
294
- var newSelectedOptionIndex = _this.findSelectedIndex(_this.state.options, e.currentTarget.value);
427
+ setInputValue(e.target.value);
428
+ }, [filterFn, nativeSelectValue, onInputChangeProp, optionsProp]);
429
+ var handleKeyDownSelect = React.useCallback(function (event) {
430
+ if (event.key.length === 1 && event.key !== " ") {
431
+ onKeyboardInput(event.key);
432
+ return;
433
+ }
295
434
 
296
- if (_this.state.selectedOptionIndex !== newSelectedOptionIndex) {
297
- var _this$props$onChange, _this$props;
435
+ ["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && areOptionsShown() && event.preventDefault();
298
436
 
299
- if (!_this.isControlledOutside) {
300
- _this.setState({
301
- selectedOptionIndex: newSelectedOptionIndex
302
- });
437
+ switch (event.key) {
438
+ case "ArrowUp":
439
+ if (opened) {
440
+ areOptionsShown() && focusOption("prev");
441
+ } else {
442
+ open();
303
443
  }
304
444
 
305
- (_this$props$onChange = (_this$props = _this.props).onChange) === null || _this$props$onChange === void 0 ? void 0 : _this$props$onChange.call(_this$props, e);
306
- }
307
- });
308
-
309
- _defineProperty(_assertThisInitialized(_this), "onInputChange", function (e) {
310
- if (_this.props.onInputChange) {
311
- var _options = _this.props.onInputChange(e, _this.props.options);
312
-
313
- if (_options) {
314
- if (process.env.NODE_ENV === "development") {
315
- warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в v5.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.");
316
- }
445
+ break;
317
446
 
318
- _this.setState({
319
- options: _options,
320
- selectedOptionIndex: _this.findSelectedIndex(_options, _this.state.nativeSelectValue),
321
- inputValue: e.target.value
322
- });
447
+ case "ArrowDown":
448
+ if (opened) {
449
+ areOptionsShown() && focusOption("next");
323
450
  } else {
324
- _this.setState({
325
- inputValue: e.target.value
326
- });
451
+ open();
327
452
  }
328
- } else {
329
- var _options2 = _this.filter(_this.props.options, e.target.value, _this.props.filterFn);
330
-
331
- _this.setState({
332
- options: _options2,
333
- selectedOptionIndex: _this.findSelectedIndex(_options2, _this.state.nativeSelectValue),
334
- inputValue: e.target.value
335
- });
336
- }
337
- });
338
-
339
- _defineProperty(_assertThisInitialized(_this), "onInputKeyDown", function (event) {
340
- ["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && _this.areOptionsShown && event.preventDefault();
341
-
342
- switch (event.key) {
343
- case "ArrowUp":
344
- _this.areOptionsShown && _this.focusOption("prev");
345
- break;
346
-
347
- case "ArrowDown":
348
- _this.areOptionsShown && _this.focusOption("next");
349
- break;
350
-
351
- case "Escape":
352
- _this.close();
353
-
354
- break;
355
453
 
356
- case "Enter":
357
- _this.areOptionsShown && _this.selectFocused();
358
- break;
359
- }
360
- });
361
-
362
- _defineProperty(_assertThisInitialized(_this), "handleKeyDownSelect", function (event) {
363
- var opened = _this.state.opened;
364
-
365
- if (event.key.length === 1 && event.key !== " ") {
366
- _this.onKeyboardInput(event.key);
367
-
368
- return;
369
- }
370
-
371
- ["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && _this.areOptionsShown && event.preventDefault();
372
-
373
- switch (event.key) {
374
- case "ArrowUp":
375
- if (opened) {
376
- _this.areOptionsShown && _this.focusOption("prev");
377
- } else {
378
- _this.open();
379
- }
380
-
381
- break;
454
+ break;
382
455
 
383
- case "ArrowDown":
384
- if (opened) {
385
- _this.areOptionsShown && _this.focusOption("next");
386
- } else {
387
- _this.open();
388
- }
389
-
390
- break;
391
-
392
- case "Escape":
393
- _this.close();
394
-
395
- break;
396
-
397
- case "Enter":
398
- case "Spacebar":
399
- case " ":
400
- if (opened) {
401
- _this.areOptionsShown && _this.selectFocused();
402
- } else {
403
- _this.open();
404
- }
405
-
406
- break;
407
- }
408
- });
409
-
410
- _defineProperty(_assertThisInitialized(_this), "handleKeyUp", debounce(_this.resetKeyboardInput, 1000));
411
-
412
- _defineProperty(_assertThisInitialized(_this), "renderOption", function (option, index) {
413
- var _this$state2 = _this.state,
414
- focusedOptionIndex = _this$state2.focusedOptionIndex,
415
- selectedOptionIndex = _this$state2.selectedOptionIndex;
416
- var renderOption = _this.props.renderOption;
417
- var hovered = index === focusedOptionIndex;
418
- var selected = index === selectedOptionIndex;
419
- return createScopedElement(React.Fragment, {
420
- key: "".concat(option.value)
421
- }, renderOption({
422
- option: option,
423
- hovered: hovered,
424
- children: option.label,
425
- selected: selected,
426
- disabled: option.disabled,
427
- onClick: _this.handleOptionClick,
428
- onMouseDown: _this.handleOptionDown,
429
- // Используем `onMouseOver` вместо `onMouseEnter`.
430
- // При параметре `searchable`, обновляется "ребёнок", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:
431
- // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.
432
- // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.
433
- // 2. Если это тач-устройство.
434
- // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,
435
- // но не на тот, на который нажали в первый раз.
436
- // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744
437
- onMouseOver: _this.handleOptionHover
438
- }));
439
- });
456
+ case "Escape":
457
+ close();
458
+ break;
440
459
 
441
- _defineProperty(_assertThisInitialized(_this), "selectRef", function (element) {
442
- _this.selectEl = element;
443
-
444
- if (_this.props.getRef) {
445
- setRef(element, _this.props.getRef);
446
- }
447
- });
448
-
449
- _defineProperty(_assertThisInitialized(_this), "onPlacementChange", function (placement) {
450
- _this.setState(function () {
451
- return {
452
- popperPlacement: placement
453
- };
454
- });
455
- });
456
-
457
- var value = props.value,
458
- defaultValue = props.defaultValue;
459
- var initialValue = value !== undefined ? value : defaultValue;
460
- _this.keyboardInput = "";
461
-
462
- if (process.env.NODE_ENV === "development") {
463
- checkOptionsValueType(props.options);
464
- }
465
-
466
- _this.state = {
467
- opened: false,
468
- focusedOptionIndex: -1,
469
- selectedOptionIndex: _this.findSelectedIndex(props.options, initialValue),
470
- nativeSelectValue: initialValue,
471
- options: props.options,
472
- inputValue: ""
473
- };
474
-
475
- if (props.value !== undefined) {
476
- _this.isControlledOutside = true;
477
- }
478
-
479
- return _this;
480
- }
481
-
482
- _createClass(CustomSelectComponent, [{
483
- key: "areOptionsShown",
484
- get: function get() {
485
- return this.scrollBoxRef.current !== null;
486
- }
487
- }, {
488
- key: "findSelectedIndex",
489
- value: function findSelectedIndex(options, value) {
490
- var _options$findIndex;
491
-
492
- return (_options$findIndex = options === null || options === void 0 ? void 0 : options.findIndex(function (item) {
493
- value = typeof item.value === "number" ? Number(value) : value;
494
- return item.value === value;
495
- })) !== null && _options$findIndex !== void 0 ? _options$findIndex : -1;
496
- }
497
- }, {
498
- key: "isValidIndex",
499
- value: function isValidIndex(index) {
500
- var _this$state$options$l2, _this$state$options6;
501
-
502
- return index >= 0 && index < ((_this$state$options$l2 = (_this$state$options6 = this.state.options) === null || _this$state$options6 === void 0 ? void 0 : _this$state$options6.length) !== null && _this$state$options$l2 !== void 0 ? _this$state$options$l2 : 0);
503
- }
504
- }, {
505
- key: "scrollToElement",
506
- value: function scrollToElement(index) {
507
- var center = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
508
- var dropdown = this.scrollBoxRef.current;
509
- var item = dropdown ? dropdown.children[index] : null;
510
-
511
- if (!item || !dropdown) {
512
- return;
513
- }
514
-
515
- var dropdownHeight = dropdown.offsetHeight;
516
- var scrollTop = dropdown.scrollTop;
517
- var itemTop = item.offsetTop;
518
- var itemHeight = item.offsetHeight;
519
-
520
- if (center) {
521
- dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
522
- } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
523
- dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
524
- } else if (itemTop < scrollTop) {
525
- dropdown.scrollTop = itemTop;
526
- }
527
- }
528
- }, {
529
- key: "componentDidUpdate",
530
- value: function componentDidUpdate(prevProps) {
531
- // Внутри useEffect и так is, можно убрать
532
- if (!is(prevProps.value, this.props.value) || prevProps.options !== this.props.options) {
533
- if (process.env.NODE_ENV === "development") {
534
- checkOptionsValueType(this.props.options);
460
+ case "Enter":
461
+ case "Spacebar":
462
+ case " ":
463
+ if (opened) {
464
+ areOptionsShown() && selectFocused();
465
+ } else {
466
+ open();
535
467
  }
536
468
 
537
- this.isControlledOutside = this.props.value !== undefined;
538
-
539
- var _value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;
469
+ break;
470
+ }
471
+ }, [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused]);
472
+ var handleOptionClick = React.useCallback(function (e) {
473
+ var _e$currentTarget$pare;
540
474
 
541
- var _options3 = this.props.searchable && this.state.inputValue !== undefined ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;
475
+ var index = Array.prototype.indexOf.call((_e$currentTarget$pare = e.currentTarget.parentNode) === null || _e$currentTarget$pare === void 0 ? void 0 : _e$currentTarget$pare.children, e.currentTarget);
476
+ var option = options[index];
542
477
 
543
- this.setState({
544
- nativeSelectValue: _value,
545
- selectedOptionIndex: this.findSelectedIndex(_options3, _value),
546
- options: _options3
547
- });
548
- }
478
+ if (option && !option.disabled) {
479
+ selectFocused();
549
480
  }
550
- }, {
551
- key: "render",
552
- value: function render() {
553
- var _this$state$popperPla;
554
-
555
- var _this$state3 = this.state,
556
- opened = _this$state3.opened,
557
- nativeSelectValue = _this$state3.nativeSelectValue,
558
- stateOptions = _this$state3.options;
559
-
560
- var _this$props2 = this.props,
561
- before = _this$props2.before,
562
- searchable = _this$props2.searchable,
563
- name = _this$props2.name,
564
- className = _this$props2.className,
565
- getRef = _this$props2.getRef,
566
- getRootRef = _this$props2.getRootRef,
567
- popupDirection = _this$props2.popupDirection,
568
- options = _this$props2.options,
569
- sizeY = _this$props2.sizeY,
570
- platform = _this$props2.platform,
571
- style = _this$props2.style,
572
- onChange = _this$props2.onChange,
573
- onBlur = _this$props2.onBlur,
574
- onFocus = _this$props2.onFocus,
575
- onClick = _this$props2.onClick,
576
- renderOption = _this$props2.renderOption,
577
- children = _this$props2.children,
578
- emptyText = _this$props2.emptyText,
579
- onInputChange = _this$props2.onInputChange,
580
- filterFn = _this$props2.filterFn,
581
- renderDropdown = _this$props2.renderDropdown,
582
- onOpen = _this$props2.onOpen,
583
- onClose = _this$props2.onClose,
584
- fetching = _this$props2.fetching,
585
- icon = _this$props2.icon,
586
- dropdownOffsetDistance = _this$props2.dropdownOffsetDistance,
587
- fixDropdownWidth = _this$props2.fixDropdownWidth,
588
- forceDropdownPortal = _this$props2.forceDropdownPortal,
589
- _this$props2$selectTy = _this$props2.selectType,
590
- selectType = _this$props2$selectTy === void 0 ? SelectType.default : _this$props2$selectTy,
591
- autoHideScrollbar = _this$props2.autoHideScrollbar,
592
- autoHideScrollbarDelay = _this$props2.autoHideScrollbarDelay,
593
- restProps = _objectWithoutProperties(_this$props2, _excluded);
594
-
595
- var selected = this.getSelectedItem();
596
- var label = selected ? selected.label : undefined;
597
- var defaultDropdownContent = stateOptions !== undefined && stateOptions.length > 0 ? stateOptions.map(this.renderOption) : createScopedElement(Caption, {
598
- vkuiClass: "CustomSelect__empty"
599
- }, this.props.emptyText);
600
- var resolvedContent;
601
-
602
- if (typeof renderDropdown === "function") {
603
- resolvedContent = renderDropdown({
604
- defaultDropdownContent: defaultDropdownContent
605
- });
606
- } else {
607
- resolvedContent = defaultDropdownContent;
608
- }
609
-
610
- var openedClassNames = classNames(opened && "Select--open", opened && dropdownOffsetDistance === 0 && ((_this$state$popperPla = this.state.popperPlacement) !== null && _this$state$popperPla !== void 0 && _this$state$popperPla.includes("top") ? "Select--pop-up" : "Select--pop-down"));
611
- return createScopedElement("label", {
612
- vkuiClass: getClassName("CustomSelect", platform),
613
- className: className,
614
- style: style,
615
- ref: multiRef(this.containerRef, getRootRef),
616
- onClick: this.onLabelClick
617
- }, opened && searchable ? createScopedElement(Input, _extends({}, restProps, {
618
- autoFocus: true,
619
- onBlur: this.onBlur,
620
- vkuiClass: openedClassNames,
621
- value: this.state.inputValue,
622
- onKeyDown: this.onInputKeyDown,
623
- onChange: this.onInputChange // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.
624
- // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.
625
- // @ts-ignore
626
- ,
627
- onClick: onClick,
628
- before: before,
629
- after: icon,
630
- placeholder: restProps.placeholder,
631
- mode: getFormFieldModeFromSelectType(selectType)
632
- })) : createScopedElement(SelectMimicry, _extends({}, restProps, {
633
- "aria-hidden": true,
634
- onClick: this.onClick,
635
- onKeyDown: this.handleKeyDownSelect,
636
- onKeyUp: this.handleKeyUp,
637
- onFocus: this.onFocus,
638
- onBlur: this.onBlur,
639
- vkuiClass: openedClassNames,
640
- after: icon,
641
- selectType: selectType
642
- }), label), createScopedElement("select", {
643
- ref: this.selectRef,
644
- name: name,
645
- onChange: this.onNativeSelectChange,
646
- onBlur: onBlur,
647
- onFocus: onFocus,
648
- onClick: onClick,
649
- value: nativeSelectValue,
650
- "aria-hidden": true,
651
- vkuiClass: "CustomSelect__control"
652
- }, options.map(function (item) {
653
- return createScopedElement("option", {
654
- key: "".concat(item.value),
655
- value: item.value
656
- });
657
- })), opened && createScopedElement(CustomSelectDropdown, {
658
- targetRef: this.containerRef,
659
- placement: popupDirection,
660
- scrollBoxRef: this.scrollBoxRef,
661
- onPlacementChange: this.onPlacementChange,
662
- onMouseLeave: this.resetFocusedOption,
663
- fetching: fetching,
664
- offsetDistance: dropdownOffsetDistance,
665
- sameWidth: fixDropdownWidth,
666
- forcePortal: forceDropdownPortal,
667
- autoHideScrollbar: autoHideScrollbar,
668
- autoHideScrollbarDelay: autoHideScrollbarDelay
669
- }, resolvedContent));
481
+ }, [options, selectFocused]);
482
+ var handleOptionHover = React.useCallback(function (e) {
483
+ var _e$currentTarget$pare2;
484
+
485
+ focusOptionByIndex(Array.prototype.indexOf.call((_e$currentTarget$pare2 = e.currentTarget.parentNode) === null || _e$currentTarget$pare2 === void 0 ? void 0 : _e$currentTarget$pare2.children, e.currentTarget), false);
486
+ }, [focusOptionByIndex]);
487
+ var renderOption = React.useCallback(function (option, index) {
488
+ var hovered = index === focusedOptionIndex;
489
+ var selected = index === selectedOptionIndex;
490
+ return createScopedElement(React.Fragment, {
491
+ key: "".concat(option.value)
492
+ }, renderOptionProp({
493
+ option: option,
494
+ hovered: hovered,
495
+ children: option.label,
496
+ selected: selected,
497
+ disabled: option.disabled,
498
+ onClick: handleOptionClick,
499
+ onMouseDown: handleOptionDown,
500
+ // Используем `onMouseOver` вместо `onMouseEnter`.
501
+ // При параметре `searchable`, обновляется "ребёнок", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:
502
+ // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.
503
+ // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.
504
+ // 2. Если это тач-устройство.
505
+ // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,
506
+ // но не на тот, на который нажали в первый раз.
507
+ // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744
508
+ onMouseOver: handleOptionHover
509
+ }));
510
+ }, [focusedOptionIndex, handleOptionClick, handleOptionHover, renderOptionProp, selectedOptionIndex]);
511
+ var resolvedContent = React.useMemo(function () {
512
+ var defaultDropdownContent = (options === null || options === void 0 ? void 0 : options.length) > 0 ? options.map(renderOption) : createScopedElement(Caption, {
513
+ vkuiClass: "CustomSelect__empty"
514
+ }, emptyText);
515
+
516
+ if (typeof renderDropdown === "function") {
517
+ return renderDropdown({
518
+ defaultDropdownContent: defaultDropdownContent
519
+ });
520
+ } else {
521
+ return defaultDropdownContent;
670
522
  }
671
- }]);
672
-
673
- return CustomSelectComponent;
674
- }(React.Component);
523
+ }, [emptyText, options, renderDropdown, renderOption]);
524
+ return createScopedElement("label", {
525
+ vkuiClass: "CustomSelect",
526
+ className: className,
527
+ style: style,
528
+ ref: multiRef(containerRef, getRootRef),
529
+ onClick: onLabelClick
530
+ }, opened && searchable ? createScopedElement(Input, _extends({}, restProps, {
531
+ autoFocus: true,
532
+ onBlur: onBlur,
533
+ vkuiClass: openedClassNames,
534
+ value: inputValue,
535
+ onKeyDown: onInputKeyDown,
536
+ onChange: onInputChange // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.
537
+ // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.
538
+ // @ts-ignore
539
+ ,
540
+ onClick: props.onClick,
541
+ before: before,
542
+ after: icon,
543
+ placeholder: restProps.placeholder,
544
+ mode: getFormFieldModeFromSelectType(selectType)
545
+ })) : createScopedElement(SelectMimicry, _extends({}, restProps, {
546
+ "aria-hidden": true,
547
+ onClick: onClick,
548
+ onKeyDown: handleKeyDownSelect,
549
+ onKeyUp: handleKeyUp,
550
+ onFocus: onFocus,
551
+ onBlur: onBlur,
552
+ vkuiClass: openedClassNames,
553
+ after: icon,
554
+ selectType: selectType
555
+ }), selected === null || selected === void 0 ? void 0 : selected.label), createScopedElement("select", {
556
+ ref: selectElRef,
557
+ name: name,
558
+ onChange: onNativeSelectChange,
559
+ onBlur: props.onBlur,
560
+ onFocus: props.onFocus,
561
+ onClick: props.onClick,
562
+ value: nativeSelectValue,
563
+ "aria-hidden": true,
564
+ vkuiClass: "CustomSelect__control"
565
+ }, optionsProp.map(function (item) {
566
+ return createScopedElement("option", {
567
+ key: "".concat(item.value),
568
+ value: item.value
569
+ });
570
+ })), opened && createScopedElement(CustomSelectDropdown, {
571
+ targetRef: containerRef,
572
+ placement: popupDirection,
573
+ scrollBoxRef: scrollBoxRef,
574
+ onPlacementChange: setPopperPlacement,
575
+ onMouseLeave: resetFocusedOption,
576
+ fetching: fetching,
577
+ offsetDistance: dropdownOffsetDistance,
578
+ sameWidth: fixDropdownWidth,
579
+ forcePortal: forceDropdownPortal,
580
+ autoHideScrollbar: autoHideScrollbar,
581
+ autoHideScrollbarDelay: autoHideScrollbarDelay,
582
+ observableRefs: scrollBoxRef
583
+ }, resolvedContent));
584
+ }
675
585
  /**
676
586
  * @see https://vkcom.github.io/VKUI/#/CustomSelect
677
587
  */
678
588
 
679
589
 
680
- _defineProperty(CustomSelectComponent, "defaultProps", {
681
- searchable: false,
682
- renderOption: function renderOption(_ref2) {
683
- var option = _ref2.option,
684
- props = _objectWithoutProperties(_ref2, _excluded2);
685
-
686
- return createScopedElement(CustomSelectOption, props);
687
- },
688
- options: [],
689
- emptyText: "Ничего не найдено",
690
- filterFn: defaultFilterFn,
691
- icon: createScopedElement(DropdownIcon, null),
692
- dropdownOffsetDistance: 0,
693
- fixDropdownWidth: true
694
- });
695
-
696
- export var CustomSelect = withPlatform(withAdaptivity(CustomSelectComponent, {
590
+ export var CustomSelect = withAdaptivity(CustomSelectComponent, {
697
591
  sizeY: true
698
- }));
592
+ });
699
593
  //# sourceMappingURL=CustomSelect.js.map