@vkontakte/vkui 5.1.0 → 5.2.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 (516) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +118 -0
  3. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js +1 -1
  4. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  5. package/dist/cjs/components/AppRoot/AppRoot.js +7 -4
  6. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  7. package/dist/cjs/components/Avatar/Avatar.d.ts +1 -1
  8. package/dist/cjs/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.d.ts +1 -1
  9. package/dist/cjs/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js +5 -4
  10. package/dist/cjs/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js.map +1 -1
  11. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js +7 -4
  12. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -1
  13. package/dist/cjs/components/Checkbox/Checkbox.d.ts +3 -2
  14. package/dist/cjs/components/Checkbox/Checkbox.js +12 -2
  15. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  16. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +0 -4
  17. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  18. package/dist/cjs/components/ContentCard/ContentCard.js +2 -1
  19. package/dist/cjs/components/ContentCard/ContentCard.js.map +1 -1
  20. package/dist/cjs/components/CustomSelect/CustomSelect.js +11 -7
  21. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  22. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -3
  23. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js +21 -72
  24. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  25. package/dist/cjs/components/DateInput/DateInput.d.ts +3 -2
  26. package/dist/cjs/components/DateInput/DateInput.js +3 -3
  27. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  28. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  29. package/dist/cjs/components/DateRangeInput/DateRangeInput.js +3 -2
  30. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  31. package/dist/cjs/components/Epic/Epic.js +1 -1
  32. package/dist/cjs/components/Epic/Epic.js.map +1 -1
  33. package/dist/cjs/components/FixedLayout/FixedLayout.js +2 -2
  34. package/dist/cjs/components/FixedLayout/FixedLayout.js.map +1 -1
  35. package/dist/cjs/components/FormField/FormField.js +6 -10
  36. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  37. package/dist/cjs/components/IconButton/IconButton.js +9 -0
  38. package/dist/cjs/components/IconButton/IconButton.js.map +1 -1
  39. package/dist/cjs/components/ModalCard/ModalCard.d.ts +1 -1
  40. package/dist/cjs/components/ModalCard/ModalCard.js +4 -2
  41. package/dist/cjs/components/ModalCard/ModalCard.js.map +1 -1
  42. package/dist/cjs/components/ModalCardBase/ModalCardBase.d.ts +5 -1
  43. package/dist/cjs/components/ModalCardBase/ModalCardBase.js +9 -2
  44. package/dist/cjs/components/ModalCardBase/ModalCardBase.js.map +1 -1
  45. package/dist/cjs/components/ModalPage/ModalPage.d.ts +2 -6
  46. package/dist/cjs/components/ModalPage/ModalPage.js +13 -7
  47. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  48. package/dist/cjs/components/ModalRoot/ModalRoot.js +1 -2
  49. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  50. package/dist/cjs/components/NativeSelect/NativeSelect.d.ts +1 -1
  51. package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -2
  52. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  53. package/dist/cjs/components/PanelHeader/PanelHeader.js +18 -4
  54. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  55. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +11 -2
  56. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  57. package/dist/cjs/components/Popover/Popover.js +4 -1
  58. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  59. package/dist/cjs/components/Popper/Popper.d.ts +12 -9
  60. package/dist/cjs/components/Popper/Popper.js +92 -119
  61. package/dist/cjs/components/Popper/Popper.js.map +1 -1
  62. package/dist/cjs/components/PopperArrow/PopperArrow.d.ts +15 -5
  63. package/dist/cjs/components/PopperArrow/PopperArrow.js +44 -17
  64. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -1
  65. package/dist/cjs/components/Progress/Progress.js +3 -1
  66. package/dist/cjs/components/Progress/Progress.js.map +1 -1
  67. package/dist/cjs/components/Root/Root.js +2 -2
  68. package/dist/cjs/components/Root/Root.js.map +1 -1
  69. package/dist/cjs/components/Select/Select.d.ts +1 -5
  70. package/dist/cjs/components/Select/Select.js +13 -41
  71. package/dist/cjs/components/Select/Select.js.map +1 -1
  72. package/dist/cjs/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  73. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +2 -2
  74. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  75. package/dist/cjs/components/SelectTypography/SelectTypography.d.ts +11 -0
  76. package/dist/cjs/components/SelectTypography/SelectTypography.js +48 -0
  77. package/dist/cjs/components/SelectTypography/SelectTypography.js.map +1 -0
  78. package/dist/cjs/components/Slider/Slider.d.ts +1 -1
  79. package/dist/cjs/components/Slider/Slider.js +4 -3
  80. package/dist/cjs/components/Slider/Slider.js.map +1 -1
  81. package/dist/cjs/components/Spacing/Spacing.js +2 -1
  82. package/dist/cjs/components/Spacing/Spacing.js.map +1 -1
  83. package/dist/cjs/components/SplitCol/SplitCol.d.ts +0 -6
  84. package/dist/cjs/components/SplitCol/SplitCol.js +3 -11
  85. package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
  86. package/dist/cjs/components/SplitCol/SplitColContext.d.ts +7 -0
  87. package/dist/cjs/components/SplitCol/SplitColContext.js +18 -0
  88. package/dist/cjs/components/SplitCol/SplitColContext.js.map +1 -0
  89. package/dist/cjs/components/Switch/Switch.js +2 -3
  90. package/dist/cjs/components/Switch/Switch.js.map +1 -1
  91. package/dist/cjs/components/TabbarItem/TabbarItem.js +9 -0
  92. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  93. package/dist/cjs/components/Tabs/Tabs.js +6 -15
  94. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  95. package/dist/cjs/components/Tooltip/Tooltip.d.ts +3 -3
  96. package/dist/cjs/components/Tooltip/Tooltip.js +116 -151
  97. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  98. package/dist/cjs/components/Touch/Touch.js +4 -4
  99. package/dist/cjs/components/Touch/Touch.js.map +1 -1
  100. package/dist/cjs/components/View/View.js +2 -2
  101. package/dist/cjs/components/View/View.js.map +1 -1
  102. package/dist/cjs/components/View/ViewInfinite.d.ts +1 -1
  103. package/dist/cjs/components/View/ViewInfinite.js +2 -2
  104. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  105. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js +10 -8
  106. package/dist/cjs/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  107. package/dist/cjs/index.d.ts +37 -30
  108. package/dist/cjs/index.js +13 -13
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/lib/floating/adapters.d.ts +2 -0
  111. package/dist/cjs/lib/floating/adapters.js +63 -0
  112. package/dist/cjs/lib/floating/adapters.js.map +1 -0
  113. package/dist/cjs/lib/floating/functions.d.ts +10 -0
  114. package/dist/cjs/lib/floating/functions.js +36 -0
  115. package/dist/cjs/lib/floating/functions.js.map +1 -0
  116. package/dist/cjs/lib/floating/index.d.ts +4 -0
  117. package/dist/cjs/lib/floating/index.js +75 -0
  118. package/dist/cjs/lib/floating/index.js.map +1 -0
  119. package/dist/cjs/lib/floating/types.d.ts +4 -0
  120. package/dist/cjs/lib/floating/types.js +6 -0
  121. package/dist/cjs/lib/floating/types.js.map +1 -0
  122. package/dist/cjs/lib/useIsomorphicLayoutEffect.d.ts +1 -1
  123. package/dist/cjs/lib/warnOnce.d.ts +7 -0
  124. package/dist/cjs/lib/warnOnce.js +14 -0
  125. package/dist/cjs/lib/warnOnce.js.map +1 -1
  126. package/dist/cjs/shared/breakpoints.d.ts +2 -2
  127. package/dist/cjs/shared/breakpoints.js +12 -13
  128. package/dist/cjs/shared/breakpoints.js.map +1 -1
  129. package/dist/components/AdaptivityProvider/AdaptivityProvider.js +1 -1
  130. package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  131. package/dist/components/AppRoot/AppRoot.js +7 -4
  132. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  133. package/dist/components/Avatar/Avatar.d.ts +1 -1
  134. package/dist/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.d.ts +1 -1
  135. package/dist/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js +5 -4
  136. package/dist/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js.map +1 -1
  137. package/dist/components/Cell/CellCheckbox/CellCheckbox.js +7 -4
  138. package/dist/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -1
  139. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  140. package/dist/components/Checkbox/Checkbox.js +12 -2
  141. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  142. package/dist/components/ChipsSelect/ChipsSelect.js +0 -4
  143. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  144. package/dist/components/ContentCard/ContentCard.js +2 -1
  145. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  146. package/dist/components/CustomSelect/CustomSelect.js +12 -8
  147. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  148. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -3
  149. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +22 -73
  150. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  151. package/dist/components/DateInput/DateInput.d.ts +3 -2
  152. package/dist/components/DateInput/DateInput.js +3 -3
  153. package/dist/components/DateInput/DateInput.js.map +1 -1
  154. package/dist/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  155. package/dist/components/DateRangeInput/DateRangeInput.js +3 -2
  156. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  157. package/dist/components/Epic/Epic.js +1 -1
  158. package/dist/components/Epic/Epic.js.map +1 -1
  159. package/dist/components/FixedLayout/FixedLayout.js +1 -1
  160. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  161. package/dist/components/FormField/FormField.js +6 -10
  162. package/dist/components/FormField/FormField.js.map +1 -1
  163. package/dist/components/IconButton/IconButton.js +9 -0
  164. package/dist/components/IconButton/IconButton.js.map +1 -1
  165. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  166. package/dist/components/ModalCard/ModalCard.js +4 -2
  167. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  168. package/dist/components/ModalCardBase/ModalCardBase.d.ts +5 -1
  169. package/dist/components/ModalCardBase/ModalCardBase.js +9 -2
  170. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  171. package/dist/components/ModalPage/ModalPage.d.ts +2 -6
  172. package/dist/components/ModalPage/ModalPage.js +13 -7
  173. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  174. package/dist/components/ModalRoot/ModalRoot.js +1 -2
  175. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  176. package/dist/components/NativeSelect/NativeSelect.d.ts +1 -1
  177. package/dist/components/NativeSelect/NativeSelect.js +1 -1
  178. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  179. package/dist/components/PanelHeader/PanelHeader.js +18 -4
  180. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  181. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +11 -2
  182. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  183. package/dist/components/Popover/Popover.js +4 -1
  184. package/dist/components/Popover/Popover.js.map +1 -1
  185. package/dist/components/Popper/Popper.d.ts +12 -9
  186. package/dist/components/Popper/Popper.js +93 -120
  187. package/dist/components/Popper/Popper.js.map +1 -1
  188. package/dist/components/PopperArrow/PopperArrow.d.ts +15 -5
  189. package/dist/components/PopperArrow/PopperArrow.js +40 -15
  190. package/dist/components/PopperArrow/PopperArrow.js.map +1 -1
  191. package/dist/components/Progress/Progress.js +3 -1
  192. package/dist/components/Progress/Progress.js.map +1 -1
  193. package/dist/components/Root/Root.js +1 -1
  194. package/dist/components/Root/Root.js.map +1 -1
  195. package/dist/components/Select/Select.d.ts +1 -5
  196. package/dist/components/Select/Select.js +12 -39
  197. package/dist/components/Select/Select.js.map +1 -1
  198. package/dist/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  199. package/dist/components/SelectMimicry/SelectMimicry.js +1 -1
  200. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  201. package/dist/components/SelectTypography/SelectTypography.d.ts +11 -0
  202. package/dist/components/SelectTypography/SelectTypography.js +39 -0
  203. package/dist/components/SelectTypography/SelectTypography.js.map +1 -0
  204. package/dist/components/Slider/Slider.d.ts +1 -1
  205. package/dist/components/Slider/Slider.js +4 -3
  206. package/dist/components/Slider/Slider.js.map +1 -1
  207. package/dist/components/Spacing/Spacing.js +2 -1
  208. package/dist/components/Spacing/Spacing.js.map +1 -1
  209. package/dist/components/SplitCol/SplitCol.d.ts +0 -6
  210. package/dist/components/SplitCol/SplitCol.js +1 -7
  211. package/dist/components/SplitCol/SplitCol.js.map +1 -1
  212. package/dist/components/SplitCol/SplitColContext.d.ts +7 -0
  213. package/dist/components/SplitCol/SplitColContext.js +9 -0
  214. package/dist/components/SplitCol/SplitColContext.js.map +1 -0
  215. package/dist/components/Switch/Switch.js +2 -3
  216. package/dist/components/Switch/Switch.js.map +1 -1
  217. package/dist/components/TabbarItem/TabbarItem.js +9 -0
  218. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  219. package/dist/components/Tabs/Tabs.js +6 -15
  220. package/dist/components/Tabs/Tabs.js.map +1 -1
  221. package/dist/components/Tooltip/Tooltip.d.ts +3 -3
  222. package/dist/components/Tooltip/Tooltip.js +116 -151
  223. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  224. package/dist/components/Touch/Touch.js +4 -4
  225. package/dist/components/Touch/Touch.js.map +1 -1
  226. package/dist/components/View/View.js +1 -1
  227. package/dist/components/View/View.js.map +1 -1
  228. package/dist/components/View/ViewInfinite.d.ts +1 -1
  229. package/dist/components/View/ViewInfinite.js +1 -1
  230. package/dist/components/View/ViewInfinite.js.map +1 -1
  231. package/dist/components/WriteBarIcon/WriteBarIcon.js +11 -9
  232. package/dist/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  233. package/dist/components.css +142 -2
  234. package/dist/components.css.map +1 -1
  235. package/dist/components.js.tmp +61921 -4
  236. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +1 -1
  237. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.module.css +1 -1
  238. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +1 -1
  239. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  240. package/dist/cssm/components/Alert/Alert.module.css +1 -1
  241. package/dist/cssm/components/AppRoot/AppRoot.js +7 -4
  242. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  243. package/dist/cssm/components/AppRoot/AppRoot.module.css +1 -1
  244. package/dist/cssm/components/Avatar/Avatar.d.ts +1 -1
  245. package/dist/cssm/components/Avatar/Avatar.module.css +1 -1
  246. package/dist/cssm/components/Avatar/AvatarBadge/AvatarBadge.module.css +1 -1
  247. package/dist/cssm/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.d.ts +1 -1
  248. package/dist/cssm/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js +5 -4
  249. package/dist/cssm/components/Avatar/AvatarBadge/AvatarBadgeWithPreset.js.map +1 -1
  250. package/dist/cssm/components/Badge/Badge.module.css +1 -1
  251. package/dist/cssm/components/Banner/Banner.module.css +1 -1
  252. package/dist/cssm/components/BaseGallery/BaseGallery.module.css +1 -1
  253. package/dist/cssm/components/Button/Button.module.css +1 -1
  254. package/dist/cssm/components/ButtonGroup/ButtonGroup.module.css +1 -1
  255. package/dist/cssm/components/Calendar/Calendar.module.css +1 -1
  256. package/dist/cssm/components/CalendarDay/CalendarDay.module.css +1 -1
  257. package/dist/cssm/components/CalendarDays/CalendarDays.module.css +1 -1
  258. package/dist/cssm/components/CalendarHeader/CalendarHeader.module.css +1 -1
  259. package/dist/cssm/components/CalendarRange/CalendarRange.module.css +1 -1
  260. package/dist/cssm/components/CalendarTime/CalendarTime.module.css +1 -1
  261. package/dist/cssm/components/Card/Card.module.css +2 -2
  262. package/dist/cssm/components/CardGrid/CardGrid.module.css +1 -1
  263. package/dist/cssm/components/CardScroll/CardScroll.module.css +1 -1
  264. package/dist/cssm/components/Cell/Cell.module.css +1 -1
  265. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js +7 -4
  266. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -1
  267. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.module.css +1 -1
  268. package/dist/cssm/components/Cell/CellDragger/CellDragger.module.css +1 -1
  269. package/dist/cssm/components/CellButton/CellButton.module.css +1 -1
  270. package/dist/cssm/components/Checkbox/Checkbox.d.ts +3 -2
  271. package/dist/cssm/components/Checkbox/Checkbox.js +12 -2
  272. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  273. package/dist/cssm/components/Checkbox/Checkbox.module.css +1 -1
  274. package/dist/cssm/components/Chip/Chip.module.css +1 -1
  275. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.module.css +1 -1
  276. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +0 -4
  277. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  278. package/dist/cssm/components/ChipsSelect/ChipsSelect.module.css +1 -1
  279. package/dist/cssm/components/ContentCard/ContentCard.js +2 -1
  280. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  281. package/dist/cssm/components/ContentCard/ContentCard.module.css +1 -1
  282. package/dist/cssm/components/Counter/Counter.module.css +1 -1
  283. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +1 -1
  284. package/dist/cssm/components/CustomSelect/CustomSelect.js +12 -8
  285. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  286. package/dist/cssm/components/CustomSelect/CustomSelect.module.css +1 -1
  287. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +2 -3
  288. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +22 -73
  289. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  290. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.module.css +1 -1
  291. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +1 -1
  292. package/dist/cssm/components/DateInput/DateInput.d.ts +3 -2
  293. package/dist/cssm/components/DateInput/DateInput.js +4 -3
  294. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  295. package/dist/cssm/components/DateInput/DateInput.module.css +1 -1
  296. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  297. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +3 -2
  298. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  299. package/dist/cssm/components/DateRangeInput/DateRangeInput.module.css +1 -1
  300. package/dist/cssm/components/Div/Div.module.css +1 -1
  301. package/dist/cssm/components/Epic/Epic.js +1 -1
  302. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  303. package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -1
  304. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  305. package/dist/cssm/components/FixedLayout/FixedLayout.module.css +1 -1
  306. package/dist/cssm/components/FocusVisible/FocusVisible.module.css +1 -1
  307. package/dist/cssm/components/Footer/Footer.module.css +1 -1
  308. package/dist/cssm/components/FormField/FormField.js +6 -10
  309. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  310. package/dist/cssm/components/FormField/FormField.module.css +1 -1
  311. package/dist/cssm/components/FormItem/FormItem.module.css +1 -1
  312. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.module.css +1 -1
  313. package/dist/cssm/components/FormStatus/FormStatus.module.css +1 -1
  314. package/dist/cssm/components/Gradient/Gradient.module.css +1 -1
  315. package/dist/cssm/components/Group/Group.module.css +1 -1
  316. package/dist/cssm/components/Header/Header.module.css +1 -1
  317. package/dist/cssm/components/HorizontalCell/HorizontalCell.module.css +1 -1
  318. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +1 -1
  319. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.module.css +1 -1
  320. package/dist/cssm/components/IconButton/IconButton.js +9 -0
  321. package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
  322. package/dist/cssm/components/IconButton/IconButton.module.css +1 -1
  323. package/dist/cssm/components/ImageBase/ImageBase.module.css +1 -1
  324. package/dist/cssm/components/ImageBase/ImageBaseBadge/ImageBaseBadge.module.css +1 -1
  325. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.module.css +1 -1
  326. package/dist/cssm/components/InfoRow/InfoRow.module.css +1 -1
  327. package/dist/cssm/components/Input/Input.module.css +1 -1
  328. package/dist/cssm/components/InputLike/InputLike.module.css +1 -1
  329. package/dist/cssm/components/InputLike/InputLikeDivider.module.css +1 -1
  330. package/dist/cssm/components/Link/Link.module.css +1 -1
  331. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
  332. package/dist/cssm/components/ModalCard/ModalCard.d.ts +1 -1
  333. package/dist/cssm/components/ModalCard/ModalCard.js +4 -2
  334. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  335. package/dist/cssm/components/ModalCard/ModalCard.module.css +1 -1
  336. package/dist/cssm/components/ModalCardBase/ModalCardBase.d.ts +5 -1
  337. package/dist/cssm/components/ModalCardBase/ModalCardBase.js +9 -2
  338. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  339. package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +1 -1
  340. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.module.css +1 -1
  341. package/dist/cssm/components/ModalPage/ModalPage.d.ts +2 -6
  342. package/dist/cssm/components/ModalPage/ModalPage.js +13 -7
  343. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  344. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -1
  345. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +1 -1
  346. package/dist/cssm/components/ModalRoot/ModalRoot.js +1 -2
  347. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  348. package/dist/cssm/components/ModalRoot/ModalRoot.module.css +1 -1
  349. package/dist/cssm/components/NativeSelect/NativeSelect.d.ts +1 -1
  350. package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -1
  351. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  352. package/dist/cssm/components/Pagination/Pagination.module.css +1 -1
  353. package/dist/cssm/components/Panel/Panel.module.css +1 -1
  354. package/dist/cssm/components/PanelHeader/PanelHeader.js +18 -4
  355. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  356. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
  357. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +11 -2
  358. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  359. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +1 -1
  360. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.module.css +1 -1
  361. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.module.css +1 -1
  362. package/dist/cssm/components/Placeholder/Placeholder.module.css +1 -1
  363. package/dist/cssm/components/PopoutRoot/PopoutRoot.module.css +1 -1
  364. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +1 -1
  365. package/dist/cssm/components/Popover/Popover.js +4 -1
  366. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  367. package/dist/cssm/components/Popover/Popover.module.css +1 -1
  368. package/dist/cssm/components/Popper/Popper.d.ts +12 -9
  369. package/dist/cssm/components/Popper/Popper.js +93 -120
  370. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  371. package/dist/cssm/components/Popper/Popper.module.css +1 -1
  372. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +15 -5
  373. package/dist/cssm/components/PopperArrow/PopperArrow.js +40 -15
  374. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -1
  375. package/dist/cssm/components/PopperArrow/PopperArrow.module.css +1 -1
  376. package/dist/cssm/components/Progress/Progress.js +3 -1
  377. package/dist/cssm/components/Progress/Progress.js.map +1 -1
  378. package/dist/cssm/components/Progress/Progress.module.css +1 -1
  379. package/dist/cssm/components/PromoBanner/PromoBanner.module.css +1 -1
  380. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +1 -1
  381. package/dist/cssm/components/Radio/Radio.module.css +1 -1
  382. package/dist/cssm/components/RadioGroup/RadioGroup.module.css +1 -1
  383. package/dist/cssm/components/Removable/Removable.module.css +1 -1
  384. package/dist/cssm/components/RichCell/RichCell.module.css +1 -1
  385. package/dist/cssm/components/RichTooltip/RichTooltip.module.css +1 -1
  386. package/dist/cssm/components/Root/Root.js +1 -1
  387. package/dist/cssm/components/Root/Root.js.map +1 -1
  388. package/dist/cssm/components/Root/Root.module.css +1 -1
  389. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.module.css +1 -1
  390. package/dist/cssm/components/Search/Search.module.css +1 -1
  391. package/dist/cssm/components/SegmentedControl/SegmentedControl.module.css +1 -1
  392. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.module.css +1 -1
  393. package/dist/cssm/components/Select/Select.d.ts +1 -5
  394. package/dist/cssm/components/Select/Select.js +12 -39
  395. package/dist/cssm/components/Select/Select.js.map +1 -1
  396. package/dist/cssm/components/Select/Select.module.css +1 -1
  397. package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +1 -1
  398. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +1 -1
  399. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  400. package/dist/cssm/components/SelectTypography/SelectTypography.d.ts +11 -0
  401. package/dist/cssm/components/SelectTypography/SelectTypography.js +40 -0
  402. package/dist/cssm/components/SelectTypography/SelectTypography.js.map +1 -0
  403. package/dist/cssm/components/SelectTypography/SelectTypography.module.css +1 -0
  404. package/dist/cssm/components/Separator/Separator.module.css +1 -1
  405. package/dist/cssm/components/SimpleCell/SimpleCell.module.css +1 -1
  406. package/dist/cssm/components/Slider/Slider.d.ts +1 -1
  407. package/dist/cssm/components/Slider/Slider.js +4 -3
  408. package/dist/cssm/components/Slider/Slider.js.map +1 -1
  409. package/dist/cssm/components/Slider/Slider.module.css +1 -1
  410. package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
  411. package/dist/cssm/components/Spacing/Spacing.js +2 -1
  412. package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
  413. package/dist/cssm/components/Spacing/Spacing.module.css +1 -1
  414. package/dist/cssm/components/Spinner/Spinner.module.css +1 -1
  415. package/dist/cssm/components/SplitCol/SplitCol.d.ts +0 -6
  416. package/dist/cssm/components/SplitCol/SplitCol.js +1 -7
  417. package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
  418. package/dist/cssm/components/SplitCol/SplitCol.module.css +1 -1
  419. package/dist/cssm/components/SplitCol/SplitColContext.d.ts +7 -0
  420. package/dist/cssm/components/SplitCol/SplitColContext.js +9 -0
  421. package/dist/cssm/components/SplitCol/SplitColContext.js.map +1 -0
  422. package/dist/cssm/components/SplitLayout/SplitLayout.module.css +1 -1
  423. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.module.css +1 -1
  424. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -1
  425. package/dist/cssm/components/Switch/Switch.js +2 -3
  426. package/dist/cssm/components/Switch/Switch.js.map +1 -1
  427. package/dist/cssm/components/Switch/Switch.module.css +1 -1
  428. package/dist/cssm/components/Tabbar/Tabbar.module.css +1 -1
  429. package/dist/cssm/components/TabbarItem/TabbarItem.js +9 -0
  430. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  431. package/dist/cssm/components/TabbarItem/TabbarItem.module.css +1 -1
  432. package/dist/cssm/components/Tabs/Tabs.js +6 -15
  433. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  434. package/dist/cssm/components/Tabs/Tabs.module.css +1 -1
  435. package/dist/cssm/components/TabsItem/TabsItem.module.css +1 -1
  436. package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
  437. package/dist/cssm/components/TextTooltip/TextTooltip.module.css +1 -1
  438. package/dist/cssm/components/Textarea/Textarea.module.css +1 -1
  439. package/dist/cssm/components/Tooltip/Tooltip.d.ts +3 -3
  440. package/dist/cssm/components/Tooltip/Tooltip.js +122 -151
  441. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  442. package/dist/cssm/components/Tooltip/Tooltip.module.css +1 -1
  443. package/dist/cssm/components/Touch/Touch.js +4 -4
  444. package/dist/cssm/components/Touch/Touch.js.map +1 -1
  445. package/dist/cssm/components/Typography/Caption/Caption.module.css +1 -1
  446. package/dist/cssm/components/Typography/Footnote/Footnote.module.css +1 -1
  447. package/dist/cssm/components/Typography/Headline/Headline.module.css +1 -1
  448. package/dist/cssm/components/Typography/Paragraph/Paragraph.module.css +1 -1
  449. package/dist/cssm/components/Typography/Subhead/Subhead.module.css +1 -1
  450. package/dist/cssm/components/Typography/Text/Text.module.css +1 -1
  451. package/dist/cssm/components/Typography/Title/Title.module.css +1 -1
  452. package/dist/cssm/components/UsersStack/UsersStack.module.css +1 -1
  453. package/dist/cssm/components/View/View.js +1 -1
  454. package/dist/cssm/components/View/View.js.map +1 -1
  455. package/dist/cssm/components/View/View.module.css +1 -1
  456. package/dist/cssm/components/View/ViewIOS.module.css +1 -1
  457. package/dist/cssm/components/View/ViewInfinite.d.ts +1 -1
  458. package/dist/cssm/components/View/ViewInfinite.js +1 -1
  459. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  460. package/dist/cssm/components/WriteBar/WriteBar.module.css +1 -1
  461. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js +11 -9
  462. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.js.map +1 -1
  463. package/dist/cssm/components/WriteBarIcon/WriteBarIcon.module.css +1 -1
  464. package/dist/cssm/index.d.ts +37 -30
  465. package/dist/cssm/index.js +24 -18
  466. package/dist/cssm/index.js.map +1 -1
  467. package/dist/cssm/lib/floating/adapters.d.ts +2 -0
  468. package/dist/cssm/lib/floating/adapters.js +56 -0
  469. package/dist/cssm/lib/floating/adapters.js.map +1 -0
  470. package/dist/cssm/lib/floating/functions.d.ts +10 -0
  471. package/dist/cssm/lib/floating/functions.js +28 -0
  472. package/dist/cssm/lib/floating/functions.js.map +1 -0
  473. package/dist/cssm/lib/floating/index.d.ts +4 -0
  474. package/dist/cssm/lib/floating/index.js +4 -0
  475. package/dist/cssm/lib/floating/index.js.map +1 -0
  476. package/dist/cssm/lib/floating/types.d.ts +4 -0
  477. package/dist/cssm/lib/floating/types.js +2 -0
  478. package/dist/cssm/lib/floating/types.js.map +1 -0
  479. package/dist/cssm/lib/useIsomorphicLayoutEffect.d.ts +1 -1
  480. package/dist/cssm/lib/warnOnce.d.ts +7 -0
  481. package/dist/cssm/lib/warnOnce.js +12 -0
  482. package/dist/cssm/lib/warnOnce.js.map +1 -1
  483. package/dist/cssm/shared/breakpoints.d.ts +2 -2
  484. package/dist/cssm/shared/breakpoints.js +12 -13
  485. package/dist/cssm/shared/breakpoints.js.map +1 -1
  486. package/dist/cssm/styles/adaptivity.module.css +1 -1
  487. package/dist/cssm/styles/common.css +1 -1
  488. package/dist/cssm/styles/themes.css +1 -1
  489. package/dist/index.d.ts +37 -30
  490. package/dist/index.js +22 -16
  491. package/dist/index.js.map +1 -1
  492. package/dist/lib/floating/adapters.d.ts +2 -0
  493. package/dist/lib/floating/adapters.js +56 -0
  494. package/dist/lib/floating/adapters.js.map +1 -0
  495. package/dist/lib/floating/functions.d.ts +10 -0
  496. package/dist/lib/floating/functions.js +28 -0
  497. package/dist/lib/floating/functions.js.map +1 -0
  498. package/dist/lib/floating/index.d.ts +4 -0
  499. package/dist/lib/floating/index.js +4 -0
  500. package/dist/lib/floating/index.js.map +1 -0
  501. package/dist/lib/floating/types.d.ts +4 -0
  502. package/dist/lib/floating/types.js +2 -0
  503. package/dist/lib/floating/types.js.map +1 -0
  504. package/dist/lib/useIsomorphicLayoutEffect.d.ts +1 -1
  505. package/dist/lib/warnOnce.d.ts +7 -0
  506. package/dist/lib/warnOnce.js +12 -0
  507. package/dist/lib/warnOnce.js.map +1 -1
  508. package/dist/shared/breakpoints.d.ts +2 -2
  509. package/dist/shared/breakpoints.js +12 -13
  510. package/dist/shared/breakpoints.js.map +1 -1
  511. package/dist/stable.js.tmp +69 -21
  512. package/dist/vkui.css +143 -3
  513. package/dist/vkui.css.map +1 -1
  514. package/dist/vkui.js.tmp +61837 -0
  515. package/package.json +6 -6
  516. package/dist/cssm/styles/components.css +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"NativeSelect.js","names":["React","classNames","DropdownIcon","FormField","getPlatformClassName","useIsomorphicLayoutEffect","useEnsuredControl","useExternRef","usePlatform","useAdaptivity","getSizeXClassName","getSizeYClassName","SelectTypography","NativeSelect","style","defaultValue","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","onChangeProp","onChange","valueProp","value","restProps","platform","useState","title","setTitle","empty","setEmpty","selectRef","sizeX","sizeY","selectedOption","current","options","selectedIndex","text","styles"],"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { getPlatformClassName } from '../../helpers/getPlatformClassName';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { getSizeXClassName } from '../../helpers/getSizeXClassName';\nimport { getSizeYClassName } from '../../helpers/getSizeYClassName';\nimport { SelectType, SelectTypography } from '../Select/Select';\nimport styles from '../Select/Select.module.css';\n\nexport interface NativeSelectProps\n extends React.SelectHTMLAttributes<HTMLSelectElement>,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLLabelElement>,\n HasAlign,\n Pick<FormFieldProps, 'status'> {\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n defaultValue = '',\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n onChange: onChangeProp,\n value: valueProp,\n ...restProps\n}: NativeSelectProps) => {\n const platform = usePlatform();\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n disabled,\n onChange: onChangeProp,\n value: valueProp,\n });\n const selectRef = useExternRef(getRef);\n const { sizeX, sizeY } = useAdaptivity();\n\n useIsomorphicLayoutEffect(() => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === '' && placeholder != null);\n }\n }, [value, children]);\n\n return (\n <FormField\n Component=\"label\"\n className={classNames(\n styles['Select'],\n getPlatformClassName(styles['Select'], platform),\n empty && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align && styles[`Select--align-${align}`],\n getSizeXClassName(styles['Select'], sizeX),\n getSizeYClassName(styles['Select'], sizeY),\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n after={<DropdownIcon />}\n status={status}\n >\n <select\n {...restProps}\n disabled={disabled}\n className={styles['Select__el']}\n onChange={onChange}\n value={value}\n ref={selectRef}\n >\n {placeholder && <option value=\"\">{placeholder}</option>}\n {children}\n </select>\n <div className={styles['Select__container']}>\n <SelectTypography className={styles['Select__title']} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"mappings":"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"}
