@vkontakte/vkui 4.34.1 → 4.35.1

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 (565) hide show
  1. package/.browserslistrc +5 -0
  2. package/.cache/.eslintcache +1 -1
  3. package/.cache/.stylelintcache +1 -1
  4. package/.cache/.tsbuildinfo +256 -229
  5. package/.cache/ts/src/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  6. package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +1 -1
  7. package/.cache/ts/src/components/Dropdown/Dropdown.d.ts +46 -5
  8. package/.cache/ts/src/components/FocusTrap/FocusTrap.d.ts +1 -1
  9. package/.cache/ts/src/components/ModalRoot/ModalRoot.d.ts +1 -1
  10. package/.cache/ts/src/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  11. package/.cache/ts/src/components/Popper/Popper.d.ts +18 -1
  12. package/.cache/ts/src/components/PopperArrow/PopperArrow.d.ts +8 -0
  13. package/.cache/ts/src/components/RichTooltip/RichTooltip.d.ts +7 -2
  14. package/.cache/ts/src/components/Snackbar/Snackbar.d.ts +5 -1
  15. package/.cache/ts/src/components/SplitCol/SplitCol.d.ts +1 -0
  16. package/.cache/ts/src/components/Tabbar/Tabbar.d.ts +8 -1
  17. package/.cache/ts/src/components/Tabs/Tabs.d.ts +13 -2
  18. package/.cache/ts/src/components/TabsItem/TabsItem.d.ts +22 -1
  19. package/.cache/ts/src/components/TextTooltip/TextTooltip.d.ts +5 -1
  20. package/.cache/ts/src/components/Textarea/Textarea.d.ts +3 -0
  21. package/.cache/ts/src/components/Tooltip/Tooltip.d.ts +18 -1
  22. package/.cache/ts/src/components/Typography/Headline/Headline.d.ts +3 -3
  23. package/.cache/ts/src/components/View/View.d.ts +2 -18
  24. package/.cache/ts/src/components/View/ViewInfinite.d.ts +1 -1
  25. package/.cache/ts/src/components/WriteBar/WriteBar.d.ts +5 -1
  26. package/.cache/ts/src/tokenized/index.d.ts +26 -0
  27. package/.eslintrc.json +14 -4
  28. package/dist/cjs/components/AppRoot/AppRoot.js +1 -0
  29. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  30. package/dist/cjs/components/Button/Button.js +6 -4
  31. package/dist/cjs/components/Button/Button.js.map +1 -1
  32. package/dist/cjs/components/CardScroll/CardScroll.js +3 -1
  33. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  34. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -0
  35. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  36. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js +7 -1
  37. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  38. package/dist/cjs/components/CustomSelect/CustomSelect.js +477 -554
  39. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  40. package/dist/cjs/components/Dropdown/Dropdown.js +147 -26
  41. package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -1
  42. package/dist/cjs/components/Epic/Epic.js +1 -6
  43. package/dist/cjs/components/Epic/Epic.js.map +1 -1
  44. package/dist/cjs/components/FocusTrap/FocusTrap.js +9 -10
  45. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  46. package/dist/cjs/components/HorizontalCell/HorizontalCell.js +4 -7
  47. package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
  48. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +1 -0
  49. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  50. package/dist/cjs/components/HorizontalScroll/HorizontalScrollArrow.js +1 -1
  51. package/dist/cjs/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
  52. package/dist/cjs/components/Input/Input.js +1 -0
  53. package/dist/cjs/components/Input/Input.js.map +1 -1
  54. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js +2 -2
  55. package/dist/cjs/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  56. package/dist/cjs/components/ModalCardBase/ModalCardBase.js +1 -0
  57. package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
  58. package/dist/cjs/components/NativeSelect/NativeSelect.js +1 -0
  59. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  60. package/dist/cjs/components/Panel/Panel.js +1 -0
  61. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  62. package/dist/cjs/components/PanelHeader/PanelHeader.js +1 -0
  63. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  64. package/dist/cjs/components/Popper/Popper.js +16 -22
  65. package/dist/cjs/components/Popper/Popper.js.map +1 -1
  66. package/dist/cjs/components/PopperArrow/PopperArrow.js +40 -0
  67. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -0
  68. package/dist/cjs/components/Radio/Radio.js +1 -0
  69. package/dist/cjs/components/Radio/Radio.js.map +1 -1
  70. package/dist/cjs/components/RangeSlider/UniversalSlider.js +1 -0
  71. package/dist/cjs/components/RangeSlider/UniversalSlider.js.map +1 -1
  72. package/dist/cjs/components/RichTooltip/RichTooltip.js +6 -15
  73. package/dist/cjs/components/RichTooltip/RichTooltip.js.map +1 -1
  74. package/dist/cjs/components/Select/Select.js +1 -0
  75. package/dist/cjs/components/Select/Select.js.map +1 -1
  76. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +1 -0
  77. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  78. package/dist/cjs/components/SimpleCell/SimpleCell.js +21 -31
  79. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  80. package/dist/cjs/components/Snackbar/Snackbar.js +7 -11
  81. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  82. package/dist/cjs/components/SplitCol/SplitCol.js +7 -1
  83. package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
  84. package/dist/cjs/components/SplitLayout/SplitLayout.js +5 -8
  85. package/dist/cjs/components/SplitLayout/SplitLayout.js.map +1 -1
  86. package/dist/cjs/components/Tabbar/Tabbar.js +15 -14
  87. package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
  88. package/dist/cjs/components/TabbarItem/TabbarItem.js +8 -10
  89. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  90. package/dist/cjs/components/Tabs/Tabs.js +23 -5
  91. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  92. package/dist/cjs/components/TabsItem/TabsItem.js +39 -22
  93. package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
  94. package/dist/cjs/components/TextTooltip/TextTooltip.js +6 -9
  95. package/dist/cjs/components/TextTooltip/TextTooltip.js.map +1 -1
  96. package/dist/cjs/components/Textarea/Textarea.js +5 -4
  97. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  98. package/dist/cjs/components/Tooltip/Tooltip.js +94 -71
  99. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  100. package/dist/cjs/components/Typography/Headline/Headline.js +11 -2
  101. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  102. package/dist/cjs/components/View/View.js +388 -453
  103. package/dist/cjs/components/View/View.js.map +1 -1
  104. package/dist/cjs/components/WriteBar/WriteBar.js +12 -5
  105. package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
  106. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js +3 -8
  107. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  108. package/dist/cjs/hooks/useOrientationChange.js +2 -1
  109. package/dist/cjs/hooks/useOrientationChange.js.map +1 -1
  110. package/dist/cjs/tokenized/index.js +104 -0
  111. package/dist/cjs/tokenized/index.js.map +1 -1
  112. package/dist/components/AppRoot/AppRoot.js +1 -0
  113. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  114. package/dist/components/Button/Button.js +6 -4
  115. package/dist/components/Button/Button.js.map +1 -1
  116. package/dist/components/CardScroll/CardScroll.js +3 -1
  117. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  118. package/dist/components/ChipsSelect/ChipsSelect.js +1 -0
  119. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  120. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  121. package/dist/components/ConfigProvider/ConfigProviderContext.js +3 -0
  122. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  123. package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
  124. package/dist/components/CustomSelect/CustomSelect.js +473 -580
  125. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  126. package/dist/components/Dropdown/Dropdown.d.ts +46 -5
  127. package/dist/components/Dropdown/Dropdown.js +137 -27
  128. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  129. package/dist/components/Epic/Epic.js +1 -4
  130. package/dist/components/Epic/Epic.js.map +1 -1
  131. package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
  132. package/dist/components/FocusTrap/FocusTrap.js +9 -9
  133. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  134. package/dist/components/HorizontalCell/HorizontalCell.js +3 -5
  135. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  136. package/dist/components/HorizontalScroll/HorizontalScroll.js +1 -0
  137. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  138. package/dist/components/HorizontalScroll/HorizontalScrollArrow.js +2 -2
  139. package/dist/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
  140. package/dist/components/Input/Input.js +1 -0
  141. package/dist/components/Input/Input.js.map +1 -1
  142. package/dist/components/MiniInfoCell/MiniInfoCell.js +2 -2
  143. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  144. package/dist/components/ModalCardBase/ModalCardBase.js +1 -0
  145. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  146. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  147. package/dist/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  148. package/dist/components/NativeSelect/NativeSelect.js +1 -0
  149. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  150. package/dist/components/Panel/Panel.js +1 -0
  151. package/dist/components/Panel/Panel.js.map +1 -1
  152. package/dist/components/PanelHeader/PanelHeader.js +1 -0
  153. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  154. package/dist/components/Popper/Popper.d.ts +18 -1
  155. package/dist/components/Popper/Popper.js +15 -22
  156. package/dist/components/Popper/Popper.js.map +1 -1
  157. package/dist/components/PopperArrow/PopperArrow.d.ts +8 -0
  158. package/dist/components/PopperArrow/PopperArrow.js +27 -0
  159. package/dist/components/PopperArrow/PopperArrow.js.map +1 -0
  160. package/dist/components/Radio/Radio.js +1 -0
  161. package/dist/components/Radio/Radio.js.map +1 -1
  162. package/dist/components/RangeSlider/UniversalSlider.js +1 -0
  163. package/dist/components/RangeSlider/UniversalSlider.js.map +1 -1
  164. package/dist/components/RichTooltip/RichTooltip.d.ts +7 -2
  165. package/dist/components/RichTooltip/RichTooltip.js +5 -10
  166. package/dist/components/RichTooltip/RichTooltip.js.map +1 -1
  167. package/dist/components/Select/Select.js +1 -0
  168. package/dist/components/Select/Select.js.map +1 -1
  169. package/dist/components/SelectMimicry/SelectMimicry.js +1 -0
  170. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  171. package/dist/components/SimpleCell/SimpleCell.js +19 -28
  172. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  173. package/dist/components/Snackbar/Snackbar.d.ts +5 -1
  174. package/dist/components/Snackbar/Snackbar.js +8 -11
  175. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  176. package/dist/components/SplitCol/SplitCol.d.ts +1 -0
  177. package/dist/components/SplitCol/SplitCol.js +3 -0
  178. package/dist/components/SplitCol/SplitCol.js.map +1 -1
  179. package/dist/components/SplitLayout/SplitLayout.js +4 -7
  180. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  181. package/dist/components/Tabbar/Tabbar.d.ts +8 -1
  182. package/dist/components/Tabbar/Tabbar.js +15 -14
  183. package/dist/components/Tabbar/Tabbar.js.map +1 -1
  184. package/dist/components/TabbarItem/TabbarItem.js +7 -9
  185. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  186. package/dist/components/Tabs/Tabs.d.ts +13 -2
  187. package/dist/components/Tabs/Tabs.js +23 -5
  188. package/dist/components/Tabs/Tabs.js.map +1 -1
  189. package/dist/components/TabsItem/TabsItem.d.ts +22 -1
  190. package/dist/components/TabsItem/TabsItem.js +40 -21
  191. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  192. package/dist/components/TextTooltip/TextTooltip.d.ts +5 -1
  193. package/dist/components/TextTooltip/TextTooltip.js +5 -7
  194. package/dist/components/TextTooltip/TextTooltip.js.map +1 -1
  195. package/dist/components/Textarea/Textarea.d.ts +3 -0
  196. package/dist/components/Textarea/Textarea.js +5 -4
  197. package/dist/components/Textarea/Textarea.js.map +1 -1
  198. package/dist/components/Tooltip/Tooltip.d.ts +18 -1
  199. package/dist/components/Tooltip/Tooltip.js +89 -68
  200. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  201. package/dist/components/Typography/Headline/Headline.d.ts +3 -3
  202. package/dist/components/Typography/Headline/Headline.js +10 -2
  203. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  204. package/dist/components/View/View.d.ts +2 -18
  205. package/dist/components/View/View.js +384 -462
  206. package/dist/components/View/View.js.map +1 -1
  207. package/dist/components/View/ViewInfinite.d.ts +1 -1
  208. package/dist/components/WriteBar/WriteBar.d.ts +5 -1
  209. package/dist/components/WriteBar/WriteBar.js +10 -5
  210. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  211. package/dist/components/WriteBarIcon/WriteBarIcon.js +3 -6
  212. package/dist/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  213. package/dist/components.css +143 -127
  214. package/dist/components.css.map +1 -1
  215. package/dist/cssm/components/ActionSheet/ActionSheet.css +1 -1
  216. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +1 -1
  217. package/dist/cssm/components/Alert/Alert.css +1 -1
  218. package/dist/cssm/components/AppRoot/AppRoot.css +1 -1
  219. package/dist/cssm/components/AppRoot/AppRoot.js +1 -0
  220. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  221. package/dist/cssm/components/Avatar/Avatar.css +3 -5
  222. package/dist/cssm/components/Badge/Badge.css +3 -3
  223. package/dist/cssm/components/Banner/Banner.css +5 -5
  224. package/dist/cssm/components/BaseGallery/BaseGallery.css +1 -1
  225. package/dist/cssm/components/Button/Button.css +53 -35
  226. package/dist/cssm/components/Button/Button.js +6 -4
  227. package/dist/cssm/components/Button/Button.js.map +1 -1
  228. package/dist/cssm/components/Calendar/Calendar.css +1 -1
  229. package/dist/cssm/components/CalendarDay/CalendarDay.css +1 -1
  230. package/dist/cssm/components/CalendarDays/CalendarDays.css +1 -1
  231. package/dist/cssm/components/CalendarHeader/CalendarHeader.css +1 -1
  232. package/dist/cssm/components/CalendarRange/CalendarRange.css +1 -1
  233. package/dist/cssm/components/CalendarTime/CalendarTime.css +1 -1
  234. package/dist/cssm/components/Card/Card.css +5 -6
  235. package/dist/cssm/components/CardGrid/CardGrid.css +1 -1
  236. package/dist/cssm/components/CardScroll/CardScroll.css +1 -1
  237. package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
  238. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  239. package/dist/cssm/components/Cell/Cell.css +3 -3
  240. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -1
  241. package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -1
  242. package/dist/cssm/components/CellButton/CellButton.css +1 -1
  243. package/dist/cssm/components/Checkbox/Checkbox.css +1 -1
  244. package/dist/cssm/components/Chip/Chip.css +1 -1
  245. package/dist/cssm/components/ChipsInput/ChipsInput.css +1 -1
  246. package/dist/cssm/components/ChipsSelect/ChipsSelect.css +1 -1
  247. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -0
  248. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  249. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  250. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +3 -0
  251. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  252. package/dist/cssm/components/ContentCard/ContentCard.css +1 -1
  253. package/dist/cssm/components/Counter/Counter.css +31 -31
  254. package/dist/cssm/components/CustomScrollView/CustomScrollView.css +1 -1
  255. package/dist/cssm/components/CustomSelect/CustomSelect.css +1 -1
  256. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
  257. package/dist/cssm/components/CustomSelect/CustomSelect.js +473 -580
  258. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  259. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.css +3 -3
  260. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.css +3 -3
  261. package/dist/cssm/components/DateInput/DateInput.css +1 -1
  262. package/dist/cssm/components/DatePicker/DatePicker.css +1 -1
  263. package/dist/cssm/components/DateRangeInput/DateRangeInput.css +1 -1
  264. package/dist/cssm/components/Dropdown/Dropdown.css +1 -1
  265. package/dist/cssm/components/Dropdown/Dropdown.d.ts +46 -5
  266. package/dist/cssm/components/Dropdown/Dropdown.js +137 -27
  267. package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -1
  268. package/dist/cssm/components/Epic/Epic.css +1 -1
  269. package/dist/cssm/components/Epic/Epic.js +1 -4
  270. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  271. package/dist/cssm/components/FixedLayout/FixedLayout.css +1 -1
  272. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +1 -1
  273. package/dist/cssm/components/FocusTrap/FocusTrap.js +9 -9
  274. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  275. package/dist/cssm/components/FocusVisible/FocusVisible.css +1 -1
  276. package/dist/cssm/components/Footer/Footer.css +1 -1
  277. package/dist/cssm/components/FormField/FormField.css +9 -9
  278. package/dist/cssm/components/FormItem/FormItem.css +1 -1
  279. package/dist/cssm/components/FormLayout/FormLayout.css +1 -1
  280. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
  281. package/dist/cssm/components/FormStatus/FormStatus.css +1 -1
  282. package/dist/cssm/components/Gradient/Gradient.css +1 -1
  283. package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -1
  284. package/dist/cssm/components/Group/Group.css +1 -1
  285. package/dist/cssm/components/Header/Header.css +1 -1
  286. package/dist/cssm/components/HorizontalCell/HorizontalCell.css +1 -1
  287. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +3 -5
  288. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  289. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.css +1 -1
  290. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +1 -0
  291. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  292. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +3 -3
  293. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.js +2 -2
  294. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.js.map +1 -1
  295. package/dist/cssm/components/IconButton/IconButton.css +1 -1
  296. package/dist/cssm/components/InfoRow/InfoRow.css +1 -1
  297. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -1
  298. package/dist/cssm/components/Input/Input.css +1 -1
  299. package/dist/cssm/components/Input/Input.js +1 -0
  300. package/dist/cssm/components/Input/Input.js.map +1 -1
  301. package/dist/cssm/components/InputLike/InputLike.css +1 -1
  302. package/dist/cssm/components/InputLike/InputLikeDivider.css +1 -1
  303. package/dist/cssm/components/Link/Link.css +1 -1
  304. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.css +1 -1
  305. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +2 -2
  306. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  307. package/dist/cssm/components/ModalCard/ModalCard.css +1 -1
  308. package/dist/cssm/components/ModalCardBase/ModalCardBase.css +3 -3
  309. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +1 -0
  310. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  311. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.css +1 -1
  312. package/dist/cssm/components/ModalPage/ModalPage.css +1 -1
  313. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.css +1 -1
  314. package/dist/cssm/components/ModalRoot/ModalRoot.css +1 -1
  315. package/dist/cssm/components/ModalRoot/ModalRoot.d.ts +1 -1
  316. package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts +1 -1
  317. package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -0
  318. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  319. package/dist/cssm/components/Pagination/Pagination.css +1 -1
  320. package/dist/cssm/components/Panel/Panel.css +1 -1
  321. package/dist/cssm/components/Panel/Panel.js +1 -0
  322. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  323. package/dist/cssm/components/PanelHeader/PanelHeader.css +1 -1
  324. package/dist/cssm/components/PanelHeader/PanelHeader.js +1 -0
  325. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  326. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.css +1 -1
  327. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.css +1 -1
  328. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.css +1 -1
  329. package/dist/cssm/components/Placeholder/Placeholder.css +3 -3
  330. package/dist/cssm/components/PopoutRoot/PopoutRoot.css +1 -1
  331. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.css +1 -1
  332. package/dist/cssm/components/Popper/Popper.css +1 -1
  333. package/dist/cssm/components/Popper/Popper.d.ts +18 -1
  334. package/dist/cssm/components/Popper/Popper.js +15 -22
  335. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  336. package/dist/cssm/components/PopperArrow/PopperArrow.css +1 -0
  337. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +8 -0
  338. package/dist/cssm/components/PopperArrow/PopperArrow.js +28 -0
  339. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -0
  340. package/dist/cssm/components/Progress/Progress.css +1 -1
  341. package/dist/cssm/components/PromoBanner/PromoBanner.css +1 -1
  342. package/dist/cssm/components/PullToRefresh/PullToRefresh.css +3 -3
  343. package/dist/cssm/components/Radio/Radio.css +1 -1
  344. package/dist/cssm/components/Radio/Radio.js +1 -0
  345. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  346. package/dist/cssm/components/RadioGroup/RadioGroup.css +1 -1
  347. package/dist/cssm/components/RangeSlider/UniversalSlider.js +1 -0
  348. package/dist/cssm/components/RangeSlider/UniversalSlider.js.map +1 -1
  349. package/dist/cssm/components/Removable/Removable.css +1 -1
  350. package/dist/cssm/components/RichCell/RichCell.css +3 -3
  351. package/dist/cssm/components/RichTooltip/RichTooltip.css +3 -1
  352. package/dist/cssm/components/RichTooltip/RichTooltip.d.ts +7 -2
  353. package/dist/cssm/components/RichTooltip/RichTooltip.js +5 -10
  354. package/dist/cssm/components/RichTooltip/RichTooltip.js.map +1 -1
  355. package/dist/cssm/components/Root/Root.css +1 -1
  356. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.css +1 -1
  357. package/dist/cssm/components/Search/Search.css +1 -1
  358. package/dist/cssm/components/SegmentedControl/SegmentedControl.css +1 -1
  359. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.css +1 -1
  360. package/dist/cssm/components/Select/Select.css +1 -1
  361. package/dist/cssm/components/Select/Select.js +1 -0
  362. package/dist/cssm/components/Select/Select.js.map +1 -1
  363. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +1 -0
  364. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  365. package/dist/cssm/components/Separator/Separator.css +1 -1
  366. package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
  367. package/dist/cssm/components/SimpleCell/SimpleCell.js +19 -28
  368. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  369. package/dist/cssm/components/SimpleCheckbox/SimpleCheckbox.css +1 -1
  370. package/dist/cssm/components/Slider/Slider.css +3 -3
  371. package/dist/cssm/components/SliderSwitch/SliderSwitch.css +1 -1
  372. package/dist/cssm/components/Snackbar/Snackbar.css +1 -1
  373. package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
  374. package/dist/cssm/components/Snackbar/Snackbar.js +8 -11
  375. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  376. package/dist/cssm/components/Spacing/Spacing.css +1 -1
  377. package/dist/cssm/components/Spinner/Spinner.css +1 -1
  378. package/dist/cssm/components/SplitCol/SplitCol.css +1 -1
  379. package/dist/cssm/components/SplitCol/SplitCol.d.ts +1 -0
  380. package/dist/cssm/components/SplitCol/SplitCol.js +3 -0
  381. package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
  382. package/dist/cssm/components/SplitLayout/SplitLayout.css +1 -1
  383. package/dist/cssm/components/SplitLayout/SplitLayout.js +4 -7
  384. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  385. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.css +1 -1
  386. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.css +1 -1
  387. package/dist/cssm/components/Switch/Switch.css +3 -3
  388. package/dist/cssm/components/Tabbar/Tabbar.css +5 -3
  389. package/dist/cssm/components/Tabbar/Tabbar.d.ts +8 -1
  390. package/dist/cssm/components/Tabbar/Tabbar.js +15 -14
  391. package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
  392. package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
  393. package/dist/cssm/components/TabbarItem/TabbarItem.js +7 -9
  394. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  395. package/dist/cssm/components/Tabs/Tabs.css +1 -1
  396. package/dist/cssm/components/Tabs/Tabs.d.ts +13 -2
  397. package/dist/cssm/components/Tabs/Tabs.js +23 -5
  398. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  399. package/dist/cssm/components/TabsItem/TabsItem.css +5 -1
  400. package/dist/cssm/components/TabsItem/TabsItem.d.ts +22 -1
  401. package/dist/cssm/components/TabsItem/TabsItem.js +40 -21
  402. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  403. package/dist/cssm/components/Tappable/Tappable.css +5 -5
  404. package/dist/cssm/components/TextTooltip/TextTooltip.css +1 -1
  405. package/dist/cssm/components/TextTooltip/TextTooltip.d.ts +5 -1
  406. package/dist/cssm/components/TextTooltip/TextTooltip.js +5 -7
  407. package/dist/cssm/components/TextTooltip/TextTooltip.js.map +1 -1
  408. package/dist/cssm/components/Textarea/Textarea.css +1 -1
  409. package/dist/cssm/components/Textarea/Textarea.d.ts +3 -0
  410. package/dist/cssm/components/Textarea/Textarea.js +5 -4
  411. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  412. package/dist/cssm/components/Tooltip/Tooltip.css +1 -1
  413. package/dist/cssm/components/Tooltip/Tooltip.d.ts +18 -1
  414. package/dist/cssm/components/Tooltip/Tooltip.js +89 -68
  415. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  416. package/dist/cssm/components/Typography/Caption/Caption.css +1 -1
  417. package/dist/cssm/components/Typography/Footnote/Footnote.css +1 -1
  418. package/dist/cssm/components/Typography/Headline/Headline.css +1 -1
  419. package/dist/cssm/components/Typography/Headline/Headline.d.ts +3 -3
  420. package/dist/cssm/components/Typography/Headline/Headline.js +10 -2
  421. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  422. package/dist/cssm/components/Typography/Paragraph/Paragraph.css +1 -1
  423. package/dist/cssm/components/Typography/Subhead/Subhead.css +1 -1
  424. package/dist/cssm/components/Typography/Text/Text.css +1 -1
  425. package/dist/cssm/components/Typography/Title/Title.css +1 -1
  426. package/dist/cssm/components/UsersStack/UsersStack.css +5 -5
  427. package/dist/cssm/components/View/View.css +1 -1
  428. package/dist/cssm/components/View/View.d.ts +2 -18
  429. package/dist/cssm/components/View/View.js +384 -462
  430. package/dist/cssm/components/View/View.js.map +1 -1
  431. package/dist/cssm/components/View/ViewIOS.css +1 -1
  432. package/dist/cssm/components/View/ViewInfinite.d.ts +1 -1
  433. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.css +1 -1
  434. package/dist/cssm/components/WriteBar/WriteBar.css +3 -1
  435. package/dist/cssm/components/WriteBar/WriteBar.d.ts +5 -1
  436. package/dist/cssm/components/WriteBar/WriteBar.js +10 -5
  437. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  438. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.css +1 -1
  439. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js +3 -6
  440. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  441. package/dist/cssm/fonts/fonts.css +1 -1
  442. package/dist/cssm/hooks/useOrientationChange.js +2 -1
  443. package/dist/cssm/hooks/useOrientationChange.js.map +1 -1
  444. package/dist/cssm/lib/calendar.d.ts +2 -2
  445. package/dist/cssm/styles/animations.css +1 -1
  446. package/dist/cssm/styles/bright_light.css +1 -1
  447. package/dist/cssm/styles/common.css +1 -1
  448. package/dist/cssm/styles/components.css +143 -127
  449. package/dist/cssm/styles/constants.css +3 -10
  450. package/dist/cssm/styles/space_gray.css +1 -1
  451. package/dist/cssm/styles/themes.css +1 -16
  452. package/dist/cssm/styles/unstable.css +3 -1
  453. package/dist/cssm/styles/vkcom_dark.css +1 -6
  454. package/dist/cssm/styles/vkcom_light.css +1 -11
  455. package/dist/cssm/tokenized/index.d.ts +26 -0
  456. package/dist/cssm/tokenized/index.js +13 -0
  457. package/dist/cssm/tokenized/index.js.map +1 -1
  458. package/dist/default_scheme.css +1 -1
  459. package/dist/default_scheme.css.map +1 -1
  460. package/dist/fonts.css +1 -1
  461. package/dist/fonts.css.map +1 -1
  462. package/dist/hooks/useOrientationChange.js +2 -1
  463. package/dist/hooks/useOrientationChange.js.map +1 -1
  464. package/dist/lib/calendar.d.ts +2 -2
  465. package/dist/tokenized/index.d.ts +26 -0
  466. package/dist/tokenized/index.js +13 -0
  467. package/dist/tokenized/index.js.map +1 -1
  468. package/dist/unstable.css +3 -1
  469. package/dist/unstable.css.map +1 -1
  470. package/dist/vkui.css +144 -143
  471. package/dist/vkui.css.map +1 -1
  472. package/package.json +6 -5
  473. package/src/components/AppRoot/AppRoot.tsx +2 -0
  474. package/src/components/Badge/Badge.css +0 -5
  475. package/src/components/Button/Button.css +0 -4
  476. package/src/components/Button/Button.tsx +4 -2
  477. package/src/components/Button/Readme.md +30 -59
  478. package/src/components/CardScroll/CardScroll.tsx +1 -1
  479. package/src/components/Cell/Cell.css +3 -2
  480. package/src/components/ChipsInput/ChipsInput.css +2 -0
  481. package/src/components/ChipsSelect/ChipsSelect.tsx +2 -0
  482. package/src/components/ConfigProvider/ConfigProviderContext.tsx +2 -0
  483. package/src/components/Counter/Counter.css +30 -0
  484. package/src/components/CustomScrollView/CustomScrollView.css +10 -5
  485. package/src/components/CustomSelect/CustomSelect.tsx +543 -574
  486. package/src/components/Dropdown/Dropdown.css +12 -0
  487. package/src/components/Dropdown/Dropdown.tsx +174 -20
  488. package/src/components/Dropdown/Readme.md +1 -0
  489. package/src/components/Epic/Epic.tsx +1 -4
  490. package/src/components/FixedLayout/Readme.md +103 -109
  491. package/src/components/FocusTrap/FocusTrap.tsx +10 -10
  492. package/src/components/Group/Group.css +1 -1
  493. package/src/components/Group/Readme.md +1 -1
  494. package/src/components/HorizontalCell/HorizontalCell.css +25 -43
  495. package/src/components/HorizontalCell/HorizontalCell.tsx +3 -9
  496. package/src/components/HorizontalScroll/HorizontalScroll.css +23 -0
  497. package/src/components/HorizontalScroll/HorizontalScroll.tsx +2 -0
  498. package/src/components/HorizontalScroll/HorizontalScrollArrow.tsx +2 -2
  499. package/src/components/Input/Input.css +2 -0
  500. package/src/components/Input/Input.tsx +2 -0
  501. package/src/components/MiniInfoCell/MiniInfoCell.css +13 -3
  502. package/src/components/MiniInfoCell/MiniInfoCell.tsx +3 -3
  503. package/src/components/ModalCardBase/ModalCardBase.tsx +2 -0
  504. package/src/components/NativeSelect/NativeSelect.tsx +2 -0
  505. package/src/components/Panel/Panel.tsx +2 -0
  506. package/src/components/PanelHeader/PanelHeader.tsx +2 -0
  507. package/src/components/Popper/Popper.css +0 -35
  508. package/src/components/Popper/Popper.tsx +33 -25
  509. package/src/components/PopperArrow/PopperArrow.css +34 -0
  510. package/src/components/PopperArrow/PopperArrow.tsx +40 -0
  511. package/src/components/Radio/Radio.tsx +2 -0
  512. package/src/components/RangeSlider/UniversalSlider.tsx +2 -0
  513. package/src/components/RichTooltip/RichTooltip.css +44 -4
  514. package/src/components/RichTooltip/RichTooltip.tsx +9 -11
  515. package/src/components/Select/Select.tsx +2 -0
  516. package/src/components/SelectMimicry/SelectMimicry.tsx +2 -0
  517. package/src/components/SimpleCell/Readme.md +115 -129
  518. package/src/components/SimpleCell/SimpleCell.css +30 -68
  519. package/src/components/SimpleCell/SimpleCell.tsx +23 -25
  520. package/src/components/Snackbar/Readme.md +95 -123
  521. package/src/components/Snackbar/Snackbar.css +18 -27
  522. package/src/components/Snackbar/Snackbar.tsx +17 -11
  523. package/src/components/SplitCol/SplitCol.tsx +2 -0
  524. package/src/components/SplitLayout/SplitLayout.css +3 -7
  525. package/src/components/SplitLayout/SplitLayout.tsx +9 -6
  526. package/src/components/Switch/Switch.css +6 -2
  527. package/src/components/Tabbar/Tabbar.css +4 -1
  528. package/src/components/Tabbar/Tabbar.tsx +23 -12
  529. package/src/components/TabbarItem/TabbarItem.css +7 -5
  530. package/src/components/TabbarItem/TabbarItem.tsx +13 -7
  531. package/src/components/Tabs/Readme.md +191 -251
  532. package/src/components/Tabs/Tabs.css +27 -80
  533. package/src/components/Tabs/Tabs.tsx +45 -7
  534. package/src/components/TabsItem/Readme.md +1 -0
  535. package/src/components/TabsItem/TabsItem.css +191 -106
  536. package/src/components/TabsItem/TabsItem.tsx +72 -20
  537. package/src/components/TextTooltip/TextTooltip.css +41 -11
  538. package/src/components/TextTooltip/TextTooltip.tsx +9 -13
  539. package/src/components/Textarea/Textarea.css +2 -0
  540. package/src/components/Textarea/Textarea.tsx +5 -4
  541. package/src/components/Tooltip/Readme.md +128 -101
  542. package/src/components/Tooltip/Tooltip.css +29 -40
  543. package/src/components/Tooltip/Tooltip.tsx +98 -66
  544. package/src/components/Typography/Headline/Headline.tsx +15 -1
  545. package/src/components/View/Readme.md +2 -0
  546. package/src/components/View/View.tsx +451 -514
  547. package/src/components/WriteBar/WriteBar.css +27 -33
  548. package/src/components/WriteBar/WriteBar.tsx +16 -5
  549. package/src/components/WriteBarIcon/WriteBarIcon.css +6 -19
  550. package/src/components/WriteBarIcon/WriteBarIcon.tsx +6 -6
  551. package/src/hooks/useOrientationChange.ts +1 -0
  552. package/src/styles/components.css +1 -0
  553. package/src/styles/constants.css +8 -0
  554. package/src/tokenized/index.ts +39 -0
  555. package/tsconfig.json +1 -1
  556. package/.cache/ts/src/components/ClickPopper/ClickPopper.d.ts +0 -21
  557. package/dist/cjs/components/ClickPopper/ClickPopper.js +0 -96
  558. package/dist/cjs/components/ClickPopper/ClickPopper.js.map +0 -1
  559. package/dist/components/ClickPopper/ClickPopper.d.ts +0 -21
  560. package/dist/components/ClickPopper/ClickPopper.js +0 -71
  561. package/dist/components/ClickPopper/ClickPopper.js.map +0 -1
  562. package/dist/cssm/components/ClickPopper/ClickPopper.d.ts +0 -21
  563. package/dist/cssm/components/ClickPopper/ClickPopper.js +0 -71
  564. package/dist/cssm/components/ClickPopper/ClickPopper.js.map +0 -1
  565. package/src/components/ClickPopper/ClickPopper.tsx +0 -86
