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