1
+ {"version":3,"file":"NativeSelect.js","names":["React","classNames","DropdownIcon","FormField","getPlatformClassName","useIsomorphicLayoutEffect","useEnsuredControl","useExternRef","usePlatform","useAdaptivity","getSizeXClassName","getSizeYClassName","SelectTypography","NativeSelect","style","defaultValue","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","onChangeProp","onChange","valueProp","value","restProps","platform","useState","title","setTitle","empty","setEmpty","selectRef","sizeX","sizeY","selectedOption","current","options","selectedIndex","text","styles"],"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, FormFieldProps } from '../FormField/FormField';\nimport { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { getPlatformClassName } from '../../helpers/getPlatformClassName';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { useEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { getSizeXClassName } from '../../helpers/getSizeXClassName';\nimport { getSizeYClassName } from '../../helpers/getSizeYClassName';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nexport interface NativeSelectProps\n extends React.SelectHTMLAttributes<HTMLSelectElement>,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLLabelElement>,\n HasAlign,\n Pick<FormFieldProps, 'status'> {\n placeholder?: string;\n multiline?: boolean;\n selectType?: SelectType;\n}\n\nexport interface SelectState {\n value?: React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n title?: string;\n notSelected?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/NativeSelect\n */\nconst NativeSelect = ({\n style,\n defaultValue = '',\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n onChange: onChangeProp,\n value: valueProp,\n ...restProps\n}: NativeSelectProps) => {\n const platform = usePlatform();\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const [value, onChange] = useEnsuredControl({\n defaultValue,\n disabled,\n onChange: onChangeProp,\n value: valueProp,\n });\n const selectRef = useExternRef(getRef);\n const { sizeX, sizeY } = useAdaptivity();\n\n useIsomorphicLayoutEffect(() => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === '' && placeholder != null);\n }\n }, [value, children]);\n\n return (\n <FormField\n Component=\"label\"\n className={classNames(\n styles['Select'],\n getPlatformClassName(styles['Select'], platform),\n empty && styles['Select--empty'],\n multiline && styles['Select--multiline'],\n align && styles[`Select--align-${align}`],\n getSizeXClassName(styles['Select'], sizeX),\n getSizeYClassName(styles['Select'], sizeY),\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n after={<DropdownIcon />}\n status={status}\n >\n <select\n {...restProps}\n disabled={disabled}\n className={styles['Select__el']}\n onChange={onChange}\n value={value}\n ref={selectRef}\n >\n {placeholder && <option value=\"\">{placeholder}</option>}\n {children}\n </select>\n <div className={styles['Select__container']}>\n <SelectTypography className={styles['Select__title']} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n\nexport { NativeSelect };\n"],"mappings":"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"}
@@ -3,8 +3,6 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
3
3
  var _excluded = ["before", "children", "after", "separator", "visor", "transparent", "shadow", "getRef", "getRootRef", "fixed", "className"];