@@ -1,6 +1,18 @@
1
1
  .Dropdown {
2
+ position: relative;
2
3
  animation: vkui-popper-fadein 0.2s ease;
3
4
  background: var(--modal_card_background, var(--vkui--color_background_modal));
4
5
  border-radius: var(--vkui--size_border_radius--regular);
5
6
  box-shadow: var(--vkui--elevation3);
6
7
  }
8
+
9
+ /* Создаём "Safe Zone" */
10
+ .Dropdown::before {
11
+ content: "";
12
+ position: absolute;
13
+ z-index: -1;
14
+ top: calc(-1 * var(--popover-safe-zone-padding));
15
+ right: calc(-1 * var(--popover-safe-zone-padding));
16
+ bottom: calc(-1 * var(--popover-safe-zone-padding));
17
+ left: calc(-1 * var(--popover-safe-zone-padding));
18
+ }
@@ -1,36 +1,190 @@
1
- import { HoverPopper, HoverPopperProps } from "../HoverPopper/HoverPopper";
2
- import { ClickPopper, ClickPopperProps } from "../ClickPopper/ClickPopper";
1
+ import * as React from "react";
2
+ import { useDOM } from "../../lib/dom";
3
+ import { PopperCommonProps, Popper } from "../Popper/Popper";
4
+ import { FocusTrap } from "../FocusTrap/FocusTrap";
5
+ import { useTimeout } from "../../hooks/useTimeout";
6
+ import { useExternRef } from "../../hooks/useExternRef";
7
+ import { useEventListener } from "../../hooks/useEventListener";
8
+ import { useGlobalEventListener } from "../../hooks/useGlobalEventListener";
9
+ import { usePatchChildrenRef } from "../../hooks/usePatchChildrenRef";
3
10
  import "./Dropdown.css";