4
4
  import * as React from 'react';
5
5
  import { usePlatform } from '../../hooks/usePlatform';
6
- import { getPlatformClassName } from '../../helpers/getPlatformClassName';
7
- import { getSizeXClassName } from '../../helpers/getSizeXClassName';
8
6
  import { classNames } from '@vkontakte/vkjs';
9
7
  import { FixedLayout } from '../FixedLayout/FixedLayout';
10
8
  import { Separator } from '../Separator/Separator';
@@ -16,6 +14,21 @@ import { ModalRootContext } from '../ModalRoot/ModalRootContext';
16
14
  import { useAdaptivity } from '../../hooks/useAdaptivity';
17
15
  import { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';
18
16
  import { Spacing } from '../Spacing/Spacing';
17
+ function getPlatformClassName(platform) {
18
+ switch (platform) {
19
+ case 'ios':
20
+ return "vkuiPanelHeader--ios";
21
+ case 'vkcom':
22
+ return "vkuiPanelHeader--vkcom";
23
+ default:
24
+ return "vkuiPanelHeader--android";
25
+ }
26
+ }
27
+ var sizeXClassNames = {
28
+ compact: '',
29
+ regular: "vkuiPanelHeader--sizeX-regular",
30
+ none: "vkuiPanelHeader--sizeX-none"
31
+ };
19
32
  var PanelHeaderIn = function PanelHeaderIn(_ref) {
20
33
  var before = _ref.before,
21
34
  after = _ref.after,
@@ -69,12 +82,13 @@ export var PanelHeader = function PanelHeader(_ref2) {
69
82
  var _React$useContext2 = React.useContext(ModalRootContext),
70
83
  isInsideModal = _React$useContext2.isInsideModal;
71
84
  var _useAdaptivity = useAdaptivity(),
72
- sizeX = _useAdaptivity.sizeX;
85
+ _useAdaptivity$sizeX = _useAdaptivity.sizeX,
86
+ sizeX = _useAdaptivity$sizeX === void 0 ? 'none' : _useAdaptivity$sizeX;
73
87
  var _useAdaptivityConditi = useAdaptivityConditionalRender(),
74
88
  adaptiveSizeX = _useAdaptivityConditi.sizeX;
75
89
  var isFixed = fixed !== undefined ? fixed : platform !== Platform.VKCOM;
76
90
  return /*#__PURE__*/React.createElement("div", _extends({}, restProps, {
77
- className: classNames("vkuiPanelHeader", getPlatformClassName("vkuiPanelHeader", platform), transparent && "vkuiPanelHeader--trnsp", shadow && "vkuiPanelHeader--shadow", visor && "vkuiPanelHeader--vis", separator && visor && "vkuiPanelHeader--sep", webviewType === WebviewType.VKAPPS && !isInsideModal && "vkuiPanelHeader--vkapps", !before && "vkuiPanelHeader--no-before", !after && "vkuiPanelHeader--no-after", isFixed && "vkuiPanelHeader--fixed", getSizeXClassName("vkuiPanelHeader", sizeX), className),
91
+ className: classNames("vkuiPanelHeader", getPlatformClassName(platform), transparent && "vkuiPanelHeader--trnsp", shadow && "vkuiPanelHeader--shadow", visor && "vkuiPanelHeader--vis", separator && visor && "vkuiPanelHeader--sep", webviewType === WebviewType.VKAPPS && !isInsideModal && "vkuiPanelHeader--vkapps", !before && "vkuiPanelHeader--no-before", !after && "vkuiPanelHeader--no-after", isFixed && "vkuiPanelHeader--fixed", sizeXClassNames[sizeX], className),
78
92
  ref: isFixed ? getRootRef : getRef
79
93
  }), isFixed ? /*#__PURE__*/React.createElement(FixedLayout, {
80
94
  className: "vkuiPanelHeader__fixed",
@@ -1 +1 @@
1
- {"version":3,"file":"PanelHeader.js","names":["React","usePlatform","getPlatformClassName","getSizeXClassName","classNames","FixedLayout","Separator","Platform","useConfigProvider","WebviewType","Text","TooltipContainer","ModalRootContext","useAdaptivity","useAdaptivityConditionalRender","Spacing","PanelHeaderIn","before","after","separator","children","webviewType","useContext","isInsideModal","platform","VKCOM","INTERNAL","PanelHeader","visor","transparent","shadow","getRef","getRootRef","fixed","className","restProps","sizeX","adaptiveSizeX","isFixed","undefined","VKAPPS","compact","regular"],"sources":["../../../src/components/PanelHeader/PanelHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getPlatformClassName } from '../../helpers/getPlatformClassName';\nimport { getSizeXClassName } from '../../helpers/getSizeXClassName';\nimport { classNames } from '@vkontakte/vkjs';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport { Separator } from '../Separator/Separator';\nimport { Platform } from '../../lib/platform';\nimport { HasRef, HasRootRef } from '../../types';\nimport { useConfigProvider, WebviewType } from '../ConfigProvider/ConfigProviderContext';\nimport { Text } from '../Typography/Text/Text';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { ModalRootContext } from '../ModalRoot/ModalRootContext';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { Spacing } from '../Spacing/Spacing';\nimport styles from './PanelHeader.module.css';\n\nexport interface PanelHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRef<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n before?: React.ReactNode;\n after?: React.ReactNode;\n separator?: boolean;\n transparent?: boolean;\n shadow?: boolean;\n /**\n * Если `false`, то шапка будет нулевой высоты и контент панели \"залезет\" под неё\n */\n visor?: boolean;\n /**\n * Если `false`, то шапка будет в потоке. По умолчанию `true`, но если платформа vkcom, то по умолчанию `false`.\n */\n fixed?: boolean;\n}\n\nconst PanelHeaderIn = ({ before, after, separator, children }: PanelHeaderProps) => {\n const { webviewType } = useConfigProvider();\n const { isInsideModal } = React.useContext(ModalRootContext);\n const platform = usePlatform();\n\n return (\n <React.Fragment>\n <TooltipContainer fixed className={styles['PanelHeader__in']}>\n <div className={styles['PanelHeader__before']}>{before}</div>\n <div className={styles['PanelHeader__content']}>\n {platform === Platform.VKCOM ? (\n <Text weight=\"2\">{children}</Text>\n ) : (\n <span className={styles['PanelHeader__content-in']}>{children}</span>\n )}\n </div>\n <div className={styles['PanelHeader__after']}>\n {(webviewType === WebviewType.INTERNAL || isInsideModal) && after}\n </div>\n </TooltipContainer>\n {separator && platform === Platform.VKCOM && <Separator wide />}\n </React.Fragment>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeader\n */\nexport const PanelHeader = ({\n before,\n children,\n after,\n separator = true,\n visor = true,\n transparent = false,\n shadow,\n getRef,\n getRootRef,\n fixed,\n className,\n ...restProps\n}: PanelHeaderProps) => {\n const platform = usePlatform();\n const { webviewType } = useConfigProvider();\n const { isInsideModal } = React.useContext(ModalRootContext);\n const { sizeX } = useAdaptivity();\n const { sizeX: adaptiveSizeX } = useAdaptivityConditionalRender();\n let isFixed = fixed !== undefined ? fixed : platform !== Platform.VKCOM;\n\n return (\n <div\n {...restProps}\n className={classNames(\n styles['PanelHeader'],\n getPlatformClassName(styles['PanelHeader'], platform),\n transparent && styles['PanelHeader--trnsp'],\n shadow && styles['PanelHeader--shadow'],\n visor && styles['PanelHeader--vis'],\n separator && visor && styles['PanelHeader--sep'],\n webviewType === WebviewType.VKAPPS && !isInsideModal && styles['PanelHeader--vkapps'],\n !before && styles['PanelHeader--no-before'],\n !after && styles['PanelHeader--no-after'],\n isFixed && styles['PanelHeader--fixed'],\n getSizeXClassName(styles['PanelHeader'], sizeX),\n className,\n )}\n ref={isFixed ? getRootRef : getRef}\n >\n {isFixed ? (\n <FixedLayout className={styles['PanelHeader__fixed']} vertical=\"top\" getRootRef={getRef}>\n <PanelHeaderIn before={before} after={after} separator={separator}>\n {children}\n </PanelHeaderIn>\n </FixedLayout>\n ) : (\n <PanelHeaderIn before={before} after={after} separator={separator}>\n {children}\n </PanelHeaderIn>\n )}\n {separator && visor && platform !== Platform.VKCOM && (\n <React.Fragment>\n {adaptiveSizeX.compact && <Separator className={adaptiveSizeX.compact.className} />}\n {adaptiveSizeX.regular && (\n <Spacing className={adaptiveSizeX.regular.className} size={16} />\n )}\n </React.Fragment>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PanelHeader.js","names":["React","usePlatform","classNames","FixedLayout","Separator","Platform","useConfigProvider","WebviewType","Text","TooltipContainer","ModalRootContext","useAdaptivity","useAdaptivityConditionalRender","Spacing","getPlatformClassName","platform","sizeXClassNames","compact","regular","none","PanelHeaderIn","before","after","separator","children","webviewType","useContext","isInsideModal","VKCOM","INTERNAL","PanelHeader","visor","transparent","shadow","getRef","getRootRef","fixed","className","restProps","sizeX","adaptiveSizeX","isFixed","undefined","VKAPPS"],"sources":["../../../src/components/PanelHeader/PanelHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { classNames } from '@vkontakte/vkjs';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport { Separator } from '../Separator/Separator';\nimport { Platform } from '../../lib/platform';\nimport { HasRef, HasRootRef } from '../../types';\nimport { useConfigProvider, WebviewType } from '../ConfigProvider/ConfigProviderContext';\nimport { Text } from '../Typography/Text/Text';\nimport { TooltipContainer } from '../Tooltip/TooltipContainer';\nimport { ModalRootContext } from '../ModalRoot/ModalRootContext';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { Spacing } from '../Spacing/Spacing';\nimport styles from './PanelHeader.module.css';\n\nfunction getPlatformClassName(platform: string): string {\n switch (platform) {\n case 'ios':\n return styles['PanelHeader--ios'];\n case 'vkcom':\n return styles['PanelHeader--vkcom'];\n default:\n return styles['PanelHeader--android'];\n }\n}\n\nconst sizeXClassNames = {\n compact: '',\n regular: styles['PanelHeader--sizeX-regular'],\n none: styles['PanelHeader--sizeX-none'],\n};\n\nexport interface PanelHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n HasRef<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n before?: React.ReactNode;\n after?: React.ReactNode;\n separator?: boolean;\n transparent?: boolean;\n shadow?: boolean;\n /**\n * Если `false`, то шапка будет нулевой высоты и контент панели \"залезет\" под неё\n */\n visor?: boolean;\n /**\n * Если `false`, то шапка будет в потоке. По умолчанию `true`, но если платформа vkcom, то по умолчанию `false`.\n */\n fixed?: boolean;\n}\n\nconst PanelHeaderIn = ({ before, after, separator, children }: PanelHeaderProps) => {\n const { webviewType } = useConfigProvider();\n const { isInsideModal } = React.useContext(ModalRootContext);\n const platform = usePlatform();\n\n return (\n <React.Fragment>\n <TooltipContainer fixed className={styles['PanelHeader__in']}>\n <div className={styles['PanelHeader__before']}>{before}</div>\n <div className={styles['PanelHeader__content']}>\n {platform === Platform.VKCOM ? (\n <Text weight=\"2\">{children}</Text>\n ) : (\n <span className={styles['PanelHeader__content-in']}>{children}</span>\n )}\n </div>\n <div className={styles['PanelHeader__after']}>\n {(webviewType === WebviewType.INTERNAL || isInsideModal) && after}\n </div>\n </TooltipContainer>\n {separator && platform === Platform.VKCOM && <Separator wide />}\n </React.Fragment>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeader\n */\nexport const PanelHeader = ({\n before,\n children,\n after,\n separator = true,\n visor = true,\n transparent = false,\n shadow,\n getRef,\n getRootRef,\n fixed,\n className,\n ...restProps\n}: PanelHeaderProps) => {\n const platform = usePlatform();\n const { webviewType } = useConfigProvider();\n const { isInsideModal } = React.useContext(ModalRootContext);\n const { sizeX = 'none' } = useAdaptivity();\n const { sizeX: adaptiveSizeX } = useAdaptivityConditionalRender();\n let isFixed = fixed !== undefined ? fixed : platform !== Platform.VKCOM;\n\n return (\n <div\n {...restProps}\n className={classNames(\n styles['PanelHeader'],\n getPlatformClassName(platform),\n transparent && styles['PanelHeader--trnsp'],\n shadow && styles['PanelHeader--shadow'],\n visor && styles['PanelHeader--vis'],\n separator && visor && styles['PanelHeader--sep'],\n webviewType === WebviewType.VKAPPS && !isInsideModal && styles['PanelHeader--vkapps'],\n !before && styles['PanelHeader--no-before'],\n !after && styles['PanelHeader--no-after'],\n isFixed && styles['PanelHeader--fixed'],\n sizeXClassNames[sizeX],\n className,\n )}\n ref={isFixed ? getRootRef : getRef}\n >\n {isFixed ? (\n <FixedLayout className={styles['PanelHeader__fixed']} vertical=\"top\" getRootRef={getRef}>\n <PanelHeaderIn before={before} after={after} separator={separator}>\n {children}\n </PanelHeaderIn>\n </FixedLayout>\n ) : (\n <PanelHeaderIn before={before} after={after} separator={separator}>\n {children}\n </PanelHeaderIn>\n )}\n {separator && visor && platform !== Platform.VKCOM && (\n <React.Fragment>\n {adaptiveSizeX.compact && <Separator className={adaptiveSizeX.compact.className} />}\n {adaptiveSizeX.regular && (\n <Spacing className={adaptiveSizeX.regular.className} size={16} />\n )}\n </React.Fragment>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -3,7 +3,6 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
3
3
  var _excluded = ["children", "primary", "label", "className"];
4
4
  import * as React from 'react';
5
5
  import { Tappable } from '../Tappable/Tappable';
6
- import { getPlatformClassName } from '../../helpers/getPlatformClassName';
7
6
  import { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';
8
7
  import { warnOnce } from '../../lib/warnOnce';
9
8
  import { usePlatform } from '../../hooks/usePlatform';
@@ -11,6 +10,16 @@ import { getTitleFromChildren } from '../../lib/utils';
11
10
  import { Platform } from '../../lib/platform';
12
11
  import { Text } from '../Typography/Text/Text';
13
12
  import { Title } from '../Typography/Title/Title';
13
+ function getPlatformClassName(platform) {
14
+ switch (platform) {
15
+ case 'ios':
16
+ return "vkuiPanelHeaderButton--ios";
17
+ case 'vkcom':
18
+ return "vkuiPanelHeaderButton--vkcom";
19
+ default:
20
+ return "vkuiPanelHeaderButton--android";
21
+ }
22
+ }
14
23
  var ButtonTypography = function ButtonTypography(_ref) {
15
24
  var primary = _ref.primary,
16
25
  children = _ref.children;
@@ -67,7 +76,7 @@ export var PanelHeaderButton = function PanelHeaderButton(_ref2) {
67
76
  Component: restProps.href ? 'a' : 'button',
68
77
  activeEffectDelay: 200,
69
78
  activeMode: activeMode,
70
- className: classNames("vkuiPanelHeaderButton", getPlatformClassName("vkuiPanelHeaderButton", platform), isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className)
79
+ className: classNames("vkuiPanelHeaderButton", getPlatformClassName(platform), isPrimitive && "vkuiPanelHeaderButton--primitive", !isPrimitive && !isPrimitiveLabel && "vkuiPanelHeaderButton--notPrimitive", className)
71
80
  }), isPrimitive ? /*#__PURE__*/React.createElement(ButtonTypography, {
72
81
  primary: primary
73
82
  }, children) : children, isPrimitiveLabel ? /*#__PURE__*/React.createElement(ButtonTypography, {
@@ -1 +1 @@
1
- {"version":3,"file":"PanelHeaderButton.js","names":["React","Tappable","getPlatformClassName","classNames","isPrimitiveReactNode","warnOnce","usePlatform","getTitleFromChildren","Platform","Text","Title","ButtonTypography","primary","children","platform","IOS","VKCOM","undefined","warn","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","href"],"sources":["../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { TappableProps, Tappable } from '../Tappable/Tappable';\nimport { getPlatformClassName } from '../../helpers/getPlatformClassName';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTitleFromChildren } from '../../lib/utils';\nimport { Platform } from '../../lib/platform';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === Platform.VKCOM ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case Platform.VKCOM:\n hoverMode = styles['PanelHeaderButton--hover'];\n activeMode = styles['PanelHeaderButton--active'];\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps['aria-label'] ||\n restProps['aria-labelledby'],\n );\n\n if (!hasAccessibleName) {\n warn(\n 'a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.',\n 'error',\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? 'a' : 'button'}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNames(\n styles['PanelHeaderButton'],\n getPlatformClassName(styles['PanelHeaderButton'], platform),\n isPrimitive && styles['PanelHeaderButton--primitive'],\n !isPrimitive && !isPrimitiveLabel && styles['PanelHeaderButton--notPrimitive'],\n className,\n )}\n >\n {isPrimitive ? <ButtonTypography primary={primary}>{children}</ButtonTypography> : children}\n {isPrimitiveLabel ? (\n <ButtonTypography primary={primary} className={styles['PanelHeaderButton__label']}>\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PanelHeaderButton.js","names":["React","Tappable","classNames","isPrimitiveReactNode","warnOnce","usePlatform","getTitleFromChildren","Platform","Text","Title","getPlatformClassName","platform","ButtonTypography","primary","children","IOS","VKCOM","undefined","warn","PanelHeaderButton","label","className","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","process","env","NODE_ENV","hasAccessibleName","Boolean","href"],"sources":["../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["import * as React from 'react';\nimport { TappableProps, Tappable } from '../Tappable/Tappable';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTitleFromChildren } from '../../lib/utils';\nimport { Platform } from '../../lib/platform';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nfunction getPlatformClassName(platform: string): string {\n switch (platform) {\n case 'ios':\n return styles['PanelHeaderButton--ios'];\n case 'vkcom':\n return styles['PanelHeaderButton--vkcom'];\n default:\n return styles['PanelHeaderButton--android'];\n }\n}\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {\n primary?: boolean;\n label?: React.ReactNode;\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === Platform.VKCOM ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n className,\n ...restProps\n}: PanelHeaderButtonProps) => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case Platform.IOS:\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case Platform.VKCOM:\n hoverMode = styles['PanelHeaderButton--hover'];\n activeMode = styles['PanelHeaderButton--active'];\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n const hasAccessibleName = Boolean(\n getTitleFromChildren(children) ||\n getTitleFromChildren(label) ||\n restProps['aria-label'] ||\n restProps['aria-labelledby'],\n );\n\n if (!hasAccessibleName) {\n warn(\n 'a11y: У кнопки нет названия, которое может прочитать скринридер, и она недоступна для части пользователей. Замените содержимое на текст или добавьте описание действия с помощью пропа aria-label.',\n 'error',\n );\n }\n }\n\n return (\n <Tappable\n {...restProps}\n hoverMode={hoverMode}\n Component={restProps.href ? 'a' : 'button'}\n activeEffectDelay={200}\n activeMode={activeMode}\n className={classNames(\n styles['PanelHeaderButton'],\n getPlatformClassName(platform),\n isPrimitive && styles['PanelHeaderButton--primitive'],\n !isPrimitive && !isPrimitiveLabel && styles['PanelHeaderButton--notPrimitive'],\n className,\n )}\n >\n {isPrimitive ? <ButtonTypography primary={primary}>{children}</ButtonTypography> : children}\n {isPrimitiveLabel ? (\n <ButtonTypography primary={primary} className={styles['PanelHeaderButton__label']}>\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"mappings":"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"}
@@ -88,7 +88,10 @@ export var Popover = function Popover(_ref) {
88
88
  setShown(false);
89
89
  }
90
90
  };
91
- useGlobalEventListener(document, 'click', handleOutsideClick);
91
+ useGlobalEventListener(document, 'click', handleOutsideClick, {
92
+ capture: true,
93
+ passive: true
94
+ });
92
95
  var targetEnterListener = useEventListener('mouseenter', handleTargetEnter);
93
96
  var targetClickEvent = useEventListener('click', handleTargetClick);
94
97
  var targetLeaveListener = useEventListener('mouseleave', handleTargetLeave);
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","names":["React","useDOM","classNames","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","remove","wrapperClassName","undefined"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../../lib/dom';\nimport { classNames } from '@vkontakte/vkjs';\nimport { PopperCommonProps, Popper } from '../Popper/Popper';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePatchChildrenRef } from '../../hooks/usePatchChildrenRef';\nimport styles from './Popover.module.css';\n\nexport interface PopoverProps extends Omit<PopperCommonProps, 'arrow' | 'arrowClassName'> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: 'click' | 'hover';\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n action = 'click',\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\n const { document } = useDOM();\n\n const hoverable = action === 'hover';\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(null);\n\n const shown = typeof shownProp === 'boolean' ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== 'boolean') {\n setComputedShown(value);\n }\n typeof onShownChange === 'function' && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, 'click', handleOutsideClick);\n const targetEnterListener = useEventListener('mouseenter', handleTargetEnter);\n const targetClickEvent = useEventListener('click', handleTargetClick);\n const targetLeaveListener = useEventListener('mouseleave', handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n }, [childRef, targetClickEvent]);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n\n return () => {\n targetEnterListener.remove();\n targetLeaveListener.remove();\n };\n }, [childRef, hoverable, targetEnterListener, targetLeaveListener]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n className={classNames(styles['Popover'], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n '--vkui_internal--popover_safe_zone_padding': `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap className={wrapperClassName} onClose={handleContentKeyDownEscape}>\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Popover.js","names":["React","useDOM","classNames","Popper","FocusTrap","useTimeout","useExternRef","useEventListener","useGlobalEventListener","usePatchChildrenRef","Popover","action","shownProp","shown","showDelay","hideDelay","offsetDistance","content","children","styleProp","style","className","getRef","onShownChange","restProps","document","hoverable","hovered","useRef","useState","computedShown","setComputedShown","dropdownNode","setPopperNode","patchedPopperRef","childRef","child","setShown","value","showTimeout","hideTimeout","handleTargetEnter","current","clear","set","handleTargetClick","handleTargetLeave","handleContentKeyDownEscape","handleOutsideClick","e","contains","target","capture","passive","targetEnterListener","targetClickEvent","targetLeaveListener","useEffect","add","remove","wrapperClassName","undefined"],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../../lib/dom';\nimport { classNames } from '@vkontakte/vkjs';\nimport { PopperCommonProps, Popper } from '../Popper/Popper';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePatchChildrenRef } from '../../hooks/usePatchChildrenRef';\nimport styles from './Popover.module.css';\n\nexport interface PopoverProps extends Omit<PopperCommonProps, 'arrow' | 'arrowClassName'> {\n /**\n * Механика вызова всплывающего окна.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – помимо нажатия, будет показываться/скрывается при наведении/отведении мыши.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что не будет закрываться\n * > при повторном нажатии на целевой элемент. Для закрытия необходимо нажать на область вне целевого элемента\n * > и выпадающего окна.\n */\n action?: 'click' | 'hover';\n /**\n * Если передан, то всплывающее окно будет показан/скрыт в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Количество миллисекунд, после которых произойдёт показ всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдёт скрытие всплывающего окна.\n *\n * > Используется только для `action=\"hover\"` при наведении/отведении мыши.\n */\n hideDelay?: number;\n /**\n * Содержимое всплывающего окна.\n */\n content?: React.ReactNode;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен предоставлять параметры либо `getRootRef`, либо `ref` для получения ссылки на DOM-узел.\n */\n children?: React.ReactElement;\n /**\n * Вызывается при каждом изменении видимости всплывающего окна.\n */\n onShownChange?(shown: boolean): void;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Popover\n */\nexport const Popover = ({\n action = 'click',\n shown: shownProp,\n showDelay = 150,\n hideDelay = 150,\n offsetDistance = 8,\n content,\n children,\n style: styleProp,\n className,\n getRef,\n onShownChange,\n ...restProps\n}: PopoverProps) => {\n const { document } = useDOM();\n\n const hoverable = action === 'hover';\n const hovered = React.useRef(false);\n const [computedShown, setComputedShown] = React.useState(shownProp || false);\n const [dropdownNode, setPopperNode] = React.useState<HTMLElement | null>(null);\n\n const shown = typeof shownProp === 'boolean' ? shownProp : computedShown;\n\n const patchedPopperRef = useExternRef<HTMLDivElement>(setPopperNode, getRef);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const setShown = (value: boolean) => {\n if (typeof shownProp !== 'boolean') {\n setComputedShown(value);\n }\n typeof onShownChange === 'function' && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => setShown(true), showDelay);\n\n const hideTimeout = useTimeout(() => setShown(false), hideDelay);\n\n const handleTargetEnter = () => {\n hovered.current = true;\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const handleTargetClick = () => {\n if (hovered.current && shown) {\n return;\n }\n setShown(!shown);\n };\n\n const handleTargetLeave = () => {\n hovered.current = false;\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const handleContentKeyDownEscape = () => {\n setShown(false);\n };\n\n const handleOutsideClick = (e: MouseEvent) => {\n if (\n dropdownNode &&\n !childRef.current?.contains(e.target as Node) &&\n !dropdownNode.contains(e.target as Node)\n ) {\n setShown(false);\n }\n };\n\n useGlobalEventListener(document, 'click', handleOutsideClick, {\n capture: true,\n passive: true,\n });\n const targetEnterListener = useEventListener('mouseenter', handleTargetEnter);\n const targetClickEvent = useEventListener('click', handleTargetClick);\n const targetLeaveListener = useEventListener('mouseleave', handleTargetLeave);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n targetClickEvent.add(childRef.current);\n }, [childRef, targetClickEvent]);\n\n React.useEffect(() => {\n if (!childRef.current) {\n return;\n }\n\n if (hoverable) {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }\n\n return () => {\n targetEnterListener.remove();\n targetLeaveListener.remove();\n };\n }, [childRef, hoverable, targetEnterListener, targetLeaveListener]);\n\n return (\n <React.Fragment>\n {child}\n {shown && (\n <Popper\n {...restProps}\n className={classNames(styles['Popover'], className)}\n targetRef={childRef}\n getRef={patchedPopperRef}\n offsetDistance={offsetDistance}\n style={\n // Reason: Typescript ругается на CSS Custom Properties в объекте\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n {\n ...styleProp,\n '--vkui_internal--popover_safe_zone_padding': `${offsetDistance}px`,\n } as React.CSSProperties\n }\n renderContent={({ className: wrapperClassName }) => (\n <FocusTrap className={wrapperClassName} onClose={handleContentKeyDownEscape}>\n {content}\n </FocusTrap>\n )}\n onMouseOver={hoverable ? hideTimeout.clear : undefined}\n onMouseOut={hoverable ? handleTargetLeave : undefined}\n />\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
- import { Modifier } from 'react-popper';
3
- import { HasRef } from '../../types';
4
- export declare type Placement = 'auto' | 'auto-start' | 'auto-end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'right-start' | 'right-end' | 'left-start' | 'left-end' | 'top' | 'bottom' | 'left' | 'right';
2
+ import type { HasRef } from '../../types';
3
+ import { type Placement, type PlacementWithAuto, type UseFloatingMiddleware } from '../../lib/floating';
5
4
  export interface PopperRenderContentProps {
6
5
  className: string;
7
6
  }
@@ -9,7 +8,7 @@ export interface PopperCommonProps extends React.HTMLAttributes<HTMLDivElement>,
9
8
  /**
10
9
  * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
11
10
  */
12
- placement?: Placement;
11
+ placement?: PlacementWithAuto;
13
12
  /**
14
13
  * Отступ по вспомогательной оси
15
14
  */
@@ -31,13 +30,14 @@ export interface PopperCommonProps extends React.HTMLAttributes<HTMLDivElement>,
31
30
  */
32
31
  sameWidth?: boolean;
33
32
  forcePortal?: boolean;
34
- onPlacementChange?: (data: {
35
- placement?: Placement;
36
- }) => void;
33
+ /**
34
+ * Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.
35
+ */
36
+ autoUpdateOnTargetResize?: boolean;
37
37
  /**
38
38
  * Массив кастомных модификаторов для Popper (необходимо мемоизировать)
39
39
  */
40
- customModifiers?: Array<Modifier<string>>;
40
+ customMiddlewares?: UseFloatingMiddleware[];
41
41
  /**
42
42
  * При передаче содержимого в `children`, он будет обёрнут во внутренний контейнер.
43
43
  *
@@ -46,6 +46,9 @@ export interface PopperCommonProps extends React.HTMLAttributes<HTMLDivElement>,
46
46
  * > ⚠️ Параметр `children` будет проигнорирован.
47
47
  */
48
48
  renderContent?(props: PopperRenderContentProps): React.ReactNode;
49
+ onPlacementChange?(data: {
50
+ placement?: Placement;
51
+ }): void;
49
52
  }
50
53
  export interface PopperProps extends PopperCommonProps {
51
54
  targetRef: React.RefObject<HTMLElement>;
@@ -53,4 +56,4 @@ export interface PopperProps extends PopperCommonProps {
53
56
  /**
54
57
  * @see https://vkcom.github.io/VKUI/#/Popper
55
58
  */
56
- export declare const Popper: ({ targetRef, children, getRef, placement, onPlacementChange, arrow, arrowClassName, sameWidth, offsetDistance, offsetSkidding, forcePortal, style: compStyles, customModifiers, renderContent, className, ...restProps }: PopperProps) => JSX.Element;
59
+ export declare const Popper: ({ targetRef, children, getRef, placement: placementProp, onPlacementChange, arrow, arrowClassName, sameWidth, offsetDistance, offsetSkidding, forcePortal, autoUpdateOnTargetResize, style: styleProp, customMiddlewares, renderContent, className, ...restProps }: PopperProps) => JSX.Element;
@@ -1,146 +1,119 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
6
- var _excluded = ["targetRef", "children", "getRef", "placement", "onPlacementChange", "arrow", "arrowClassName", "sameWidth", "offsetDistance", "offsetSkidding", "forcePortal", "style", "customModifiers", "renderContent", "className"];
5
+ var _excluded = ["targetRef", "children", "getRef", "placement", "onPlacementChange", "arrow", "arrowClassName", "sameWidth", "offsetDistance", "offsetSkidding", "forcePortal", "autoUpdateOnTargetResize", "style", "customMiddlewares", "renderContent", "className"];
7
6
  import * as React from 'react';
8
- import { usePopper } from 'react-popper';
9
7
  import { AppRootPortal } from '../AppRoot/AppRootPortal';
10
- import { PopperArrow } from '../PopperArrow/PopperArrow';
11
- import { usePlatform } from '../../hooks/usePlatform';
12
- import { getPlatformClassName } from '../../helpers/getPlatformClassName';
8
+ import { ARROW_PADDING, ARROW_HEIGHT, PopperArrow } from '../PopperArrow/PopperArrow';
13
9
  import { useExternRef } from '../../hooks/useExternRef';
14
- import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
10
+ import { checkIsNotAutoPlacement, getAutoPlacementAlign, convertFloatingDataToReactCSSProperties, useFloating, autoUpdateFloatingElement, offsetMiddleware, flipMiddleware, shiftMiddleware, autoPlacementMiddleware, arrowMiddleware, sizeMiddleware } from '../../lib/floating';
15
11
  import { classNames } from '@vkontakte/vkjs';
16
- var ARROW_PADDING = 8;
17
- var ARROW_WIDTH = 20;
18
- var ARROW_HEIGHT = 8;
19
- var preventOverflowModifier = {
20
- name: 'preventOverflow',
21
- options: {
22
- mainAxis: false
23
- }
24
- };
25
- var flipModifier = {
26
- name: 'flip'
27
- };
28
- var arrowModifier = {
29
- name: 'arrow',
30
- options: {
31
- padding: ARROW_PADDING
32
- }
33
- };
34
- var sameWidthModifier = {
35
- name: 'sameWidth',
36
- enabled: true,
37
- phase: 'beforeWrite',
38
- requires: ['computeStyles'],
39
- fn: function fn(_ref) {
40
- var state = _ref.state;
41
- state.styles.popper.width = "".concat(state.rects.reference.width, "px");
42
- },
43
- effect: function effect(_ref2) {
44
- var state = _ref2.state;
45
- state.elements.popper.style.width = "".concat(state.elements.reference.offsetWidth, "px");
46
- }
47
- };
48
-
49
12
  /**
50
13
  * @see https://vkcom.github.io/VKUI/#/Popper
51
14
  */
52
- export var Popper = function Popper(_ref3) {
53
- var _targetRef$current3;
54
- var targetRef = _ref3.targetRef,
55
- children = _ref3.children,
56
- getRef = _ref3.getRef,
57
- _ref3$placement = _ref3.placement,
58
- placement = _ref3$placement === void 0 ? 'bottom-start' : _ref3$placement,
59
- onPlacementChange = _ref3.onPlacementChange,
60
- arrow = _ref3.arrow,
61
- arrowClassName = _ref3.arrowClassName,
62
- sameWidth = _ref3.sameWidth,
63
- _ref3$offsetDistance = _ref3.offsetDistance,
64
- offsetDistance = _ref3$offsetDistance === void 0 ? 8 : _ref3$offsetDistance,
65
- _ref3$offsetSkidding = _ref3.offsetSkidding,
66
- offsetSkidding = _ref3$offsetSkidding === void 0 ? 0 : _ref3$offsetSkidding,
67
- _ref3$forcePortal = _ref3.forcePortal,
68
- forcePortal = _ref3$forcePortal === void 0 ? true : _ref3$forcePortal,
69
- compStyles = _ref3.style,
70
- customModifiers = _ref3.customModifiers,
71
- renderContent = _ref3.renderContent,
72
- className = _ref3.className,
73
- restProps = _objectWithoutProperties(_ref3, _excluded);
74
- var _React$useState = React.useState(null),
75
- _React$useState2 = _slicedToArray(_React$useState, 2),
76
- popperNode = _React$useState2[0],
77
- setPopperNode = _React$useState2[1];
78
- var _React$useState3 = React.useState(0),
79
- _React$useState4 = _slicedToArray(_React$useState3, 2),
80
- smallTargetOffsetSkidding = _React$useState4[0],
81
- setSmallTargetOffsetSkidding = _React$useState4[1];
82
- var platform = usePlatform();
83
- var setExternalRef = useExternRef(getRef, setPopperNode);
84
- var modifiers = React.useMemo(function () {
85
- var modifiers = [preventOverflowModifier, {
86
- name: 'offset',
87
- options: {
88
- offset: [arrow ? offsetSkidding - smallTargetOffsetSkidding : offsetSkidding, arrow ? offsetDistance + ARROW_HEIGHT : offsetDistance]
89
- }
90
- }, flipModifier];
91
- if (arrow) {
92
- modifiers.push(arrowModifier);
15
+ export var Popper = function Popper(_ref) {
16
+ var targetRef = _ref.targetRef,
17
+ children = _ref.children,
18
+ getRef = _ref.getRef,
19
+ _ref$placement = _ref.placement,
20
+ placementProp = _ref$placement === void 0 ? 'bottom-start' : _ref$placement,
21
+ onPlacementChange = _ref.onPlacementChange,
22
+ arrow = _ref.arrow,
23
+ arrowClassName = _ref.arrowClassName,
24
+ sameWidth = _ref.sameWidth,
25
+ _ref$offsetDistance = _ref.offsetDistance,
26
+ offsetDistance = _ref$offsetDistance === void 0 ? 8 : _ref$offsetDistance,
27
+ _ref$offsetSkidding = _ref.offsetSkidding,
28
+ offsetSkidding = _ref$offsetSkidding === void 0 ? 0 : _ref$offsetSkidding,
29
+ _ref$forcePortal = _ref.forcePortal,
30
+ forcePortal = _ref$forcePortal === void 0 ? true : _ref$forcePortal,
31
+ _ref$autoUpdateOnTarg = _ref.autoUpdateOnTargetResize,
32
+ autoUpdateOnTargetResize = _ref$autoUpdateOnTarg === void 0 ? false : _ref$autoUpdateOnTarg,
33
+ styleProp = _ref.style,
34
+ customMiddlewares = _ref.customMiddlewares,
35
+ renderContent = _ref.renderContent,
36
+ className = _ref.className,
37
+ restProps = _objectWithoutProperties(_ref, _excluded);
38
+ var arrowRef = React.useRef(null);
39
+ var isNotAutoPlacement = checkIsNotAutoPlacement(placementProp);
40
+ var memoizedMiddlewares = React.useMemo(function () {
41
+ var middlewares = [offsetMiddleware({
42
+ crossAxis: offsetSkidding,
43
+ mainAxis: arrow ? offsetDistance + ARROW_HEIGHT : offsetDistance
44
+ })];
45
+
46
+ // см. https://floating-ui.com/docs/flip#conflict-with-autoplacement
47
+ if (isNotAutoPlacement) {
48
+ middlewares.push(flipMiddleware());
49
+ } else {
50
+ middlewares.push(autoPlacementMiddleware({
51
+ alignment: getAutoPlacementAlign(placementProp)
52
+ }));
93
53
  }
54
+ middlewares.push(shiftMiddleware());
94
55
  if (sameWidth) {
95
- modifiers.push(sameWidthModifier);
56
+ middlewares.push(sizeMiddleware({
57
+ apply: function apply(_ref2) {
58
+ var rects = _ref2.rects,
59
+ elements = _ref2.elements;
60
+ Object.assign(elements.floating.style, {
61
+ width: "".concat(rects.reference.width, "px")
62
+ });
63
+ }
64
+ }));
96
65
  }
97
- if (customModifiers) {
98
- modifiers.push.apply(modifiers, _toConsumableArray(customModifiers));
66
+ if (customMiddlewares) {
67
+ middlewares.push.apply(middlewares, _toConsumableArray(customMiddlewares));
99
68
  }
100
- return modifiers;
101
- }, [arrow, sameWidth, smallTargetOffsetSkidding, offsetSkidding, offsetDistance, customModifiers]);
102
- var _usePopper = usePopper(targetRef.current, popperNode, {
103
- placement: placement,
104
- modifiers: modifiers
105
- }),
106
- popperStyles = _usePopper.styles,
107
- state = _usePopper.state,
108
- attributes = _usePopper.attributes;
109
- var resolvedPlacement = state === null || state === void 0 ? void 0 : state.placement;
110
- var isEdgePlacement = !!resolvedPlacement && resolvedPlacement.includes('-'); // true, если поппер отрисован с краю
111
69
 
112
- // Если поппер рисуется с краю, то нужно опционально сместить его в тех случаях, когда стрелка не дотягивается до
113
- // таргета из-за маленьких размеров последнего
114
- useIsomorphicLayoutEffect(function () {
115
- if (arrow && isEdgePlacement) {
116
- var _ref4, _targetRef$current, _targetRef$current2;
117
- var placementDirection = resolvedPlacement !== null && resolvedPlacement !== void 0 && resolvedPlacement.startsWith('bottom') || resolvedPlacement !== null && resolvedPlacement !== void 0 && resolvedPlacement.startsWith('top') ? 'vertical' : 'horizontal';
118
- var arrowSize = placementDirection === 'vertical' ? ARROW_WIDTH : ARROW_HEIGHT;
119
- var targetSize = (_ref4 = placementDirection === 'vertical' ? (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : _targetRef$current.offsetWidth : (_targetRef$current2 = targetRef.current) === null || _targetRef$current2 === void 0 ? void 0 : _targetRef$current2.offsetHeight) !== null && _ref4 !== void 0 ? _ref4 : 0;
120
- if (targetSize < arrowSize + 2 * ARROW_PADDING) {
121
- setSmallTargetOffsetSkidding(ARROW_PADDING + arrowSize / 2);
122
- }
123
- } else {
124
- setSmallTargetOffsetSkidding(0);
70
+ // см. https://floating-ui.com/docs/arrow#order
71
+ if (arrow) {
72
+ middlewares.push(arrowMiddleware({
73
+ element: arrowRef,
74
+ padding: ARROW_PADDING
75
+ }));
125
76
  }
126
- }, [arrow, isEdgePlacement]);
77
+ return middlewares;
78
+ }, [arrow, sameWidth, offsetSkidding, offsetDistance, customMiddlewares, placementProp, isNotAutoPlacement]);
79
+ var _useFloating = useFloating({
80
+ placement: isNotAutoPlacement ? placementProp : undefined,
81
+ middleware: memoizedMiddlewares,
82
+ whileElementsMounted: function whileElementsMounted() {
83
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
84
+ args[_key] = arguments[_key];
85
+ }
86
+ return autoUpdateFloatingElement.apply(void 0, args.concat([{
87
+ elementResize: autoUpdateOnTargetResize
88
+ }]));
89
+ }
90
+ }),
91
+ floatingDataX = _useFloating.x,
92
+ floatingDataY = _useFloating.y,
93
+ floatingPositionStrategy = _useFloating.strategy,
94
+ resolvedPlacement = _useFloating.placement,
95
+ refs = _useFloating.refs,
96
+ arrowCoords = _useFloating.middlewareData.arrow;
97
+ var handleRootRef = useExternRef(refs.setFloating, getRef);
98
+ React.useEffect(function () {
99
+ refs.setReference(targetRef.current);
100
+ }, [refs, targetRef]);
127
101
  React.useEffect(function () {
128
- if (resolvedPlacement) {
129
- onPlacementChange && onPlacementChange({
102
+ if (resolvedPlacement && onPlacementChange) {
103
+ onPlacementChange({
130
104
  placement: resolvedPlacement
131
105
  });
132
106
  }
133
107
  }, [onPlacementChange, resolvedPlacement]);
134
- var dropdown = /*#__PURE__*/React.createElement("div", _extends({}, restProps, attributes.popper, {
135
- className: classNames("vkuiPopper", getPlatformClassName("vkuiPopper", platform), className),
136
- ref: setExternalRef,
137
- style: _objectSpread(_objectSpread(_objectSpread({}, compStyles), popperStyles.popper), {}, {
138
- minWidth: sameWidth ? (_targetRef$current3 = targetRef.current) === null || _targetRef$current3 === void 0 ? void 0 : _targetRef$current3.scrollWidth : undefined
139
- })
108
+ var dropdown = /*#__PURE__*/React.createElement("div", _extends({}, restProps, {
109
+ className: classNames("vkuiPopper", className),
110
+ ref: handleRootRef,
111
+ style: _objectSpread(_objectSpread({}, styleProp), convertFloatingDataToReactCSSProperties(floatingPositionStrategy, floatingDataX, floatingDataY, sameWidth ? null : undefined))
140
112
  }), arrow && /*#__PURE__*/React.createElement(PopperArrow, {
141
- attributes: attributes.arrow,
142
- style: popperStyles.arrow,
143
- arrowClassName: arrowClassName
113
+ coords: arrowCoords,
114
+ placement: resolvedPlacement,
115
+ arrowClassName: arrowClassName,
116
+ getRootRef: arrowRef
144
117
  }), renderContent ? renderContent({
145
118
  className: "vkuiPopper__content"
146
119
  }) : /*#__PURE__*/React.createElement("div", {