4
11
 
5
12
  export interface DropdownProps
6
- extends Omit<ClickPopperProps, "arrow" | "arrowClassName">,
7
- Omit<HoverPopperProps, "arrow" | "arrowClassName"> {
13
+ extends Omit<PopperCommonProps, "arrow" | "arrowClassName"> {
14
+ /**
15
+ * Механика вызова всплывающего окна.
16
+ *
17
+ * - `"click"` – показывается/скрывается только при нажатии.
18
+ * - `"hover"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.
19
+ *
20
+ * > ⚠️`"hover"` на тач-устройствах будет работать как `"click"`, с одним лишь нюансом, что не будет закрываться
21
+ * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента
22
+ * > и выпадающего окна.
23
+ */
8
24
  action?: "click" | "hover";
25
+ /**
26
+ * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.
27
+ */
28
+ shown?: boolean;
29
+ /**
30
+ * Количество миллисекунд, после которых произойдёт показ всплывающего окна.
31
+ *
32
+ * > Используется только для `action="hover"` при наведении/отведении мыши.
33
+ */
34
+ showDelay?: number;
35
+ /**
36
+ * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.
37
+ *
38
+ * > Используется только для `action="hover"` при наведении/отведении мыши.
39
+ */
40
+ hideDelay?: number;
41
+ /**
42
+ * Содержимое всплывающего окна.
43
+ */
44
+ content?: React.ReactNode;
45
+ /**
46
+ * Целевой элемент. Всплывающее окно появится возле него.
47
+ *
48
+ * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.
49
+ */
50
+ children?: React.ReactElement;
51
+ /**
52
+ * Вызывается при каждом изменении видимости всплывающего окна.
53
+ */
54
+ onShownChange?(shown: boolean): void;
9
55
  }
10
56
 
11
57
  /**
12
58
  * @see https://vkcom.github.io/VKUI/#/Dropdown
59
+ *
60
+ * TODO v5.0.0 Переименовать в `Popover` (см. https://github.com/VKCOM/VKUI/issues/2523)
13
61
  */
14
62
  export const Dropdown = ({
15
63
  action = "click",
16
- hideDelay,
17
- showDelay,
18
- ...popperProps
64
+ shown: shownProp,
65
+ showDelay = 150,
66
+ hideDelay = 150,
67
+ offsetDistance = 8,
68
+ content,
69
+ children,
70
+ style,
71
+ getRef,
72
+ onShownChange,
73
+ ...restProps
19
74
  }: DropdownProps) => {
20
- let Component;
21
- let actionSpecificProps: Partial<DropdownProps> = {};
22
-
23
- switch (action) {
24
- case "click":
25
- Component = ClickPopper;
26
- break;
27
- case "hover":
28
- actionSpecificProps = { hideDelay, showDelay };
29
- Component = HoverPopper;
30
- break;
31
- }
75
+ const { document } = useDOM();
76
+
77
+ const hoverable = action === "hover";
78
+ const hovered = React.useRef(false);
79
+ const [computedShown, setComputedShown] = React.useState(shownProp || false);
80
+ const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(
81
+ null
82
+ );
83
+
84
+ // Reason: Typescript ругается на CSS Custom Properties в объекте
85
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
86
+ const styles = {
87
+ ...style,
88
+ "--popover-safe-zone-padding": `${offsetDistance}px`,
89
+ } as React.CSSProperties;
90
+
91
+ const shown = typeof shownProp === "boolean" ? shownProp : computedShown;
92
+
93
+ const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);
94
+
95
+ const [childRef, child] = usePatchChildrenRef(children);
96
+
97
+ const setShown = (value: boolean) => {
98
+ if (typeof shownProp !== "boolean") {
99
+ setComputedShown(value);
100
+ }
101
+ typeof onShownChange === "function" && onShownChange(value);
102
+ };
103
+
104
+ const showTimeout = useTimeout(() => setShown(true), showDelay);
105
+
106
+ const hideTimeout = useTimeout(() => setShown(false), hideDelay);
107
+
108
+ const handleTargetEnter = () => {
109
+ hovered.current = true;
110
+ hideTimeout.clear();
111
+ showTimeout.set();
112
+ };
113
+
114
+ const handleTargetClick = () => {
115
+ if (hovered.current && shown) {
116
+ return;
117
+ }
118
+ setShown(!shown);
119
+ };
120
+
121
+ const handleTargetLeave = () => {
122
+ hovered.current = false;
123
+ showTimeout.clear();
124
+ hideTimeout.set();
125
+ };
126
+
127
+ const handleContentKeyDownEscape = () => {
128
+ setShown(false);
129
+ };
130
+
131
+ const handleOutsideClick = (e: MouseEvent) => {
132
+ if (
133
+ dropdownNode &&
134
+ !childRef.current?.contains(e.target as Node) &&
135
+ !dropdownNode.contains(e.target as Node)
136
+ ) {
137
+ setShown(false);
138
+ }
139
+ };
140
+
141
+ useGlobalEventListener(document, "click", handleOutsideClick);
142
+ const targetEnterListener = useEventListener("mouseenter", handleTargetEnter);
143
+ const targetClickEvent = useEventListener("click", handleTargetClick);
144
+ const targetLeaveListener = useEventListener("mouseleave", handleTargetLeave);
145
+
146
+ React.useEffect(() => {
147
+ if (!childRef.current) {
148
+ return;
149
+ }
150
+
151
+ targetClickEvent.add(childRef.current);
152
+
153
+ if (hoverable) {
154
+ targetEnterListener.add(childRef.current);
155
+ targetLeaveListener.add(childRef.current);
156
+ }
157
+ }, [
158
+ childRef,
159
+ hoverable,
160
+ targetClickEvent,
161
+ targetEnterListener,
162
+ targetLeaveListener,
163
+ ]);
32
164
 
33
165
  return (
34
- <Component vkuiClass="Dropdown" {...actionSpecificProps} {...popperProps} />
166
+ <React.Fragment>
167
+ {child}
168
+ {shown && (
169
+ <Popper
170
+ {...restProps}
171
+ vkuiClass="Dropdown"
172
+ targetRef={childRef}
173
+ getRef={patchedPopperRef}
174
+ offsetDistance={offsetDistance}
175
+ style={styles}
176
+ renderContent={({ className }) => (
177
+ <FocusTrap
178
+ vkuiClass={className}
179
+ onClose={handleContentKeyDownEscape}
180
+ >
181
+ {content}
182
+ </FocusTrap>
183
+ )}
184
+ onMouseOver={hoverable ? hideTimeout.clear : undefined}
185
+ onMouseOut={hoverable ? handleTargetLeave : undefined}
186
+ />
187
+ )}
188
+ </React.Fragment>
35
189
  );
36
190
  };
@@ -23,6 +23,7 @@ return (
23
23
  </Dropdown>
24
24
 
25
25
  <Dropdown
26
+ action="click"
26
27
  shown={shown}
27
28
  onShownChange={setShown}
28
29
  content={
@@ -1,6 +1,4 @@
1
1
  import * as React from "react";
2
- import { getClassName } from "../../helpers/getClassName";
3
- import { usePlatform } from "../../hooks/usePlatform";
4
2
  import { withAdaptivity, ViewWidth } from "../../hoc/withAdaptivity";
5
3
  import { ScrollSaver } from "./ScrollSaver";
6
4
  import { getNavId } from "../../lib/getNavId";
@@ -28,7 +26,6 @@ const EpicComponent = ({
28
26
  viewWidth,
29
27
  ...restProps
30
28
  }: EpicProps & AdaptivityContextInterface) => {
31
- const platform = usePlatform();
32
29
  const scroll = React.useRef<{ [key: string]: number }>({}).current;
33
30
 
34
31
  if (
@@ -48,7 +45,7 @@ const EpicComponent = ({
48
45
  ) as React.ReactElement | undefined) ?? null;
49
46
 
50
47
  return (
51
- <div {...restProps} vkuiClass={getClassName("Epic", platform)}>
48
+ <div {...restProps} vkuiClass="Epic">
52
49
  <ScrollSaver
53
50
  key={activeStory}
54
51
  initialScroll={scroll[activeStory] || 0}
@@ -1,117 +1,111 @@
1
- `{ position: fixed }` не дружит с `{ transform: translate }` на родителе, поэтому для позиционирования фиксированных
2
- блоков внутри панели, необходимо использовать `FixedLayout` в качестве обертки.
1
+ Компонент закрепляет переданный элемент сверху или снизу области видимости. Учитывает высоту шапки и прочие системные отступы.
3
2
 
4
- Для удобства есть свойство `vertical`, с помощью которого можно "прижать" контент к верху или низу.
5
- При этому будут учитываться высота шапки и прочие системные отступы.
6
-
7
- **Важно:** блок с `{ position: fixed }` находится не в потоке. В примере можно увидеть, что у блока с основным
8
- контентом есть паддинги. Они там не случайны.
3
+ > ⚠️ Использует `position: fixed` вместо `position: sticky`, т.к. библиотека поддерживает версии браузеров,
4
+ > где значение `sticky` отсутствует. По этой причине `FixedLayout` находится вне основного потока. В примере ниже можно
5
+ > увидеть, что у блока с основным контентом есть отступы сверху и снизу (см. `contentStyles`). Без них контент
6
+ > залезал бы под `FixedLayout`.
9
7
 
10
8
  ```jsx
11
- class Example extends React.Component {
12
- constructor(props) {
13
- super(props);
9
+ const contentStyles = {
10
+ paddingTop: 60,
11
+ paddingBottom: 60,
12
+ };
14
13
 
15
- this.state = {
16
- activeTab: "groups",
17
- };
18
- }
14
+ const Example = () => {
15
+ const [activeTab, setActiveTab] = React.useState("groups");
19
16
 
20
- render() {
21
- return (
22
- <View activePanel="fixedLayout">
23
- <Panel id="fixedLayout">
24
- <PanelHeader>Fixed layout</PanelHeader>
25
- <Group>
26
- <FixedLayout vertical="top">
27
- <Search />
28
- </FixedLayout>
29
- <Div style={{ paddingTop: 60, paddingBottom: 60, color: "gray" }}>
30
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a
31
- sollicitudin lectus, a commodo sapien. Vivamus a urna leo. Integer
32
- iaculis dignissim urna, sit amet vestibulum diam bibendum a. Donec
33
- eu arcu ut augue porttitor faucibus. Vestibulum nec pretium
34
- tortor, sit amet congue nunc. Aenean ullamcorper ex sem, sed
35
- interdum quam consequat et. Vestibulum a ex non diam fringilla
36
- feugiat. Nunc eu tellus sed leo elementum cursus. Mauris blandit
37
- porta egestas. Curabitur eget justo elementum, malesuada lacus ut,
38
- congue mauris. Integer orci nisi, convallis vitae dapibus sit
39
- amet, molestie a risus. Aenean ultricies lacus eros, sit amet
40
- condimentum urna malesuada et. Sed quis dolor tempus orci
41
- fringilla volutpat in sed velit. Aenean aliquet bibendum pretium.
42
- <br />
43
- <br />
44
- Cras pulvinar lobortis purus. Donec placerat suscipit leo vitae sodales.
45
- Phasellus convallis lorem vitae arcu finibus pellentesque. In imperdiet
46
- vel leo a euismod. Nam sed odio a neque venenatis suscipit a placerat
47
- magna. Mauris magna nisl, consequat nec augue vitae, ultricies scelerisque
48
- ante. Phasellus pharetra risus eget imperdiet sodales. Integer dignissim
49
- auctor semper. Nulla odio odio, euismod ut interdum in, bibendum sed
50
- massa. Proin rutrum molestie massa in ultrices. Donec eu euismod turpis,
51
- eget lobortis lorem. Nulla facilisi. Nam lacinia posuere turpis, sed
52
- laoreet turpis auctor nec.
53
- <br />
54
- <br />
55
- Curabitur eu fermentum mauris. Phasellus malesuada consectetur
56
- mollis. Pellentesque pulvinar mauris turpis. Integer neque dolor,
57
- semper quis neque et, gravida commodo eros. Duis efficitur ex a
58
- turpis blandit tincidunt. Mauris sem mi, imperdiet quis ligula sit
59
- amet, fermentum vulputate felis. Phasellus eu ullamcorper dolor,
60
- porttitor pulvinar diam. Aliquam euismod, mauris nec varius
61
- lacinia, ligula libero vulputate leo, ut tristique massa nisi
62
- vitae tortor. Phasellus purus elit, gravida sit amet neque id,
63
- aliquam rutrum dui. Maecenas luctus sem vitae molestie porttitor.
64
- Cras viverra mauris risus, at sollicitudin ipsum interdum eu. Sed
65
- sit amet tempor enim.
66
- <br />
67
- <br />
68
- In hac habitasse platea dictumst. Etiam luctus erat metus, quis efficitur
69
- quam vulputate quis. Duis ultricies non mauris condimentum molestie.
70
- Maecenas sollicitudin ex sem, quis ultrices libero blandit eu. Vivamus
71
- in turpis pulvinar, malesuada enim at, hendrerit magna. Proin eu nulla
72
- eget arcu pretium pharetra. Sed ullamcorper pulvinar est eu dapibus.
73
- Cras at varius justo. In ex odio, condimentum id pellentesque a, sodales
74
- ut diam.
75
- <br />
76
- <br />
77
- Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
78
- posuere cubilia Curae; Nam aliquet tempor laoreet. Maecenas eu
79
- pulvinar diam. Pellentesque habitant morbi tristique senectus et
80
- netus et malesuada fames ac turpis egestas. Maecenas et elit eros.
81
- Quisque ullamcorper sodales nisi, eleifend aliquet metus venenatis
82
- in. Aliquam ornare a lacus in tincidunt. Cras vel tristique metus.
83
- Sed vitae nisl at nisl imperdiet sollicitudin. Sed sit amet enim
84
- in lectus imperdiet interdum condimentum et diam. Proin venenatis
85
- sit amet diam ac vulputate. Donec mauris orci, semper volutpat
86
- nunc ut, efficitur condimentum dolor. Vivamus in quam eget quam
87
- lacinia pharetra. Phasellus ipsum magna, aliquet id elit eget,
88
- cursus tincidunt ex. In rhoncus turpis turpis, et viverra ex
89
- malesuada vel. Donec nisi tellus, mollis et posuere vel, dictum
90
- eget neque.
91
- </Div>
92
- <FixedLayout filled vertical="bottom">
93
- <Separator wide />
94
- <Tabs>
95
- <TabsItem
96
- selected={this.state.activeTab === "groups"}
97
- onClick={() => this.setState({ activeTab: "groups" })}
98
- >
99
- 176 сообществ
100
- </TabsItem>
101
- <TabsItem
102
- selected={this.state.activeTab === "events"}
103
- onClick={() => this.setState({ activeTab: "events" })}
104
- >
105
- 9 событий
106
- </TabsItem>
107
- </Tabs>
108
- </FixedLayout>
109
- </Group>
110
- </Panel>
111
- </View>
112
- );
113
- }
114
- }
17
+ return (
18
+ <View activePanel="fixedLayout">
19
+ <Panel id="fixedLayout">
20
+ <PanelHeader>Fixed layout</PanelHeader>
21
+ <FixedLayout vertical="top">
22
+ <Search />
23
+ <Separator wide />
24
+ </FixedLayout>
25
+ <Group>
26
+ <Div style={contentStyles}>
27
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed a
28
+ sollicitudin lectus, a commodo sapien. Vivamus a urna leo. Integer
29
+ iaculis dignissim urna, sit amet vestibulum diam bibendum a. Donec
30
+ eu arcu ut augue porttitor faucibus. Vestibulum nec pretium tortor,
31
+ sit amet congue nunc. Aenean ullamcorper ex sem, sed interdum quam
32
+ consequat et. Vestibulum a ex non diam fringilla feugiat. Nunc eu
33
+ tellus sed leo elementum cursus. Mauris blandit porta egestas.
34
+ Curabitur eget justo elementum, malesuada lacus ut, congue mauris.
35
+ Integer orci nisi, convallis vitae dapibus sit amet, molestie a
36
+ risus. Aenean ultricies lacus eros, sit amet condimentum urna
37
+ malesuada et. Sed quis dolor tempus orci fringilla volutpat in sed
38
+ velit. Aenean aliquet bibendum pretium.
39
+ <br />
40
+ <br />
41
+ Cras pulvinar lobortis purus. Donec placerat suscipit leo vitae sodales.
42
+ Phasellus convallis lorem vitae arcu finibus pellentesque. In imperdiet
43
+ vel leo a euismod. Nam sed odio a neque venenatis suscipit a placerat
44
+ magna. Mauris magna nisl, consequat nec augue vitae, ultricies scelerisque
45
+ ante. Phasellus pharetra risus eget imperdiet sodales. Integer dignissim
46
+ auctor semper. Nulla odio odio, euismod ut interdum in, bibendum sed
47
+ massa. Proin rutrum molestie massa in ultrices. Donec eu euismod turpis,
48
+ eget lobortis lorem. Nulla facilisi. Nam lacinia posuere turpis, sed
49
+ laoreet turpis auctor nec.
50
+ <br />
51
+ <br />
52
+ Curabitur eu fermentum mauris. Phasellus malesuada consectetur
53
+ mollis. Pellentesque pulvinar mauris turpis. Integer neque dolor,
54
+ semper quis neque et, gravida commodo eros. Duis efficitur ex a
55
+ turpis blandit tincidunt. Mauris sem mi, imperdiet quis ligula sit
56
+ amet, fermentum vulputate felis. Phasellus eu ullamcorper dolor,
57
+ porttitor pulvinar diam. Aliquam euismod, mauris nec varius lacinia,
58
+ ligula libero vulputate leo, ut tristique massa nisi vitae tortor.
59
+ Phasellus purus elit, gravida sit amet neque id, aliquam rutrum dui.
60
+ Maecenas luctus sem vitae molestie porttitor. Cras viverra mauris
61
+ risus, at sollicitudin ipsum interdum eu. Sed sit amet tempor enim.
62
+ <br />
63
+ <br />
64
+ In hac habitasse platea dictumst. Etiam luctus erat metus, quis efficitur
65
+ quam vulputate quis. Duis ultricies non mauris condimentum molestie.
66
+ Maecenas sollicitudin ex sem, quis ultrices libero blandit eu. Vivamus
67
+ in turpis pulvinar, malesuada enim at, hendrerit magna. Proin eu nulla
68
+ eget arcu pretium pharetra. Sed ullamcorper pulvinar est eu dapibus.
69
+ Cras at varius justo. In ex odio, condimentum id pellentesque a, sodales
70
+ ut diam.
71
+ <br />
72
+ <br />
73
+ Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
74
+ posuere cubilia Curae; Nam aliquet tempor laoreet. Maecenas eu
75
+ pulvinar diam. Pellentesque habitant morbi tristique senectus et
76
+ netus et malesuada fames ac turpis egestas. Maecenas et elit eros.
77
+ Quisque ullamcorper sodales nisi, eleifend aliquet metus venenatis
78
+ in. Aliquam ornare a lacus in tincidunt. Cras vel tristique metus.
79
+ Sed vitae nisl at nisl imperdiet sollicitudin. Sed sit amet enim in
80
+ lectus imperdiet interdum condimentum et diam. Proin venenatis sit
81
+ amet diam ac vulputate. Donec mauris orci, semper volutpat nunc ut,
82
+ efficitur condimentum dolor. Vivamus in quam eget quam lacinia
83
+ pharetra. Phasellus ipsum magna, aliquet id elit eget, cursus
84
+ tincidunt ex. In rhoncus turpis turpis, et viverra ex malesuada vel.
85
+ Donec nisi tellus, mollis et posuere vel, dictum eget neque.
86
+ </Div>
87
+ </Group>
88
+ <FixedLayout filled vertical="bottom">
89
+ <Separator wide />
90
+ <Tabs>
91
+ <TabsItem
92
+ selected={activeTab === "groups"}
93
+ onClick={() => setActiveTab("groups")}
94
+ >
95
+ 176 сообществ
96
+ </TabsItem>
97
+ <TabsItem
98
+ selected={activeTab === "events"}
99
+ onClick={() => setActiveTab("events")}
100
+ >
101
+ 9 событий
102
+ </TabsItem>
103
+ </Tabs>
104
+ </FixedLayout>
105
+ </Panel>
106
+ </View>
107
+ );
108
+ };
115
109
 
116
110
  <Example />;
117
111
  ```
@@ -9,7 +9,6 @@ import {
9
9
  } from "../../lib/accessibility";
10
10
  import { useDOM } from "../../lib/dom";
11
11
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
12
- import { noop } from "../../lib/utils";
13
12
  import { HasComponent, HasRootRef } from "../../types";
14
13
  import { AppRootContext } from "../AppRoot/AppRootContext";
15
14
 
@@ -19,9 +18,9 @@ export interface FocusTrapProps
19
18
  extends React.AllHTMLAttributes<HTMLElement>,
20
19
  HasRootRef<HTMLElement>,
21
20
  HasComponent {
22
- onClose?: (props?: any) => void;
23
21
  restoreFocus?: boolean;
24
22
  timeout?: number;
23
+ onClose?(): void;
25
24
  }
26
25
 
27
26
  /**
@@ -29,7 +28,7 @@ export interface FocusTrapProps
29
28
  */
30
29
  export const FocusTrap = ({
31
30
  Component = "div",
32
- onClose = noop,
31
+ onClose,
33
32
  restoreFocus = true,
34
33
  timeout = 0,
35
34
  getRootRef,
@@ -66,7 +65,7 @@ export const FocusTrap = ({
66
65
 
67
66
  useIsomorphicLayoutEffect(() => {
68
67
  if (!ref.current) {
69
- return noop();
68
+ return;
70
69
  }
71
70
 
72
71
  const nodes: HTMLElement[] = [];
@@ -82,11 +81,12 @@ export const FocusTrap = ({
82
81
  }
83
82
  );
84
83
 
85
- if (nodes?.length) {
86
- setFocusableNodes(nodes);
84
+ if (nodes.length === 0) {
85
+ // Чтобы фокус был хотя бы на родителе
86
+ nodes.push(ref.current);
87
87
  }
88
88
 
89
- return noop();
89
+ setFocusableNodes(nodes);
90
90
  }, [children]);
91
91
 
92
92
  // HANDLE TRAP UNMOUNT
@@ -105,7 +105,7 @@ export const FocusTrap = ({
105
105
  };
106
106
  }
107
107
 
108
- return noop();
108
+ return;
109
109
  }, [restoreFocus]);
110
110
 
111
111
  const onDocumentKeydown = (e: KeyboardEvent) => {
@@ -129,7 +129,7 @@ export const FocusTrap = ({
129
129
  }
130
130
  }
131
131
 
132
- if (pressedKey(e) === Keys.ESCAPE) {
132
+ if (onClose && pressedKey(e) === Keys.ESCAPE) {
133
133
  onClose();
134
134
  }
135
135
 
@@ -140,7 +140,7 @@ export const FocusTrap = ({
140
140
  });
141
141
 
142
142
  return (
143
- <Component ref={ref} {...restProps}>
143
+ <Component tabIndex={-1} ref={ref} {...restProps}>
144
144
  {children}
145
145
  </Component>
146
146
  );
@@ -14,7 +14,7 @@
14
14
 
15
15
  .Group--card > .Group__inner {
16
16
  background: var(--background_content, var(--vkui--color_background_content));
17
- border-radius: var(--vkui--size_border_radius--regular);
17
+ border-radius: var(--vkui--size_border_radius_paper--regular);
18
18
  position: relative;
19
19
  }
20
20
 
@@ -138,7 +138,7 @@ const SharedContent = () => {
138
138
 
139
139
  <Group
140
140
  header={<Header>Адреса</Header>}
141
- description="Для использования в мини-приложениях, Delivery Cub, VK Taxi и других сервисах ВКонтакте. Эти адреса видны только Вам."
141
+ description="Для использования в мини-приложениях, Delivery Club, VK Taxi и других сервисах ВКонтакте. Эти адреса видны только Вам."
142
142
  >
143
143
  <CellButton>Добавить домашний адрес</CellButton>
144
144
  <CellButton>Добавить рабочий адрес</CellButton>