@vkontakte/vkui 4.35.2 → 4.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +21609 -18312
  4. package/.cache/ts/src/components/ActionSheet/ActionSheetDefaultIosCloseItem.d.ts +3 -0
  5. package/.cache/ts/src/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
  6. package/.cache/ts/src/components/AdaptivityProvider/AdaptivityProvider.d.ts +4 -4
  7. package/.cache/ts/src/components/ButtonGroup/ButtonGroup.d.ts +6 -2
  8. package/.cache/ts/src/components/Chip/Chip.d.ts +12 -5
  9. package/.cache/ts/src/components/ChipsInput/ChipsInput.d.ts +5 -26
  10. package/.cache/ts/src/components/ChipsInputBase/ChipsInputBase.d.ts +17 -0
  11. package/.cache/ts/src/components/ChipsSelect/ChipsSelect.d.ts +4 -4
  12. package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +1 -1
  13. package/.cache/ts/src/components/DateInput/DateInput.d.ts +4 -2
  14. package/.cache/ts/src/components/DateRangeInput/DateRangeInput.d.ts +4 -2
  15. package/.cache/ts/src/components/DropdownIcon/DropdownIcon.d.ts +4 -2
  16. package/.cache/ts/src/components/FormField/FormField.d.ts +2 -1
  17. package/.cache/ts/src/components/FormLayoutGroup/FormLayoutGroup.d.ts +5 -1
  18. package/.cache/ts/src/components/FormStatus/FormStatus.d.ts +1 -0
  19. package/.cache/ts/src/components/Input/Input.d.ts +1 -1
  20. package/.cache/ts/src/components/List/List.d.ts +2 -1
  21. package/.cache/ts/src/components/ModalPage/ModalPage.d.ts +13 -1
  22. package/.cache/ts/src/components/NativeSelect/NativeSelect.d.ts +3 -2
  23. package/.cache/ts/src/components/Select/Select.d.ts +1 -1
  24. package/.cache/ts/src/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  25. package/.cache/ts/src/components/Textarea/Textarea.d.ts +3 -2
  26. package/.cache/ts/src/{components/ChipsInput → hooks}/useChipsInput.d.ts +4 -3
  27. package/{dist/cssm/components/ChipsSelect → .cache/ts/src/hooks}/useChipsSelect.d.ts +4 -4
  28. package/.cache/ts/src/index.d.ts +3 -0
  29. package/.cache/ts/src/tokenized/index.d.ts +56 -0
  30. package/README.md +3 -2
  31. package/dist/cjs/components/ActionSheet/ActionSheet.js +4 -4
  32. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  33. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +24 -0
  34. package/dist/cjs/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -0
  35. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.js +10 -8
  36. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  37. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js +4 -5
  38. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  39. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +15 -39
  40. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  41. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js +2 -3
  42. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  43. package/dist/cjs/components/Alert/Alert.js +11 -12
  44. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  45. package/dist/cjs/components/AppRoot/AppRoot.js +2 -5
  46. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  47. package/dist/cjs/components/Avatar/Avatar.js +4 -17
  48. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  49. package/dist/cjs/components/Banner/Banner.js +41 -47
  50. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  51. package/dist/cjs/components/ButtonGroup/ButtonGroup.js.map +1 -1
  52. package/dist/cjs/components/CalendarDay/CalendarDay.js +4 -21
  53. package/dist/cjs/components/CalendarDay/CalendarDay.js.map +1 -1
  54. package/dist/cjs/components/CardScroll/CardScroll.js +2 -5
  55. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  56. package/dist/cjs/components/Chip/Chip.js.map +1 -1
  57. package/dist/cjs/components/ChipsInput/ChipsInput.js +15 -198
  58. package/dist/cjs/components/ChipsInput/ChipsInput.js.map +1 -1
  59. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js +215 -0
  60. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js.map +1 -0
  61. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +44 -27
  62. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  63. package/dist/cjs/components/CustomSelect/CustomSelect.js +32 -31
  64. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  65. package/dist/cjs/components/DateInput/DateInput.js +4 -2
  66. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  67. package/dist/cjs/components/DateRangeInput/DateRangeInput.js +4 -2
  68. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  69. package/dist/cjs/components/DropdownIcon/DropdownIcon.js +16 -7
  70. package/dist/cjs/components/DropdownIcon/DropdownIcon.js.map +1 -1
  71. package/dist/cjs/components/FormField/FormField.js +4 -2
  72. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  73. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +12 -3
  74. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  75. package/dist/cjs/components/FormStatus/FormStatus.js +4 -6
  76. package/dist/cjs/components/FormStatus/FormStatus.js.map +1 -1
  77. package/dist/cjs/components/Header/Header.js +3 -11
  78. package/dist/cjs/components/Header/Header.js.map +1 -1
  79. package/dist/cjs/components/IconButton/IconButton.js +4 -3
  80. package/dist/cjs/components/IconButton/IconButton.js.map +1 -1
  81. package/dist/cjs/components/Input/Input.js +4 -2
  82. package/dist/cjs/components/Input/Input.js.map +1 -1
  83. package/dist/cjs/components/List/List.js.map +1 -1
  84. package/dist/cjs/components/ModalDismissButton/ModalDismissButton.js +1 -6
  85. package/dist/cjs/components/ModalDismissButton/ModalDismissButton.js.map +1 -1
  86. package/dist/cjs/components/ModalPage/ModalPage.js +11 -10
  87. package/dist/cjs/components/ModalPage/ModalPage.js.map +1 -1
  88. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +3 -4
  89. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  90. package/dist/cjs/components/ModalRoot/ModalRoot.js +4 -18
  91. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  92. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +3 -11
  93. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  94. package/dist/cjs/components/NativeSelect/NativeSelect.js +4 -2
  95. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  96. package/dist/cjs/components/Panel/Panel.js +4 -10
  97. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  98. package/dist/cjs/components/PanelHeader/PanelHeader.js +2 -11
  99. package/dist/cjs/components/PanelHeader/PanelHeader.js.map +1 -1
  100. package/dist/cjs/components/PanelHeaderBack/PanelHeaderBack.js +2 -7
  101. package/dist/cjs/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
  102. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +2 -7
  103. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  104. package/dist/cjs/components/PanelHeaderClose/PanelHeaderClose.js +1 -1
  105. package/dist/cjs/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
  106. package/dist/cjs/components/PanelHeaderContent/PanelHeaderContent.js +5 -4
  107. package/dist/cjs/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  108. package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js +4 -8
  109. package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  110. package/dist/cjs/components/PanelHeaderEdit/PanelHeaderEdit.js +1 -1
  111. package/dist/cjs/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
  112. package/dist/cjs/components/PanelHeaderSubmit/PanelHeaderSubmit.js +1 -1
  113. package/dist/cjs/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
  114. package/dist/cjs/components/PromoBanner/PromoBanner.js +1 -6
  115. package/dist/cjs/components/PromoBanner/PromoBanner.js.map +1 -1
  116. package/dist/cjs/components/Search/Search.js +7 -9
  117. package/dist/cjs/components/Search/Search.js.map +1 -1
  118. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +4 -2
  119. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  120. package/dist/cjs/components/SliderSwitch/SliderSwitch.js +2 -5
  121. package/dist/cjs/components/SliderSwitch/SliderSwitch.js.map +1 -1
  122. package/dist/cjs/components/SliderSwitch/SliderSwitchButton.js +2 -7
  123. package/dist/cjs/components/SliderSwitch/SliderSwitchButton.js.map +1 -1
  124. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js +1 -6
  125. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  126. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +2 -5
  127. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  128. package/dist/cjs/components/Tappable/Tappable.js +8 -16
  129. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  130. package/dist/cjs/components/Textarea/Textarea.js +4 -2
  131. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  132. package/dist/cjs/components/UsersStack/UsersStack.js +71 -34
  133. package/dist/cjs/components/UsersStack/UsersStack.js.map +1 -1
  134. package/dist/cjs/components/View/View.js +2 -7
  135. package/dist/cjs/components/View/View.js.map +1 -1
  136. package/dist/cjs/components/View/ViewInfinite.js +1 -10
  137. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  138. package/dist/cjs/{components/ChipsInput → hooks}/useChipsInput.js +0 -0
  139. package/dist/cjs/hooks/useChipsInput.js.map +1 -0
  140. package/dist/cjs/{components/ChipsSelect → hooks}/useChipsSelect.js +1 -1
  141. package/dist/cjs/hooks/useChipsSelect.js.map +1 -0
  142. package/dist/cjs/index.js +8 -0
  143. package/dist/cjs/index.js.map +1 -1
  144. package/dist/cjs/lib/animate.js +2 -2
  145. package/dist/cjs/lib/animate.js.map +1 -1
  146. package/dist/cjs/lib/platform.js +9 -4
  147. package/dist/cjs/lib/platform.js.map +1 -1
  148. package/dist/cjs/lib/testing.js +2 -2
  149. package/dist/cjs/lib/testing.js.map +1 -1
  150. package/dist/cjs/lib/touch.js +2 -2
  151. package/dist/cjs/lib/touch.js.map +1 -1
  152. package/dist/cjs/tokenized/index.js +232 -0
  153. package/dist/cjs/tokenized/index.js.map +1 -1
  154. package/dist/components/ActionSheet/ActionSheet.js +4 -4
  155. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  156. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.d.ts +3 -0
  157. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +10 -0
  158. package/dist/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -0
  159. package/dist/components/ActionSheet/ActionSheetDropdown.js +7 -7
  160. package/dist/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  161. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js +3 -4
  162. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  163. package/dist/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
  164. package/dist/components/ActionSheetItem/ActionSheetItem.js +16 -36
  165. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  166. package/dist/components/AdaptivityProvider/AdaptivityProvider.d.ts +4 -4
  167. package/dist/components/AdaptivityProvider/AdaptivityProvider.js +2 -4
  168. package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  169. package/dist/components/Alert/Alert.js +12 -12
  170. package/dist/components/Alert/Alert.js.map +1 -1
  171. package/dist/components/AppRoot/AppRoot.js +2 -5
  172. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  173. package/dist/components/Avatar/Avatar.js +4 -17
  174. package/dist/components/Avatar/Avatar.js.map +1 -1
  175. package/dist/components/Banner/Banner.js +41 -48
  176. package/dist/components/Banner/Banner.js.map +1 -1
  177. package/dist/components/ButtonGroup/ButtonGroup.d.ts +6 -2
  178. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -1
  179. package/dist/components/CalendarDay/CalendarDay.js +4 -21
  180. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  181. package/dist/components/CardScroll/CardScroll.js +1 -3
  182. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  183. package/dist/components/Chip/Chip.d.ts +12 -5
  184. package/dist/components/Chip/Chip.js.map +1 -1
  185. package/dist/components/ChipsInput/ChipsInput.d.ts +5 -26
  186. package/dist/components/ChipsInput/ChipsInput.js +14 -183
  187. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  188. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts +17 -0
  189. package/dist/components/ChipsInputBase/ChipsInputBase.js +188 -0
  190. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -0
  191. package/dist/components/ChipsSelect/ChipsSelect.d.ts +4 -4
  192. package/dist/components/ChipsSelect/ChipsSelect.js +42 -26
  193. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  194. package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
  195. package/dist/components/CustomSelect/CustomSelect.js +32 -31
  196. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  197. package/dist/components/DateInput/DateInput.d.ts +4 -2
  198. package/dist/components/DateInput/DateInput.js +4 -2
  199. package/dist/components/DateInput/DateInput.js.map +1 -1
  200. package/dist/components/DateRangeInput/DateRangeInput.d.ts +4 -2
  201. package/dist/components/DateRangeInput/DateRangeInput.js +4 -2
  202. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  203. package/dist/components/DropdownIcon/DropdownIcon.d.ts +4 -2
  204. package/dist/components/DropdownIcon/DropdownIcon.js +15 -7
  205. package/dist/components/DropdownIcon/DropdownIcon.js.map +1 -1
  206. package/dist/components/FormField/FormField.d.ts +2 -1
  207. package/dist/components/FormField/FormField.js +4 -2
  208. package/dist/components/FormField/FormField.js.map +1 -1
  209. package/dist/components/FormLayoutGroup/FormLayoutGroup.d.ts +5 -1
  210. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +9 -3
  211. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  212. package/dist/components/FormStatus/FormStatus.d.ts +1 -0
  213. package/dist/components/FormStatus/FormStatus.js +4 -4
  214. package/dist/components/FormStatus/FormStatus.js.map +1 -1
  215. package/dist/components/Header/Header.js +3 -10
  216. package/dist/components/Header/Header.js.map +1 -1
  217. package/dist/components/IconButton/IconButton.js +4 -3
  218. package/dist/components/IconButton/IconButton.js.map +1 -1
  219. package/dist/components/Input/Input.d.ts +1 -1
  220. package/dist/components/Input/Input.js +4 -2
  221. package/dist/components/Input/Input.js.map +1 -1
  222. package/dist/components/List/List.d.ts +2 -1
  223. package/dist/components/List/List.js.map +1 -1
  224. package/dist/components/ModalDismissButton/ModalDismissButton.js +1 -4
  225. package/dist/components/ModalDismissButton/ModalDismissButton.js.map +1 -1
  226. package/dist/components/ModalPage/ModalPage.d.ts +13 -1
  227. package/dist/components/ModalPage/ModalPage.js +12 -10
  228. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  229. package/dist/components/ModalPageHeader/ModalPageHeader.js +3 -3
  230. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  231. package/dist/components/ModalRoot/ModalRoot.js +4 -18
  232. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  233. package/dist/components/ModalRoot/ModalRootDesktop.js +3 -11
  234. package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  235. package/dist/components/NativeSelect/NativeSelect.d.ts +3 -2
  236. package/dist/components/NativeSelect/NativeSelect.js +4 -2
  237. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  238. package/dist/components/Panel/Panel.js +4 -8
  239. package/dist/components/Panel/Panel.js.map +1 -1
  240. package/dist/components/PanelHeader/PanelHeader.js +2 -11
  241. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  242. package/dist/components/PanelHeaderBack/PanelHeaderBack.js +2 -6
  243. package/dist/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
  244. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +2 -7
  245. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  246. package/dist/components/PanelHeaderClose/PanelHeaderClose.js +2 -2
  247. package/dist/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
  248. package/dist/components/PanelHeaderContent/PanelHeaderContent.js +5 -5
  249. package/dist/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  250. package/dist/components/PanelHeaderContext/PanelHeaderContext.js +3 -7
  251. package/dist/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  252. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js +2 -2
  253. package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
  254. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js +2 -2
  255. package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
  256. package/dist/components/PromoBanner/PromoBanner.js +1 -4
  257. package/dist/components/PromoBanner/PromoBanner.js.map +1 -1
  258. package/dist/components/Search/Search.js +6 -8
  259. package/dist/components/Search/Search.js.map +1 -1
  260. package/dist/components/Select/Select.d.ts +1 -1
  261. package/dist/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  262. package/dist/components/SelectMimicry/SelectMimicry.js +4 -2
  263. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  264. package/dist/components/SimpleCell/SimpleCell.d.ts +1 -1
  265. package/dist/components/SliderSwitch/SliderSwitch.js +1 -4
  266. package/dist/components/SliderSwitch/SliderSwitch.js.map +1 -1
  267. package/dist/components/SliderSwitch/SliderSwitchButton.js +1 -5
  268. package/dist/components/SliderSwitch/SliderSwitchButton.js.map +1 -1
  269. package/dist/components/SubnavigationBar/SubnavigationBar.js +1 -4
  270. package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  271. package/dist/components/SubnavigationButton/SubnavigationButton.js +2 -5
  272. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  273. package/dist/components/Tappable/Tappable.js +3 -10
  274. package/dist/components/Tappable/Tappable.js.map +1 -1
  275. package/dist/components/Textarea/Textarea.d.ts +3 -2
  276. package/dist/components/Textarea/Textarea.js +4 -2
  277. package/dist/components/Textarea/Textarea.js.map +1 -1
  278. package/dist/components/UsersStack/UsersStack.js +69 -28
  279. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  280. package/dist/components/View/View.js +2 -7
  281. package/dist/components/View/View.js.map +1 -1
  282. package/dist/components/View/ViewInfinite.js +1 -10
  283. package/dist/components/View/ViewInfinite.js.map +1 -1
  284. package/dist/components.css +93 -15
  285. package/dist/components.css.map +1 -1
  286. package/dist/cssm/components/ActionSheet/ActionSheet.css +3 -1
  287. package/dist/cssm/components/ActionSheet/ActionSheet.js +4 -4
  288. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  289. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.d.ts +3 -0
  290. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js +10 -0
  291. package/dist/cssm/components/ActionSheet/ActionSheetDefaultIosCloseItem.js.map +1 -0
  292. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.js +7 -7
  293. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  294. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js +3 -4
  295. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  296. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.css +7 -1
  297. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.d.ts +5 -1
  298. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +16 -36
  299. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  300. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.d.ts +4 -4
  301. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +2 -4
  302. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  303. package/dist/cssm/components/Alert/Alert.css +7 -1
  304. package/dist/cssm/components/Alert/Alert.js +12 -12
  305. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  306. package/dist/cssm/components/AppRoot/AppRoot.css +1 -1
  307. package/dist/cssm/components/AppRoot/AppRoot.js +2 -5
  308. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  309. package/dist/cssm/components/Avatar/Avatar.js +4 -17
  310. package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
  311. package/dist/cssm/components/Banner/Banner.js +41 -48
  312. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  313. package/dist/cssm/components/ButtonGroup/ButtonGroup.d.ts +6 -2
  314. package/dist/cssm/components/ButtonGroup/ButtonGroup.js.map +1 -1
  315. package/dist/cssm/components/CalendarDay/CalendarDay.js +4 -21
  316. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  317. package/dist/cssm/components/CardScroll/CardScroll.js +1 -3
  318. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  319. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -1
  320. package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -1
  321. package/dist/cssm/components/Chip/Chip.css +1 -1
  322. package/dist/cssm/components/Chip/Chip.d.ts +12 -5
  323. package/dist/cssm/components/Chip/Chip.js.map +1 -1
  324. package/dist/cssm/components/ChipsInput/ChipsInput.css +1 -1
  325. package/dist/cssm/components/ChipsInput/ChipsInput.d.ts +5 -26
  326. package/dist/cssm/components/ChipsInput/ChipsInput.js +14 -183
  327. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  328. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.css +1 -0
  329. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.d.ts +17 -0
  330. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +189 -0
  331. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -0
  332. package/dist/cssm/components/ChipsSelect/ChipsSelect.css +1 -1
  333. package/dist/cssm/components/ChipsSelect/ChipsSelect.d.ts +4 -4
  334. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +42 -26
  335. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  336. package/dist/cssm/components/CustomSelect/CustomSelect.css +1 -1
  337. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
  338. package/dist/cssm/components/CustomSelect/CustomSelect.js +32 -31
  339. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  340. package/dist/cssm/components/DateInput/DateInput.css +1 -1
  341. package/dist/cssm/components/DateInput/DateInput.d.ts +4 -2
  342. package/dist/cssm/components/DateInput/DateInput.js +4 -2
  343. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  344. package/dist/cssm/components/DateRangeInput/DateRangeInput.css +1 -1
  345. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +4 -2
  346. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -2
  347. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  348. package/dist/cssm/components/DropdownIcon/DropdownIcon.d.ts +4 -2
  349. package/dist/cssm/components/DropdownIcon/DropdownIcon.js +15 -8
  350. package/dist/cssm/components/DropdownIcon/DropdownIcon.js.map +1 -1
  351. package/dist/cssm/components/FormField/FormField.css +4 -4
  352. package/dist/cssm/components/FormField/FormField.d.ts +2 -1
  353. package/dist/cssm/components/FormField/FormField.js +4 -2
  354. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  355. package/dist/cssm/components/FormItem/FormItem.css +1 -1
  356. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
  357. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.d.ts +5 -1
  358. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +9 -3
  359. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  360. package/dist/cssm/components/FormStatus/FormStatus.css +3 -1
  361. package/dist/cssm/components/FormStatus/FormStatus.d.ts +1 -0
  362. package/dist/cssm/components/FormStatus/FormStatus.js +4 -4
  363. package/dist/cssm/components/FormStatus/FormStatus.js.map +1 -1
  364. package/dist/cssm/components/Header/Header.css +1 -1
  365. package/dist/cssm/components/Header/Header.js +3 -10
  366. package/dist/cssm/components/Header/Header.js.map +1 -1
  367. package/dist/cssm/components/IconButton/IconButton.js +4 -3
  368. package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
  369. package/dist/cssm/components/Input/Input.css +1 -1
  370. package/dist/cssm/components/Input/Input.d.ts +1 -1
  371. package/dist/cssm/components/Input/Input.js +4 -2
  372. package/dist/cssm/components/Input/Input.js.map +1 -1
  373. package/dist/cssm/components/Link/Link.css +1 -1
  374. package/dist/cssm/components/List/List.d.ts +2 -1
  375. package/dist/cssm/components/List/List.js +1 -1
  376. package/dist/cssm/components/List/List.js.map +1 -1
  377. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.css +1 -1
  378. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.js +1 -4
  379. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.js.map +1 -1
  380. package/dist/cssm/components/ModalPage/ModalPage.css +5 -1
  381. package/dist/cssm/components/ModalPage/ModalPage.d.ts +13 -1
  382. package/dist/cssm/components/ModalPage/ModalPage.js +12 -10
  383. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  384. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.css +1 -1
  385. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +3 -3
  386. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  387. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -18
  388. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  389. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +3 -11
  390. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  391. package/dist/cssm/components/NativeSelect/NativeSelect.d.ts +3 -2
  392. package/dist/cssm/components/NativeSelect/NativeSelect.js +4 -2
  393. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  394. package/dist/cssm/components/Panel/Panel.css +19 -1
  395. package/dist/cssm/components/Panel/Panel.js +4 -8
  396. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  397. package/dist/cssm/components/PanelHeader/PanelHeader.css +9 -1
  398. package/dist/cssm/components/PanelHeader/PanelHeader.js +2 -11
  399. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  400. package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js +2 -6
  401. package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
  402. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.css +1 -1
  403. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +2 -7
  404. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  405. package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js +2 -2
  406. package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
  407. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.css +5 -1
  408. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.js +5 -5
  409. package/dist/cssm/components/PanelHeaderContent/PanelHeaderContent.js.map +1 -1
  410. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.css +1 -1
  411. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js +3 -7
  412. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  413. package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js +2 -2
  414. package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
  415. package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js +2 -2
  416. package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
  417. package/dist/cssm/components/PromoBanner/PromoBanner.css +3 -1
  418. package/dist/cssm/components/PromoBanner/PromoBanner.js +1 -4
  419. package/dist/cssm/components/PromoBanner/PromoBanner.js.map +1 -1
  420. package/dist/cssm/components/Search/Search.css +27 -1
  421. package/dist/cssm/components/Search/Search.js +6 -8
  422. package/dist/cssm/components/Search/Search.js.map +1 -1
  423. package/dist/cssm/components/Select/Select.css +1 -1
  424. package/dist/cssm/components/Select/Select.d.ts +1 -1
  425. package/dist/cssm/components/SelectMimicry/SelectMimicry.d.ts +2 -2
  426. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +4 -2
  427. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  428. package/dist/cssm/components/SimpleCell/SimpleCell.d.ts +1 -1
  429. package/dist/cssm/components/SliderSwitch/SliderSwitch.js +1 -4
  430. package/dist/cssm/components/SliderSwitch/SliderSwitch.js.map +1 -1
  431. package/dist/cssm/components/SliderSwitch/SliderSwitchButton.js +1 -5
  432. package/dist/cssm/components/SliderSwitch/SliderSwitchButton.js.map +1 -1
  433. package/dist/cssm/components/Spacing/Spacing.css +1 -1
  434. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.css +1 -1
  435. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +1 -4
  436. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  437. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.css +1 -1
  438. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +2 -5
  439. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  440. package/dist/cssm/components/TabsItem/TabsItem.css +1 -1
  441. package/dist/cssm/components/Tappable/Tappable.js +3 -10
  442. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  443. package/dist/cssm/components/Textarea/Textarea.css +1 -1
  444. package/dist/cssm/components/Textarea/Textarea.d.ts +3 -2
  445. package/dist/cssm/components/Textarea/Textarea.js +4 -2
  446. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  447. package/dist/cssm/components/Typography/Headline/Headline.css +1 -1
  448. package/dist/cssm/components/Typography/Text/Text.css +1 -1
  449. package/dist/cssm/components/UsersStack/UsersStack.css +1 -1
  450. package/dist/cssm/components/UsersStack/UsersStack.js +69 -28
  451. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  452. package/dist/cssm/components/View/View.js +2 -7
  453. package/dist/cssm/components/View/View.js.map +1 -1
  454. package/dist/cssm/components/View/ViewInfinite.js +1 -10
  455. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  456. package/dist/cssm/{components/ChipsInput → hooks}/useChipsInput.d.ts +4 -3
  457. package/dist/{components/ChipsInput → cssm/hooks}/useChipsInput.js +0 -0
  458. package/dist/cssm/hooks/useChipsInput.js.map +1 -0
  459. package/{.cache/ts/src/components/ChipsSelect → dist/cssm/hooks}/useChipsSelect.d.ts +4 -4
  460. package/dist/{components/ChipsSelect → cssm/hooks}/useChipsSelect.js +1 -1
  461. package/dist/cssm/hooks/useChipsSelect.js.map +1 -0
  462. package/dist/cssm/index.d.ts +3 -0
  463. package/dist/cssm/index.js +1 -0
  464. package/dist/cssm/index.js.map +1 -1
  465. package/dist/cssm/lib/animate.js +1 -1
  466. package/dist/cssm/lib/animate.js.map +1 -1
  467. package/dist/cssm/lib/platform.js +8 -3
  468. package/dist/cssm/lib/platform.js.map +1 -1
  469. package/dist/cssm/lib/testing.js +1 -1
  470. package/dist/cssm/lib/testing.js.map +1 -1
  471. package/dist/cssm/lib/touch.js +1 -1
  472. package/dist/cssm/lib/touch.js.map +1 -1
  473. package/dist/cssm/styles/components.css +93 -15
  474. package/dist/cssm/styles/themes.css +1 -1
  475. package/dist/cssm/styles/unstable.css +1 -1
  476. package/dist/cssm/tokenized/index.d.ts +56 -0
  477. package/dist/cssm/tokenized/index.js +29 -0
  478. package/dist/cssm/tokenized/index.js.map +1 -1
  479. package/dist/{components/ChipsInput → hooks}/useChipsInput.d.ts +4 -3
  480. package/dist/{cssm/components/ChipsInput → hooks}/useChipsInput.js +0 -0
  481. package/dist/hooks/useChipsInput.js.map +1 -0
  482. package/dist/{components/ChipsSelect → hooks}/useChipsSelect.d.ts +4 -4
  483. package/dist/{cssm/components/ChipsSelect → hooks}/useChipsSelect.js +1 -1
  484. package/dist/hooks/useChipsSelect.js.map +1 -0
  485. package/dist/index.d.ts +3 -0
  486. package/dist/index.js +1 -0
  487. package/dist/index.js.map +1 -1
  488. package/dist/lib/animate.js +1 -1
  489. package/dist/lib/animate.js.map +1 -1
  490. package/dist/lib/platform.js +8 -3
  491. package/dist/lib/platform.js.map +1 -1
  492. package/dist/lib/testing.js +1 -1
  493. package/dist/lib/testing.js.map +1 -1
  494. package/dist/lib/touch.js +1 -1
  495. package/dist/lib/touch.js.map +1 -1
  496. package/dist/tokenized/index.d.ts +56 -0
  497. package/dist/tokenized/index.js +29 -0
  498. package/dist/tokenized/index.js.map +1 -1
  499. package/dist/unstable.css +1 -1
  500. package/dist/unstable.css.map +1 -1
  501. package/dist/vkui.css +94 -16
  502. package/dist/vkui.css.map +1 -1
  503. package/package.json +9 -9
  504. package/src/components/ActionSheet/ActionSheet.css +31 -59
  505. package/src/components/ActionSheet/ActionSheet.tsx +4 -7
  506. package/src/components/ActionSheet/ActionSheetDefaultIosCloseItem.tsx +12 -0
  507. package/src/components/ActionSheet/ActionSheetDropdown.tsx +9 -6
  508. package/src/components/ActionSheet/ActionSheetDropdownDesktop.tsx +4 -4
  509. package/src/components/ActionSheet/Readme.md +6 -30
  510. package/src/components/ActionSheetItem/ActionSheetItem.css +67 -120
  511. package/src/components/ActionSheetItem/ActionSheetItem.tsx +42 -71
  512. package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +5 -5
  513. package/src/components/Alert/Alert.css +79 -79
  514. package/src/components/Alert/Alert.tsx +14 -14
  515. package/src/components/Alert/Readme.md +83 -104
  516. package/src/components/AppRoot/AppRoot.css +2 -1
  517. package/src/components/AppRoot/AppRoot.tsx +1 -4
  518. package/src/components/Avatar/Avatar.tsx +15 -17
  519. package/src/components/Avatar/Readme.md +3 -3
  520. package/src/components/Banner/Banner.tsx +58 -63
  521. package/src/components/ButtonGroup/ButtonGroup.tsx +6 -3
  522. package/src/components/ButtonGroup/Readme.md +13 -11
  523. package/src/components/Calendar/Readme.md +3 -0
  524. package/src/components/CalendarDay/CalendarDay.tsx +21 -20
  525. package/src/components/CalendarRange/Readme.md +3 -0
  526. package/src/components/CardScroll/CardScroll.tsx +1 -2
  527. package/src/components/Cell/CellCheckbox/CellCheckbox.css +2 -2
  528. package/src/components/Cell/CellDragger/CellDragger.css +1 -1
  529. package/src/components/Chip/Chip.css +1 -0
  530. package/src/components/Chip/Chip.tsx +14 -2
  531. package/src/components/ChipsInput/ChipsInput.css +0 -71
  532. package/src/components/ChipsInput/ChipsInput.tsx +20 -220
  533. package/src/components/ChipsInputBase/ChipsInputBase.css +73 -0
  534. package/src/components/ChipsInputBase/ChipsInputBase.tsx +206 -0
  535. package/src/components/ChipsSelect/ChipsSelect.css +8 -0
  536. package/src/components/ChipsSelect/ChipsSelect.tsx +47 -39
  537. package/src/components/CustomSelect/CustomSelect.css +1 -0
  538. package/src/components/CustomSelect/CustomSelect.tsx +2 -3
  539. package/src/components/CustomSelect/Readme.md +8 -2
  540. package/src/components/DateInput/DateInput.css +1 -1
  541. package/src/components/DateInput/DateInput.tsx +6 -3
  542. package/src/components/DateInput/Readme.md +13 -0
  543. package/src/components/DateRangeInput/DateRangeInput.css +1 -1
  544. package/src/components/DateRangeInput/DateRangeInput.tsx +6 -3
  545. package/src/components/DateRangeInput/Readme.md +13 -0
  546. package/src/components/DropdownIcon/DropdownIcon.tsx +22 -8
  547. package/src/components/Epic/Readme.md +10 -5
  548. package/src/components/FormField/FormField.css +58 -6
  549. package/src/components/FormField/FormField.tsx +3 -0
  550. package/src/components/FormItem/FormItem.css +5 -3
  551. package/src/components/FormLayoutGroup/FormLayoutGroup.css +35 -0
  552. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +13 -2
  553. package/src/components/FormLayoutGroup/Readme.md +58 -48
  554. package/src/components/FormStatus/FormStatus.css +8 -5
  555. package/src/components/FormStatus/FormStatus.tsx +4 -8
  556. package/src/components/FormStatus/Readme.md +4 -0
  557. package/src/components/Gallery/Readme.md +64 -18
  558. package/src/components/Header/Header.css +8 -12
  559. package/src/components/Header/Header.tsx +9 -8
  560. package/src/components/HorizontalCell/Readme.md +1 -1
  561. package/src/components/IconButton/IconButton.tsx +2 -2
  562. package/src/components/Input/Input.css +1 -1
  563. package/src/components/Input/Input.tsx +2 -0
  564. package/src/components/Link/Link.css +2 -1
  565. package/src/components/List/List.tsx +3 -4
  566. package/src/components/ModalDismissButton/ModalDismissButton.css +6 -6
  567. package/src/components/ModalDismissButton/ModalDismissButton.tsx +1 -5
  568. package/src/components/ModalDismissButton/Readme.md +1 -1
  569. package/src/components/ModalPage/ModalPage.css +69 -63
  570. package/src/components/ModalPage/ModalPage.tsx +24 -11
  571. package/src/components/ModalPageHeader/ModalPageHeader.css +9 -12
  572. package/src/components/ModalPageHeader/ModalPageHeader.tsx +3 -2
  573. package/src/components/ModalRoot/ModalRoot.tsx +24 -24
  574. package/src/components/ModalRoot/ModalRootDesktop.tsx +12 -14
  575. package/src/components/ModalRoot/Readme.md +8 -3
  576. package/src/components/NativeSelect/NativeSelect.tsx +5 -2
  577. package/src/components/Panel/Panel.css +52 -24
  578. package/src/components/Panel/Panel.tsx +7 -9
  579. package/src/components/PanelHeader/PanelHeader.css +28 -21
  580. package/src/components/PanelHeader/PanelHeader.tsx +11 -12
  581. package/src/components/PanelHeaderBack/PanelHeaderBack.tsx +6 -5
  582. package/src/components/PanelHeaderButton/PanelHeaderButton.css +8 -15
  583. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +6 -6
  584. package/src/components/PanelHeaderClose/PanelHeaderClose.tsx +2 -6
  585. package/src/components/PanelHeaderContent/PanelHeaderContent.css +17 -23
  586. package/src/components/PanelHeaderContent/PanelHeaderContent.tsx +11 -5
  587. package/src/components/PanelHeaderContext/PanelHeaderContext.css +9 -25
  588. package/src/components/PanelHeaderContext/PanelHeaderContext.tsx +11 -7
  589. package/src/components/PanelHeaderContext/Readme.md +85 -101
  590. package/src/components/PanelHeaderEdit/PanelHeaderEdit.tsx +2 -2
  591. package/src/components/PanelHeaderSubmit/PanelHeaderSubmit.tsx +2 -6
  592. package/src/components/PromoBanner/PromoBanner.css +10 -22
  593. package/src/components/PromoBanner/PromoBanner.tsx +1 -5
  594. package/src/components/RichTooltip/Readme.md +2 -2
  595. package/src/components/Search/Search.css +134 -48
  596. package/src/components/Search/Search.tsx +13 -8
  597. package/src/components/Select/Select.css +2 -2
  598. package/src/components/SelectMimicry/Readme.md +3 -3
  599. package/src/components/SelectMimicry/SelectMimicry.tsx +3 -1
  600. package/src/components/SliderSwitch/SliderSwitch.tsx +5 -5
  601. package/src/components/SliderSwitch/SliderSwitchButton.tsx +7 -7
  602. package/src/components/Snackbar/Readme.md +12 -3
  603. package/src/components/Spacing/Readme.md +20 -20
  604. package/src/components/Spacing/Spacing.css +5 -1
  605. package/src/components/SplitLayout/Readme.md +1 -1
  606. package/src/components/SubnavigationBar/SubnavigationBar.css +7 -19
  607. package/src/components/SubnavigationBar/SubnavigationBar.tsx +1 -8
  608. package/src/components/SubnavigationButton/SubnavigationButton.css +13 -0
  609. package/src/components/SubnavigationButton/SubnavigationButton.tsx +1 -4
  610. package/src/components/TabbarItem/Readme.md +6 -1
  611. package/src/components/Tabs/Readme.md +10 -2
  612. package/src/components/TabsItem/TabsItem.css +1 -1
  613. package/src/components/Tappable/Tappable.tsx +9 -11
  614. package/src/components/Textarea/Textarea.css +1 -1
  615. package/src/components/Textarea/Textarea.tsx +5 -2
  616. package/src/components/Tooltip/Readme.md +2 -2
  617. package/src/components/Touch/Readme.md +4 -4
  618. package/src/components/Typography/Headline/Headline.css +10 -0
  619. package/src/components/Typography/Text/Text.css +10 -0
  620. package/src/components/UsersStack/UsersStack.css +42 -0
  621. package/src/components/UsersStack/UsersStack.tsx +71 -15
  622. package/src/components/View/Readme.md +5 -5
  623. package/src/components/View/View.tsx +2 -9
  624. package/src/components/View/ViewInfinite.tsx +14 -14
  625. package/src/{components/ChipsInput → hooks}/useChipsInput.ts +5 -8
  626. package/src/{components/ChipsSelect → hooks}/useChipsSelect.ts +4 -4
  627. package/src/index.ts +3 -0
  628. package/src/lib/animate.ts +1 -1
  629. package/src/lib/platform.ts +12 -6
  630. package/src/lib/testing.ts +1 -1
  631. package/src/lib/touch.ts +1 -1
  632. package/src/styles/components.css +1 -0
  633. package/src/tokenized/index.ts +85 -0
  634. package/.cache/ts/src/components/UsersStack/masks.d.ts +0 -1
  635. package/dist/cjs/components/ChipsInput/useChipsInput.js.map +0 -1
  636. package/dist/cjs/components/ChipsSelect/useChipsSelect.js.map +0 -1
  637. package/dist/cjs/components/UsersStack/masks.js +0 -29
  638. package/dist/cjs/components/UsersStack/masks.js.map +0 -1
  639. package/dist/components/ChipsInput/useChipsInput.js.map +0 -1
  640. package/dist/components/ChipsSelect/useChipsSelect.js.map +0 -1
  641. package/dist/components/UsersStack/masks.d.ts +0 -1
  642. package/dist/components/UsersStack/masks.js +0 -20
  643. package/dist/components/UsersStack/masks.js.map +0 -1
  644. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +0 -1
  645. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +0 -1
  646. package/dist/cssm/components/DropdownIcon/DropdownIcon.css +0 -1
  647. package/dist/cssm/components/UsersStack/masks.d.ts +0 -1
  648. package/dist/cssm/components/UsersStack/masks.js +0 -20
  649. package/dist/cssm/components/UsersStack/masks.js.map +0 -1
  650. package/src/components/DropdownIcon/DropdownIcon.css +0 -3
  651. package/src/components/UsersStack/masks.tsx +0 -69
@@ -45,11 +45,8 @@ export var SubnavigationButton = function SubnavigationButton(_ref2) {
45
45
  var platform = usePlatform();
46
46
  return createScopedElement(Tappable, _extends({}, restProps, {
47
47
  hasActive: false,
48
- focusVisibleMode: "outside" // eslint-disable-next-line vkui/no-object-expression-in-arguments
49
- ,
50
- vkuiClass: classNames(getClassName("SubnavigationButton", platform), "SubnavigationButton--".concat(size), {
51
- "SubnavigationButton--selected": selected
52
- }),
48
+ focusVisibleMode: "outside",
49
+ vkuiClass: classNames(getClassName("SubnavigationButton", platform), "SubnavigationButton--".concat(size), selected && "SubnavigationButton--selected"),
53
50
  "aria-label": getTitleFromChildren(children)
54
51
  }), createScopedElement("span", {
55
52
  vkuiClass: "SubnavigationButton__in"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"names":["classNames","getClassName","getTitleFromChildren","hasReactNode","Tappable","Icon16Dropdown","usePlatform","Caption","Subhead","SubnavigationButtonTypography","textLevel","restProps","SubnavigationButton","size","selected","before","after","expandable","children","platform"],"mappings":";;;;;AAEA,SAASA,UAAT;AACA,SAASC,YAAT;AACA,SAASC,oBAAT,EAA+BC,YAA/B;AACA,SAAwBC,QAAxB;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,WAAT;AACA,SAASC,OAAT;AACA,SAASC,OAAT;AACA;;AAwBA,IAAMC,6BAA6B,GAAG,SAAhCA,6BAAgC,OAGH;AAAA,MAFjCC,SAEiC,QAFjCA,SAEiC;AAAA,MAD9BC,SAC8B;;AACjC,MAAID,SAAS,KAAK,CAAlB,EAAqB;AACnB,WAAO,oBAAC,OAAD,EAAaC,SAAb,CAAP;AACD;;AAED,SAAO,oBAAC,OAAD;AAAS,IAAA,KAAK,EAAED,SAAS,KAAK,CAAd,GAAkB,GAAlB,GAAwB;AAAxC,KAAiDC,SAAjD,EAAP;AACD,CATD;AAWA;AACA;AACA;;;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,QASH;AAAA,yBAR9BC,IAQ8B;AAAA,MAR9BA,IAQ8B,2BARvB,GAQuB;AAAA,MAP9BC,QAO8B,SAP9BA,QAO8B;AAAA,8BAN9BJ,SAM8B;AAAA,MAN9BA,SAM8B,gCANlB,CAMkB;AAAA,MAL9BK,MAK8B,SAL9BA,MAK8B;AAAA,MAJ9BC,KAI8B,SAJ9BA,KAI8B;AAAA,MAH9BC,UAG8B,SAH9BA,UAG8B;AAAA,MAF9BC,QAE8B,SAF9BA,QAE8B;AAAA,MAD3BP,SAC2B;;AAC9B,MAAMQ,QAAQ,GAAGb,WAAW,EAA5B;AAEA,SACE,oBAAC,QAAD,eACMK,SADN;AAEE,IAAA,SAAS,EAAE,KAFb;AAGE,IAAA,gBAAgB,EAAC,SAHnB,CAIE;AAJF;AAKE,IAAA,SAAS,EAAEX,UAAU,CACnBC,YAAY,CAAC,qBAAD,EAAwBkB,QAAxB,CADO,iCAEKN,IAFL,GAGnB;AACE,uCAAiCC;AADnC,KAHmB,CALvB;AAYE,kBAAYZ,oBAAoB,CAACgB,QAAD;AAZlC,MAcE;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGf,YAAY,CAACY,MAAD,CAAZ,IACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA+CA,MAA/C,CAFJ,EAIE,oBAAC,6BAAD;AACE,IAAA,SAAS,EAAEL,SADb;AAEE,IAAA,SAAS,EAAC,4BAFZ;AAGE,IAAA,SAAS,EAAC;AAHZ,KAKGQ,QALH,CAJF,EAWGf,YAAY,CAACa,KAAD,CAAZ,IACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA8CA,KAA9C,CAZJ,EAcGC,UAAU,IACT,oBAAC,cAAD;AAAgB,IAAA,SAAS,EAAC;AAA1B,IAfJ,CAdF,CADF;AAmCD,CA/CM","sourcesContent":["import * as React from \"react\";\nimport { HasComponent, HasChildren } from \"../../types\";\nimport { classNames } from \"../../lib/classNames\";\nimport { getClassName } from \"../../helpers/getClassName\";\nimport { getTitleFromChildren, hasReactNode } from \"../../lib/utils\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { Icon16Dropdown } from \"@vkontakte/icons\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport \"./SubnavigationButton.css\";\n\nexport interface SubnavigationButtonProps extends Omit<TappableProps, \"size\"> {\n size?: \"m\" | \"l\";\n selected?: boolean;\n /**\n * Размер шрифта. Этим свойством рекомендуется пользоваться, чтобы отрегулировать размер шрифта у кнопок в `<SubnavigationBar mode=\"fixed\" />`\n */\n textLevel?: 1 | 2 | 3;\n /**\n * Рекомендуется использовать только иконки с размером 24\n */\n before?: React.ReactNode;\n /**\n * Рекомендуется использовать только `<Counter size=\"s\" />` или `<Badge />`\n */\n after?: React.ReactNode;\n expandable?: boolean;\n}\n\ntype SubnavButtonTypographyProps = Pick<SubnavigationButtonProps, \"textLevel\"> &\n HasComponent &\n HasChildren;\n\nconst SubnavigationButtonTypography = ({\n textLevel,\n ...restProps\n}: SubnavButtonTypographyProps) => {\n if (textLevel === 1) {\n return <Subhead {...restProps} />;\n }\n\n return <Caption level={textLevel === 2 ? \"1\" : \"2\"} {...restProps} />;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SubnavigationButton\n */\nexport const SubnavigationButton = ({\n size = \"m\",\n selected,\n textLevel = 1,\n before,\n after,\n expandable,\n children,\n ...restProps\n}: SubnavigationButtonProps) => {\n const platform = usePlatform();\n\n return (\n <Tappable\n {...restProps}\n hasActive={false}\n focusVisibleMode=\"outside\"\n // eslint-disable-next-line vkui/no-object-expression-in-arguments\n vkuiClass={classNames(\n getClassName(\"SubnavigationButton\", platform),\n `SubnavigationButton--${size}`,\n {\n \"SubnavigationButton--selected\": selected,\n }\n )}\n aria-label={getTitleFromChildren(children)}\n >\n <span vkuiClass=\"SubnavigationButton__in\">\n {hasReactNode(before) && (\n <span vkuiClass=\"SubnavigationButton__before\">{before}</span>\n )}\n <SubnavigationButtonTypography\n textLevel={textLevel}\n vkuiClass=\"SubnavigationButton__label\"\n Component=\"span\"\n >\n {children}\n </SubnavigationButtonTypography>\n {hasReactNode(after) && (\n <span vkuiClass=\"SubnavigationButton__after\">{after}</span>\n )}\n {expandable && (\n <Icon16Dropdown vkuiClass=\"SubnavigationButton__expandableIcon\" />\n )}\n </span>\n </Tappable>\n );\n};\n"],"file":"SubnavigationButton.js"}
1
+ {"version":3,"sources":["../../../../src/components/SubnavigationButton/SubnavigationButton.tsx"],"names":["classNames","getClassName","getTitleFromChildren","hasReactNode","Tappable","Icon16Dropdown","usePlatform","Caption","Subhead","SubnavigationButtonTypography","textLevel","restProps","SubnavigationButton","size","selected","before","after","expandable","children","platform"],"mappings":";;;;;AAEA,SAASA,UAAT;AACA,SAASC,YAAT;AACA,SAASC,oBAAT,EAA+BC,YAA/B;AACA,SAAwBC,QAAxB;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,WAAT;AACA,SAASC,OAAT;AACA,SAASC,OAAT;AACA;;AAwBA,IAAMC,6BAA6B,GAAG,SAAhCA,6BAAgC,OAGH;AAAA,MAFjCC,SAEiC,QAFjCA,SAEiC;AAAA,MAD9BC,SAC8B;;AACjC,MAAID,SAAS,KAAK,CAAlB,EAAqB;AACnB,WAAO,oBAAC,OAAD,EAAaC,SAAb,CAAP;AACD;;AAED,SAAO,oBAAC,OAAD;AAAS,IAAA,KAAK,EAAED,SAAS,KAAK,CAAd,GAAkB,GAAlB,GAAwB;AAAxC,KAAiDC,SAAjD,EAAP;AACD,CATD;AAWA;AACA;AACA;;;AACA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,QASH;AAAA,yBAR9BC,IAQ8B;AAAA,MAR9BA,IAQ8B,2BARvB,GAQuB;AAAA,MAP9BC,QAO8B,SAP9BA,QAO8B;AAAA,8BAN9BJ,SAM8B;AAAA,MAN9BA,SAM8B,gCANlB,CAMkB;AAAA,MAL9BK,MAK8B,SAL9BA,MAK8B;AAAA,MAJ9BC,KAI8B,SAJ9BA,KAI8B;AAAA,MAH9BC,UAG8B,SAH9BA,UAG8B;AAAA,MAF9BC,QAE8B,SAF9BA,QAE8B;AAAA,MAD3BP,SAC2B;;AAC9B,MAAMQ,QAAQ,GAAGb,WAAW,EAA5B;AAEA,SACE,oBAAC,QAAD,eACMK,SADN;AAEE,IAAA,SAAS,EAAE,KAFb;AAGE,IAAA,gBAAgB,EAAC,SAHnB;AAIE,IAAA,SAAS,EAAEX,UAAU,CACnBC,YAAY,CAAC,qBAAD,EAAwBkB,QAAxB,CADO,iCAEKN,IAFL,GAGnBC,QAAQ,IAAI,+BAHO,CAJvB;AASE,kBAAYZ,oBAAoB,CAACgB,QAAD;AATlC,MAWE;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGf,YAAY,CAACY,MAAD,CAAZ,IACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA+CA,MAA/C,CAFJ,EAIE,oBAAC,6BAAD;AACE,IAAA,SAAS,EAAEL,SADb;AAEE,IAAA,SAAS,EAAC,4BAFZ;AAGE,IAAA,SAAS,EAAC;AAHZ,KAKGQ,QALH,CAJF,EAWGf,YAAY,CAACa,KAAD,CAAZ,IACC;AAAM,IAAA,SAAS,EAAC;AAAhB,KAA8CA,KAA9C,CAZJ,EAcGC,UAAU,IACT,oBAAC,cAAD;AAAgB,IAAA,SAAS,EAAC;AAA1B,IAfJ,CAXF,CADF;AAgCD,CA5CM","sourcesContent":["import * as React from \"react\";\nimport { HasComponent, HasChildren } from \"../../types\";\nimport { classNames } from \"../../lib/classNames\";\nimport { getClassName } from \"../../helpers/getClassName\";\nimport { getTitleFromChildren, hasReactNode } from \"../../lib/utils\";\nimport { TappableProps, Tappable } from \"../Tappable/Tappable\";\nimport { Icon16Dropdown } from \"@vkontakte/icons\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport \"./SubnavigationButton.css\";\n\nexport interface SubnavigationButtonProps extends Omit<TappableProps, \"size\"> {\n size?: \"m\" | \"l\";\n selected?: boolean;\n /**\n * Размер шрифта. Этим свойством рекомендуется пользоваться, чтобы отрегулировать размер шрифта у кнопок в `<SubnavigationBar mode=\"fixed\" />`\n */\n textLevel?: 1 | 2 | 3;\n /**\n * Рекомендуется использовать только иконки с размером 24\n */\n before?: React.ReactNode;\n /**\n * Рекомендуется использовать только `<Counter size=\"s\" />` или `<Badge />`\n */\n after?: React.ReactNode;\n expandable?: boolean;\n}\n\ntype SubnavButtonTypographyProps = Pick<SubnavigationButtonProps, \"textLevel\"> &\n HasComponent &\n HasChildren;\n\nconst SubnavigationButtonTypography = ({\n textLevel,\n ...restProps\n}: SubnavButtonTypographyProps) => {\n if (textLevel === 1) {\n return <Subhead {...restProps} />;\n }\n\n return <Caption level={textLevel === 2 ? \"1\" : \"2\"} {...restProps} />;\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SubnavigationButton\n */\nexport const SubnavigationButton = ({\n size = \"m\",\n selected,\n textLevel = 1,\n before,\n after,\n expandable,\n children,\n ...restProps\n}: SubnavigationButtonProps) => {\n const platform = usePlatform();\n\n return (\n <Tappable\n {...restProps}\n hasActive={false}\n focusVisibleMode=\"outside\"\n vkuiClass={classNames(\n getClassName(\"SubnavigationButton\", platform),\n `SubnavigationButton--${size}`,\n selected && \"SubnavigationButton--selected\"\n )}\n aria-label={getTitleFromChildren(children)}\n >\n <span vkuiClass=\"SubnavigationButton__in\">\n {hasReactNode(before) && (\n <span vkuiClass=\"SubnavigationButton__before\">{before}</span>\n )}\n <SubnavigationButtonTypography\n textLevel={textLevel}\n vkuiClass=\"SubnavigationButton__label\"\n Component=\"span\"\n >\n {children}\n </SubnavigationButtonTypography>\n {hasReactNode(after) && (\n <span vkuiClass=\"SubnavigationButton__after\">{after}</span>\n )}\n {expandable && (\n <Icon16Dropdown vkuiClass=\"SubnavigationButton__expandableIcon\" />\n )}\n </span>\n </Tappable>\n );\n};\n"],"file":"SubnavigationButton.js"}
@@ -2,4 +2,4 @@
2
2
  --header_alternate_background,var(--vkui--color_background_modal)
3
3
  );box-shadow:0 4px 8px rgba(0,0,0,.04),0 0 4px rgba(0,0,0,.06);box-shadow:var(--vkui--elevation2,0 4px 8px rgba(0,0,0,.04),0 0 4px rgba(0,0,0,.06))}.vkuiTabsItem--hover.vkuiTabsItem--accent{background-color:#ebedf0;background-color:var(
4
4
  --control_background,var(--vkui--color_background_secondary)
5
- )}.vkuiTabsItem--accent:before{border:1px solid transparent;border:var(--thin-border) solid transparent;border-radius:inherit;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.vkuiTabsItem--selected.vkuiTabsItem--accent:before{border-color:#d7d8d9;border-color:var(--separator_common,var(--vkui--color_separator_primary))}.vkuiTabsItem--selected.vkuiTabsItem--secondary{background-color:rgba(0,0,0,.04);background-color:var(--vkui--color_background_secondary_alpha,rgba(0,0,0,.04))}.vkuiTabsItem--hover.vkuiTabsItem--secondary{background-color:rgba(0,0,0,.08);background-color:var(--vkui--color_background_secondary_alpha--hover,rgba(0,0,0,.08))}.vkuiTabsItem__before{color:#818c99;color:var(--icon_outline_medium,var(--vkui--color_icon_medium));margin-right:6px;transition:color .15s ease-out}.vkuiTabsItem--selected .vkuiTabsItem__before{color:#000;color:var(--text_primary,var(--vkui--color_icon_primary))}.vkuiTabsItem--selected.vkuiTabsItem--accent .vkuiTabsItem__before{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_icon_accent_themed))}.vkuiTabsItem--selected.vkuiTabsItem--secondary .vkuiTabsItem__before{opacity:.72}.vkuiTabsItem__label{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary));max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;transition:color .15s ease-out;white-space:nowrap}.vkuiTabsItem--selected .vkuiTabsItem__label{color:#000;color:var(--text_primary,var(--vkui--color_text_primary))}.vkuiTabsItem--selected.vkuiTabsItem--accent .vkuiTabsItem__label{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_text_accent_themed))}.vkuiTabsItem--selected.vkuiTabsItem--secondary .vkuiTabsItem__label{opacity:.72}.vkuiTabsItem__status{margin-left:6px}.vkuiTabsItem__status--count{color:#99a2ad;color:var(--text_tertiary,var(--vkui--color_text_tertiary))}.vkuiTabsItem__after{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_icon_accent_themed));margin-left:6px}.vkuiTabsItem__underline{background-color:#2688eb;background-color:var(--accent,var(--vkui--color_background_accent));border-radius:2px;bottom:5px;height:2px;left:16px;opacity:0;pointer-events:none;position:absolute;right:16px;transition:opacity .15s ease-out}.vkuiTabsItem--sizeY-compact .vkuiTabsItem__underline{bottom:3px}.vkuiTabsItem__underline[data-selected=true]{opacity:1}.vkuiTabs--vkcom .vkuiTabsItem{flex-grow:0;min-width:auto;padding-left:10px;padding-right:10px}.vkuiTabs--vkcom .vkuiTabsItem__underline{bottom:0;left:2px;right:2px}.vkuiHorizontalScroll .vkuiTabsItem{flex-basis:auto;flex-grow:1;flex-shrink:0;min-width:64px}.vkuiTabsItem--ios.vkuiTabsItem--segmented{border:1px solid #99a2ad;border:1px solid var(--segmented_control_tint);border-radius:0;flex-basis:0;flex-grow:1;flex-shrink:0;max-width:100%;padding:7px 12px}.vkuiTabsItem--ios.vkuiTabsItem--segmented:not(:first-child){border-left:none}.vkuiTabsItem--ios.vkuiTabsItem--segmented:first-child{border-bottom-left-radius:10px;border-top-left-radius:10px}.vkuiTabsItem--ios.vkuiTabsItem--segmented:last-child{border-bottom-right-radius:10px;border-top-right-radius:10px}.vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected{background-color:#99a2ad;background-color:var(--segmented_control_tint);color:#fff;color:var(--background_content)}.vkuiTabsItem--ios.vkuiTabsItem--segmented:not(.vkuiTabsItem--selected).vkuiTabsItem--active{background-color:#d7d8d9;background-color:var(--separator_common)}.vkuiTabs--header .vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected{background-color:#2688eb;background-color:var(--header_tint_alternate);color:#fff;color:var(--header_background)}.vkuiTabsItem--ios.vkuiTabsItem--segmented .vkuiTabsItem__label{color:#99a2ad;color:var(--segmented_control_tint)}.vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected .vkuiTabsItem__label{color:#fff;color:var(--background_content)}.vkuiPanelHeader--ios .vkuiTabsItem--segmented:not(.vkuiTabsItem--selected).vkuiTabsItem--active .vkuiTabsItem__label{opacity:.7}.vkuiPanelHeader--ios .vkuiTabsItem--segmented{border-color:#2688eb;border-color:var(--header_tint_alternate);color:#2688eb;color:var(--header_tint_alternate)}
5
+ )}.vkuiTabsItem--accent:before{border:1px solid transparent;border:var(--thin-border) solid transparent;border-radius:inherit;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.vkuiTabsItem--selected.vkuiTabsItem--accent:before{border-color:#d7d8d9;border-color:var(--separator_common,var(--vkui--color_separator_primary))}.vkuiTabsItem--selected.vkuiTabsItem--secondary{background-color:rgba(0,0,0,.04);background-color:var(--vkui--color_background_secondary_alpha,rgba(0,0,0,.04))}.vkuiTabsItem--hover.vkuiTabsItem--secondary{background-color:rgba(0,0,0,.08);background-color:var(--vkui--color_background_secondary_alpha--hover,rgba(0,0,0,.08))}.vkuiTabsItem__before{color:#818c99;color:var(--icon_outline_medium,var(--vkui--color_icon_medium));margin-right:6px;transition:color .15s ease-out}.vkuiTabsItem--selected .vkuiTabsItem__before{color:#2c2d2e;color:var(--vkui--color_icon_primary,#2c2d2e)}.vkuiTabsItem--selected.vkuiTabsItem--accent .vkuiTabsItem__before{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_icon_accent_themed))}.vkuiTabsItem--selected.vkuiTabsItem--secondary .vkuiTabsItem__before{opacity:.72}.vkuiTabsItem__label{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary));max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;transition:color .15s ease-out;white-space:nowrap}.vkuiTabsItem--selected .vkuiTabsItem__label{color:#000;color:var(--text_primary,var(--vkui--color_text_primary))}.vkuiTabsItem--selected.vkuiTabsItem--accent .vkuiTabsItem__label{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_text_accent_themed))}.vkuiTabsItem--selected.vkuiTabsItem--secondary .vkuiTabsItem__label{opacity:.72}.vkuiTabsItem__status{margin-left:6px}.vkuiTabsItem__status--count{color:#99a2ad;color:var(--text_tertiary,var(--vkui--color_text_tertiary))}.vkuiTabsItem__after{color:#2688eb;color:var(--header_tint_alternate,var(--vkui--color_icon_accent_themed));margin-left:6px}.vkuiTabsItem__underline{background-color:#2688eb;background-color:var(--accent,var(--vkui--color_background_accent));border-radius:2px;bottom:5px;height:2px;left:16px;opacity:0;pointer-events:none;position:absolute;right:16px;transition:opacity .15s ease-out}.vkuiTabsItem--sizeY-compact .vkuiTabsItem__underline{bottom:3px}.vkuiTabsItem__underline[data-selected=true]{opacity:1}.vkuiTabs--vkcom .vkuiTabsItem{flex-grow:0;min-width:auto;padding-left:10px;padding-right:10px}.vkuiTabs--vkcom .vkuiTabsItem__underline{bottom:0;left:2px;right:2px}.vkuiHorizontalScroll .vkuiTabsItem{flex-basis:auto;flex-grow:1;flex-shrink:0;min-width:64px}.vkuiTabsItem--ios.vkuiTabsItem--segmented{border:1px solid #99a2ad;border:1px solid var(--segmented_control_tint);border-radius:0;flex-basis:0;flex-grow:1;flex-shrink:0;max-width:100%;padding:7px 12px}.vkuiTabsItem--ios.vkuiTabsItem--segmented:not(:first-child){border-left:none}.vkuiTabsItem--ios.vkuiTabsItem--segmented:first-child{border-bottom-left-radius:10px;border-top-left-radius:10px}.vkuiTabsItem--ios.vkuiTabsItem--segmented:last-child{border-bottom-right-radius:10px;border-top-right-radius:10px}.vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected{background-color:#99a2ad;background-color:var(--segmented_control_tint);color:#fff;color:var(--background_content)}.vkuiTabsItem--ios.vkuiTabsItem--segmented:not(.vkuiTabsItem--selected).vkuiTabsItem--active{background-color:#d7d8d9;background-color:var(--separator_common)}.vkuiTabs--header .vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected{background-color:#2688eb;background-color:var(--header_tint_alternate);color:#fff;color:var(--header_background)}.vkuiTabsItem--ios.vkuiTabsItem--segmented .vkuiTabsItem__label{color:#99a2ad;color:var(--segmented_control_tint)}.vkuiTabsItem--ios.vkuiTabsItem--segmented.vkuiTabsItem--selected .vkuiTabsItem__label{color:#fff;color:var(--background_content)}.vkuiPanelHeader--ios .vkuiTabsItem--segmented:not(.vkuiTabsItem--selected).vkuiTabsItem--active .vkuiTabsItem__label{opacity:.7}.vkuiPanelHeader--ios .vkuiTabsItem--segmented{border-color:#2688eb;border-color:var(--header_tint_alternate);color:#2688eb;color:var(--header_tint_alternate)}
@@ -1,5 +1,4 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
4
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
@@ -7,7 +6,7 @@ var _excluded = ["children", "Component", "onClick", "onKeyDown", "activeEffectD
7
6
  import { createScopedElement } from "../../lib/jsxRuntime";
8
7
  import * as React from "react";
9
8
  import mitt from "mitt";
10
- import { noop } from "@vkontakte/vkjs";
9
+ import { noop } from "../../lib/utils";
11
10
  import { Touch } from "../Touch/Touch";
12
11
  import TouchRootContext from "../Touch/TouchContext";
13
12
  import { classNames } from "../../lib/classNames";
@@ -114,8 +113,6 @@ function useActivity(hasActive, stopDelay) {
114
113
  }
115
114
 
116
115
  var TappableComponent = function TappableComponent(_ref) {
117
- var _classNames;
118
-
119
116
  var children = _ref.children,
120
117
  Component = _ref.Component,
121
118
  onClick = _ref.onClick,
@@ -283,13 +280,9 @@ var TappableComponent = function TappableComponent(_ref) {
283
280
 
284
281
  var activeDuration = duration - ACTIVE_DELAY;
285
282
  stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);
286
- } // eslint-disable-next-line vkui/no-object-expression-in-arguments
287
-
283
+ }
288
284
 
289
- var classes = classNames("Tappable", platform === IOS && "Tappable--ios", "Tappable--sizeX-".concat(sizeX), hasHover && "Tappable--hasHover", hasActive && "Tappable--hasActive", hasHover && hovered && !isPresetHoverMode && hoverMode, hasActive && active && !isPresetActiveMode && activeMode, focusVisible && !isPresetFocusVisibleMode && focusVisibleMode, (_classNames = {
290
- "Tappable--active": hasActive && active,
291
- "Tappable--mouse": hasMouse
292
- }, _defineProperty(_classNames, "Tappable--hover-".concat(hoverMode), hasHover && hovered && isPresetHoverMode), _defineProperty(_classNames, "Tappable--active-".concat(activeMode), hasActive && active && isPresetActiveMode), _defineProperty(_classNames, "Tappable--focus-visible", focusVisible), _classNames));
285
+ var classes = classNames("Tappable", platform === IOS && "Tappable--ios", "Tappable--sizeX-".concat(sizeX), hasHover && "Tappable--hasHover", hasActive && "Tappable--hasActive", hasHover && hovered && !isPresetHoverMode && hoverMode, hasActive && active && !isPresetActiveMode && activeMode, focusVisible && !isPresetFocusVisibleMode && focusVisibleMode, hasActive && active && "Tappable--active", hasMouse && "Tappable--mouse", hasHover && hovered && isPresetHoverMode && "Tappable--hover-".concat(hoverMode), hasActive && active && isPresetActiveMode && "Tappable--active-".concat(activeMode), focusVisible && "Tappable--focus-visible");
293
286
  var handlers = {
294
287
  onStart: callMultiple(onStart, props.onStart),
295
288
  onMove: callMultiple(onMove, props.onMove),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tappable/Tappable.tsx"],"names":["React","mitt","noop","Touch","TouchRootContext","classNames","IOS","ANDROID","getOffsetRect","coordX","coordY","withAdaptivity","shouldTriggerClickOnEnterOrSpace","useIsomorphicLayoutEffect","FocusVisible","useTimeout","useExternRef","usePlatform","useFocusVisible","callMultiple","useBooleanState","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","none","pending","active","exiting","TappableContext","createContext","onHoverChange","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","TappableComponent","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","sizeX","hasMouse","deviceHasHover","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","props","href","useContext","insideTouchRoot","platform","focusVisible","onBlur","onFocus","clicks","setClicks","childHover","setChildHover","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","includes","isPresetActiveMode","isPresetFocusVisibleMode","containerRef","childContext","useRef","current","e","preventDefault","click","needWaves","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","top","left","onMove","isSlide","onEnd","duration","activeDuration","classes","handlers","role","undefined","map","wave","Tappable","displayName"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"@vkontakte/vkjs\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNames } from \"../../lib/classNames\";\nimport { IOS, ANDROID } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport { HasComponent, HasRootRef } from \"../../types\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport \"./Tappable.css\";\n\nconst WAVE_LIVE = 225;\n\nexport interface TappableProps\n extends Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n >,\n HasRootRef<HTMLElement>,\n AdaptivityProps,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: \"opacity\" | \"background\" | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: \"opacity\" | \"background\" | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\nconst TappableComponent = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n sizeX,\n hasMouse,\n deviceHasHover,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = deviceHasHover && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = [\"opacity\", \"background\"].includes(hoverMode);\n const isPresetActiveMode = [\"opacity\", \"background\"].includes(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === ANDROID &&\n !hasMouse &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n // eslint-disable-next-line vkui/no-object-expression-in-arguments\n const classes = classNames(\n \"Tappable\",\n platform === IOS && \"Tappable--ios\",\n `Tappable--sizeX-${sizeX}`,\n hasHover && `Tappable--hasHover`,\n hasActive && `Tappable--hasActive`,\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n {\n \"Tappable--active\": hasActive && active,\n \"Tappable--mouse\": hasMouse,\n [`Tappable--hover-${hoverMode}`]:\n hasHover && hovered && isPresetHoverMode,\n [`Tappable--active-${activeMode}`]:\n hasActive && active && isPresetActiveMode,\n \"Tappable--focus-visible\": focusVisible,\n }\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n vkuiClass={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__waves\">\n {clicks.map((wave) => (\n <span\n key={wave.id}\n vkuiClass=\"Tappable__wave\"\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {hasHover && hoverMode === \"background\" && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__hoverShadow\" />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = withAdaptivity(TappableComponent, {\n sizeX: true,\n hasMouse: true,\n deviceHasHover: true,\n});\n\nTappable.displayName = \"Tappable\";\n"],"file":"Tappable.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tappable/Tappable.tsx"],"names":["React","mitt","noop","Touch","TouchRootContext","classNames","IOS","ANDROID","getOffsetRect","coordX","coordY","withAdaptivity","shouldTriggerClickOnEnterOrSpace","useIsomorphicLayoutEffect","FocusVisible","useTimeout","useExternRef","usePlatform","useFocusVisible","callMultiple","useBooleanState","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","none","pending","active","exiting","TappableContext","createContext","onHoverChange","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","TappableComponent","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","sizeX","hasMouse","deviceHasHover","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","props","href","useContext","insideTouchRoot","platform","focusVisible","onBlur","onFocus","clicks","setClicks","childHover","setChildHover","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","includes","isPresetActiveMode","isPresetFocusVisibleMode","containerRef","childContext","useRef","current","e","preventDefault","click","needWaves","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","top","left","onMove","isSlide","onEnd","duration","activeDuration","classes","handlers","role","undefined","map","wave","Tappable","displayName"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"../../lib/utils\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNames } from \"../../lib/classNames\";\nimport { IOS, ANDROID } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport { HasComponent, HasRootRef } from \"../../types\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport \"./Tappable.css\";\n\nconst WAVE_LIVE = 225;\n\nexport interface TappableProps\n extends Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n >,\n HasRootRef<HTMLElement>,\n AdaptivityProps,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: \"opacity\" | \"background\" | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: \"opacity\" | \"background\" | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\nconst TappableComponent = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n sizeX,\n hasMouse,\n deviceHasHover,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = deviceHasHover && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = [\"opacity\", \"background\"].includes(hoverMode);\n const isPresetActiveMode = [\"opacity\", \"background\"].includes(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === ANDROID &&\n !hasMouse &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n const classes = classNames(\n \"Tappable\",\n platform === IOS && \"Tappable--ios\",\n `Tappable--sizeX-${sizeX}`,\n hasHover && `Tappable--hasHover`,\n hasActive && `Tappable--hasActive`,\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n hasActive && active && \"Tappable--active\",\n hasMouse && \"Tappable--mouse\",\n hasHover && hovered && isPresetHoverMode && `Tappable--hover-${hoverMode}`,\n hasActive &&\n active &&\n isPresetActiveMode &&\n `Tappable--active-${activeMode}`,\n focusVisible && \"Tappable--focus-visible\"\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n vkuiClass={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__waves\">\n {clicks.map((wave) => (\n <span\n key={wave.id}\n vkuiClass=\"Tappable__wave\"\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {hasHover && hoverMode === \"background\" && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__hoverShadow\" />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = withAdaptivity(TappableComponent, {\n sizeX: true,\n hasMouse: true,\n deviceHasHover: true,\n});\n\nTappable.displayName = \"Tappable\";\n"],"file":"Tappable.js"}
@@ -1 +1 @@
1
- .vkuiTextarea{position:relative}.vkuiTextarea__el{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;box-sizing:border-box;color:#000;color:var(--text_primary,var(--vkui--color_text_primary));display:block;font-size:16px;font-size:var(--vkui--font_text--font_size--regular,16px);font-weight:400;font-weight:var(--vkui--font_text--font_weight--regular,400);line-height:20px;line-height:var(--vkui--font_text--line_height--regular,20px);margin:0;max-height:204px;padding:12px;position:relative;resize:none;width:100%;z-index:2}.vkuiTextarea__el[cols]{width:auto}.vkuiTextarea--sizeY-compact .vkuiTextarea__el{font-size:15px;font-size:var(--vkui--font_text--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_text--line_height--compact,20px);max-height:196px}.vkuiTextarea__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::-moz-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::-ms-input-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el:disabled{opacity:.64;opacity:var(--vkui--opacity_disable_accessibility,.64)}.vkuiTextarea__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::-moz-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::-ms-input-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}
1
+ .vkuiTextarea{position:relative}.vkuiTextarea__el{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;box-sizing:border-box;color:#000;color:var(--text_primary,var(--vkui--color_text_primary));display:block;font-size:16px;font-size:var(--vkui--font_text--font_size--regular,16px);font-weight:400;font-weight:var(--vkui--font_text--font_weight--regular,400);line-height:20px;line-height:var(--vkui--font_text--line_height--regular,20px);margin:0;max-height:204px;padding:12px;position:relative;resize:none;width:100%;z-index:6}.vkuiTextarea__el[cols]{width:auto}.vkuiTextarea--sizeY-compact .vkuiTextarea__el{font-size:15px;font-size:var(--vkui--font_text--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_text--line_height--compact,20px);max-height:196px}.vkuiTextarea__el::-webkit-input-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::-moz-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::-ms-input-placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el::placeholder{color:#818c99;color:var(--field_text_placeholder,var(--vkui--color_text_secondary));opacity:1}.vkuiTextarea__el:disabled{opacity:.64;opacity:var(--vkui--opacity_disable_accessibility,.64)}.vkuiTextarea__el:disabled::-webkit-input-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::-moz-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::-ms-input-placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}.vkuiTextarea__el:disabled::placeholder{color:#818c99;color:var(--text_secondary,var(--vkui--color_text_secondary))}
@@ -1,8 +1,9 @@
1
1
  import * as React from "react";
2
+ import { FormFieldProps } from "../FormField/FormField";
2
3
  import { HasRef, HasRootRef } from "../../types";
3
4
  import { AdaptivityProps } from "../../hoc/withAdaptivity";
4
5
  import "./Textarea.css";
5
- export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement>, HasRef<HTMLTextAreaElement>, HasRootRef<HTMLElement>, AdaptivityProps, Pick<React.CSSProperties, "maxHeight"> {
6
+ export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement>, HasRef<HTMLTextAreaElement>, HasRootRef<HTMLElement>, AdaptivityProps, Pick<React.CSSProperties, "maxHeight">, Pick<FormFieldProps, "status"> {
6
7
  grow?: boolean;
7
8
  onResize?(el: HTMLTextAreaElement): void;
8
9
  defaultValue?: string;
@@ -10,4 +11,4 @@ export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextArea
10
11
  /**
11
12
  * @see https://vkcom.github.io/VKUI/#/Textarea
12
13
  */
13
- export declare const Textarea: React.FC<Pick<TextareaProps, "required" | "disabled" | "hidden" | "dir" | "form" | "slot" | "style" | "title" | "color" | "wrap" | "maxHeight" | "translate" | "prefix" | "children" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "placeholder" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "value" | "autoFocus" | "autoComplete" | "maxLength" | "minLength" | "readOnly" | "cols" | "dirName" | "rows" | "getRootRef" | "getRef" | "grow" | "onResize"> & import("../AdaptivityProvider/AdaptivityContext").SizeProps>;
14
+ export declare const Textarea: React.FC<Pick<TextareaProps, "required" | "disabled" | "hidden" | "dir" | "form" | "slot" | "style" | "title" | "color" | "wrap" | "maxHeight" | "translate" | "prefix" | "children" | "className" | "id" | "lang" | "name" | "role" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "status" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "placeholder" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "value" | "autoFocus" | "autoComplete" | "maxLength" | "minLength" | "readOnly" | "cols" | "dirName" | "rows" | "getRootRef" | "getRef" | "grow" | "onResize"> & import("../AdaptivityProvider/AdaptivityContext").SizeProps>;
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
- var _excluded = ["defaultValue", "grow", "style", "onResize", "className", "getRootRef", "getRef", "sizeY", "rows", "maxHeight"];
4
+ var _excluded = ["defaultValue", "grow", "style", "onResize", "className", "getRootRef", "getRef", "sizeY", "rows", "maxHeight", "status"];
5
5
  import { createScopedElement } from "../../lib/jsxRuntime";
6
6
  import * as React from "react";
7
7
  import { classNames } from "../../lib/classNames";
@@ -25,6 +25,7 @@ var TextareaComponent = function TextareaComponent(_ref) {
25
25
  _ref$rows = _ref.rows,
26
26
  rows = _ref$rows === void 0 ? 2 : _ref$rows,
27
27
  maxHeight = _ref.maxHeight,
28
+ status = _ref.status,
28
29
  restProps = _objectWithoutProperties(_ref, _excluded);
29
30
 
30
31
  var _useEnsuredControl = useEnsuredControl(restProps, {
@@ -56,7 +57,8 @@ var TextareaComponent = function TextareaComponent(_ref) {
56
57
  className: className,
57
58
  style: style,
58
59
  getRootRef: getRootRef,
59
- disabled: restProps.disabled
60
+ disabled: restProps.disabled,
61
+ status: status
60
62
  }, createScopedElement("textarea", _extends({}, restProps, {
61
63
  style: {
62
64
  maxHeight: maxHeight
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Textarea/Textarea.tsx"],"names":["React","classNames","FormField","withAdaptivity","useEnsuredControl","useExternRef","TextareaComponent","defaultValue","grow","style","onResize","className","getRootRef","getRef","sizeY","rows","maxHeight","restProps","value","onChange","currentScrollHeight","useRef","elementRef","useEffect","el","current","offsetParent","height","scrollHeight","disabled","Textarea","displayName"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT;AACA,SAASC,SAAT;AAEA,SAASC,cAAT;AACA,SAASC,iBAAT;AACA,SAASC,YAAT;AACA;;AAaA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,OAYL;AAAA,+BAXnBC,YAWmB;AAAA,MAXnBA,YAWmB,kCAXJ,EAWI;AAAA,uBAVnBC,IAUmB;AAAA,MAVnBA,IAUmB,0BAVZ,IAUY;AAAA,MATnBC,KASmB,QATnBA,KASmB;AAAA,MARnBC,QAQmB,QARnBA,QAQmB;AAAA,MAPnBC,SAOmB,QAPnBA,SAOmB;AAAA,MANnBC,UAMmB,QANnBA,UAMmB;AAAA,MALnBC,MAKmB,QALnBA,MAKmB;AAAA,MAJnBC,KAImB,QAJnBA,KAImB;AAAA,uBAHnBC,IAGmB;AAAA,MAHnBA,IAGmB,0BAHZ,CAGY;AAAA,MAFnBC,SAEmB,QAFnBA,SAEmB;AAAA,MADhBC,SACgB;;AACnB,2BAA0Bb,iBAAiB,CAACa,SAAD,EAAY;AAAEV,IAAAA,YAAY,EAAZA;AAAF,GAAZ,CAA3C;AAAA;AAAA,MAAOW,KAAP;AAAA,MAAcC,QAAd;;AACA,MAAMC,mBAAmB,GAAGpB,KAAK,CAACqB,MAAN,EAA5B;AACA,MAAMC,UAAU,GAAGjB,YAAY,CAACQ,MAAD,CAA/B,CAHmB,CAKnB;;AACAb,EAAAA,KAAK,CAACuB,SAAN,CAAgB,YAAM;AACpB,QAAMC,EAAE,GAAGF,UAAU,CAACG,OAAtB;;AAEA,QAAIjB,IAAI,IAAIgB,EAAJ,aAAIA,EAAJ,eAAIA,EAAE,CAAEE,YAAhB,EAA8B;AAC5BF,MAAAA,EAAE,CAACf,KAAH,CAASkB,MAAT,GAAkB,EAAlB;AACAH,MAAAA,EAAE,CAACf,KAAH,CAASkB,MAAT,aAAqBH,EAAE,CAACI,YAAxB;;AAEA,UAAIJ,EAAE,CAACI,YAAH,KAAoBR,mBAAmB,CAACK,OAAxC,IAAmDf,QAAvD,EAAiE;AAC/DA,QAAAA,QAAQ,CAACc,EAAD,CAAR;AACAJ,QAAAA,mBAAmB,CAACK,OAApB,GAA8BD,EAAE,CAACI,YAAjC;AACD;AACF;AACF,GAZD,EAYG,CAACpB,IAAD,EAAOU,KAAP,EAAcJ,KAAd,EAAqBQ,UAArB,EAAiCZ,QAAjC,CAZH;AAcA,SACE,oBAAC,SAAD;AACE,IAAA,SAAS,EAAET,UAAU,CACnB,UADmB,EAEnB;AAFmB,8BAGAa,KAHA,EADvB;AAME,IAAA,SAAS,EAAEH,SANb;AAOE,IAAA,KAAK,EAAEF,KAPT;AAQE,IAAA,UAAU,EAAEG,UARd;AASE,IAAA,QAAQ,EAAEK,SAAS,CAACY;AATtB,KAWE,6CACMZ,SADN;AAEE,IAAA,KAAK,EAAE;AAAED,MAAAA,SAAS,EAATA;AAAF,KAFT;AAGE,IAAA,IAAI,EAAED,IAHR;AAIE,IAAA,SAAS,EAAC,cAJZ;AAKE,IAAA,KAAK,EAAEG,KALT;AAME,IAAA,QAAQ,EAAEC,QANZ;AAOE,IAAA,GAAG,EAAEG;AAPP,KAXF,CADF;AAuBD,CAvDD;AAyDA;AACA;AACA;;;AACA,OAAO,IAAMQ,QAAQ,GAAG3B,cAAc,CAACG,iBAAD,EAAoB;AAAEQ,EAAAA,KAAK,EAAE;AAAT,CAApB,CAA/B;AAEPgB,QAAQ,CAACC,WAAT,GAAuB,UAAvB","sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { FormField } from \"../FormField/FormField\";\nimport { HasRef, HasRootRef } from \"../../types\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { useEnsuredControl } from \"../../hooks/useEnsuredControl\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport \"./Textarea.css\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HasRef<HTMLTextAreaElement>,\n HasRootRef<HTMLElement>,\n AdaptivityProps,\n Pick<React.CSSProperties, \"maxHeight\"> {\n grow?: boolean;\n onResize?(el: HTMLTextAreaElement): void;\n defaultValue?: string;\n}\n\nconst TextareaComponent = ({\n defaultValue = \"\",\n grow = true,\n style,\n onResize,\n className,\n getRootRef,\n getRef,\n sizeY,\n rows = 2,\n maxHeight,\n ...restProps\n}: TextareaProps) => {\n const [value, onChange] = useEnsuredControl(restProps, { defaultValue });\n const currentScrollHeight = React.useRef<number>();\n const elementRef = useExternRef(getRef);\n\n // autosize input\n React.useEffect(() => {\n const el = elementRef.current;\n\n if (grow && el?.offsetParent) {\n el.style.height = \"\";\n el.style.height = `${el.scrollHeight}px`;\n\n if (el.scrollHeight !== currentScrollHeight.current && onResize) {\n onResize(el);\n currentScrollHeight.current = el.scrollHeight;\n }\n }\n }, [grow, value, sizeY, elementRef, onResize]);\n\n return (\n <FormField\n vkuiClass={classNames(\n \"Textarea\",\n // TODO. v5.0.0 Новая адаптивность\n `Textarea--sizeY-${sizeY}`\n )}\n className={className}\n style={style}\n getRootRef={getRootRef}\n disabled={restProps.disabled}\n >\n <textarea\n {...restProps}\n style={{ maxHeight }}\n rows={rows}\n vkuiClass=\"Textarea__el\"\n value={value}\n onChange={onChange}\n ref={elementRef}\n />\n </FormField>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Textarea\n */\nexport const Textarea = withAdaptivity(TextareaComponent, { sizeY: true });\n\nTextarea.displayName = \"Textarea\";\n"],"file":"Textarea.js"}
1
+ {"version":3,"sources":["../../../../src/components/Textarea/Textarea.tsx"],"names":["React","classNames","FormField","withAdaptivity","useEnsuredControl","useExternRef","TextareaComponent","defaultValue","grow","style","onResize","className","getRootRef","getRef","sizeY","rows","maxHeight","status","restProps","value","onChange","currentScrollHeight","useRef","elementRef","useEffect","el","current","offsetParent","height","scrollHeight","disabled","Textarea","displayName"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT;AACA,SAASC,SAAT;AAEA,SAASC,cAAT;AACA,SAASC,iBAAT;AACA,SAASC,YAAT;AACA;;AAcA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,OAaL;AAAA,+BAZnBC,YAYmB;AAAA,MAZnBA,YAYmB,kCAZJ,EAYI;AAAA,uBAXnBC,IAWmB;AAAA,MAXnBA,IAWmB,0BAXZ,IAWY;AAAA,MAVnBC,KAUmB,QAVnBA,KAUmB;AAAA,MATnBC,QASmB,QATnBA,QASmB;AAAA,MARnBC,SAQmB,QARnBA,SAQmB;AAAA,MAPnBC,UAOmB,QAPnBA,UAOmB;AAAA,MANnBC,MAMmB,QANnBA,MAMmB;AAAA,MALnBC,KAKmB,QALnBA,KAKmB;AAAA,uBAJnBC,IAImB;AAAA,MAJnBA,IAImB,0BAJZ,CAIY;AAAA,MAHnBC,SAGmB,QAHnBA,SAGmB;AAAA,MAFnBC,MAEmB,QAFnBA,MAEmB;AAAA,MADhBC,SACgB;;AACnB,2BAA0Bd,iBAAiB,CAACc,SAAD,EAAY;AAAEX,IAAAA,YAAY,EAAZA;AAAF,GAAZ,CAA3C;AAAA;AAAA,MAAOY,KAAP;AAAA,MAAcC,QAAd;;AACA,MAAMC,mBAAmB,GAAGrB,KAAK,CAACsB,MAAN,EAA5B;AACA,MAAMC,UAAU,GAAGlB,YAAY,CAACQ,MAAD,CAA/B,CAHmB,CAKnB;;AACAb,EAAAA,KAAK,CAACwB,SAAN,CAAgB,YAAM;AACpB,QAAMC,EAAE,GAAGF,UAAU,CAACG,OAAtB;;AAEA,QAAIlB,IAAI,IAAIiB,EAAJ,aAAIA,EAAJ,eAAIA,EAAE,CAAEE,YAAhB,EAA8B;AAC5BF,MAAAA,EAAE,CAAChB,KAAH,CAASmB,MAAT,GAAkB,EAAlB;AACAH,MAAAA,EAAE,CAAChB,KAAH,CAASmB,MAAT,aAAqBH,EAAE,CAACI,YAAxB;;AAEA,UAAIJ,EAAE,CAACI,YAAH,KAAoBR,mBAAmB,CAACK,OAAxC,IAAmDhB,QAAvD,EAAiE;AAC/DA,QAAAA,QAAQ,CAACe,EAAD,CAAR;AACAJ,QAAAA,mBAAmB,CAACK,OAApB,GAA8BD,EAAE,CAACI,YAAjC;AACD;AACF;AACF,GAZD,EAYG,CAACrB,IAAD,EAAOW,KAAP,EAAcL,KAAd,EAAqBS,UAArB,EAAiCb,QAAjC,CAZH;AAcA,SACE,oBAAC,SAAD;AACE,IAAA,SAAS,EAAET,UAAU,CACnB,UADmB,EAEnB;AAFmB,8BAGAa,KAHA,EADvB;AAME,IAAA,SAAS,EAAEH,SANb;AAOE,IAAA,KAAK,EAAEF,KAPT;AAQE,IAAA,UAAU,EAAEG,UARd;AASE,IAAA,QAAQ,EAAEM,SAAS,CAACY,QATtB;AAUE,IAAA,MAAM,EAAEb;AAVV,KAYE,6CACMC,SADN;AAEE,IAAA,KAAK,EAAE;AAAEF,MAAAA,SAAS,EAATA;AAAF,KAFT;AAGE,IAAA,IAAI,EAAED,IAHR;AAIE,IAAA,SAAS,EAAC,cAJZ;AAKE,IAAA,KAAK,EAAEI,KALT;AAME,IAAA,QAAQ,EAAEC,QANZ;AAOE,IAAA,GAAG,EAAEG;AAPP,KAZF,CADF;AAwBD,CAzDD;AA2DA;AACA;AACA;;;AACA,OAAO,IAAMQ,QAAQ,GAAG5B,cAAc,CAACG,iBAAD,EAAoB;AAAEQ,EAAAA,KAAK,EAAE;AAAT,CAApB,CAA/B;AAEPiB,QAAQ,CAACC,WAAT,GAAuB,UAAvB","sourcesContent":["import * as React from \"react\";\nimport { classNames } from \"../../lib/classNames\";\nimport { FormField, FormFieldProps } from \"../FormField/FormField\";\nimport { HasRef, HasRootRef } from \"../../types\";\nimport { withAdaptivity, AdaptivityProps } from \"../../hoc/withAdaptivity\";\nimport { useEnsuredControl } from \"../../hooks/useEnsuredControl\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport \"./Textarea.css\";\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HasRef<HTMLTextAreaElement>,\n HasRootRef<HTMLElement>,\n AdaptivityProps,\n Pick<React.CSSProperties, \"maxHeight\">,\n Pick<FormFieldProps, \"status\"> {\n grow?: boolean;\n onResize?(el: HTMLTextAreaElement): void;\n defaultValue?: string;\n}\n\nconst TextareaComponent = ({\n defaultValue = \"\",\n grow = true,\n style,\n onResize,\n className,\n getRootRef,\n getRef,\n sizeY,\n rows = 2,\n maxHeight,\n status,\n ...restProps\n}: TextareaProps) => {\n const [value, onChange] = useEnsuredControl(restProps, { defaultValue });\n const currentScrollHeight = React.useRef<number>();\n const elementRef = useExternRef(getRef);\n\n // autosize input\n React.useEffect(() => {\n const el = elementRef.current;\n\n if (grow && el?.offsetParent) {\n el.style.height = \"\";\n el.style.height = `${el.scrollHeight}px`;\n\n if (el.scrollHeight !== currentScrollHeight.current && onResize) {\n onResize(el);\n currentScrollHeight.current = el.scrollHeight;\n }\n }\n }, [grow, value, sizeY, elementRef, onResize]);\n\n return (\n <FormField\n vkuiClass={classNames(\n \"Textarea\",\n // TODO. v5.0.0 Новая адаптивность\n `Textarea--sizeY-${sizeY}`\n )}\n className={className}\n style={style}\n getRootRef={getRootRef}\n disabled={restProps.disabled}\n status={status}\n >\n <textarea\n {...restProps}\n style={{ maxHeight }}\n rows={rows}\n vkuiClass=\"Textarea__el\"\n value={value}\n onChange={onChange}\n ref={elementRef}\n />\n </FormField>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Textarea\n */\nexport const Textarea = withAdaptivity(TextareaComponent, { sizeY: true });\n\nTextarea.displayName = \"Textarea\";\n"],"file":"Textarea.js"}
@@ -1 +1 @@
1
- .vkuiHeadline{display:block;margin:0}.vkuiHeadline--l-1{font-size:16px;font-size:var(--vkui--font_headline1--font_size--regular,16px);font-weight:500;font-weight:var(--vkui--font_headline1--font_weight--regular,500);line-height:20px;line-height:var(--vkui--font_headline1--line_height--regular,20px)}.vkuiHeadline--l-2{font-size:15px;font-size:var(--vkui--font_headline2--font_size--regular,15px);font-weight:500;font-weight:var(--vkui--font_headline2--font_weight--regular,500);line-height:20px;line-height:var(--vkui--font_headline2--line_height--regular,20px)}.vkuiHeadline--sizeY-compact.vkuiHeadline--l-1{font-size:15px;font-size:var(--vkui--font_headline1--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_headline1--line_height--compact,20px)}.vkuiHeadline--sizeY-compact.vkuiHeadline--l-2{font-size:14px;font-size:var(--vkui--font_headline2--font_size--compact,14px);line-height:20px;line-height:var(--vkui--font_headline2--line_height--compact,20px)}.vkuiHeadline--w-regular{font-weight:400}.vkuiHeadline--w-medium{font-weight:500}.vkuiHeadline--w-semibold{font-weight:600}.vkuiHeadline--android.vkuiHeadline--w-semibold{font-weight:500}.vkuiHeadline--w-1{font-weight:600;font-weight:var(--vkui--font_weight_accent1,600)}.vkuiHeadline--w-2{font-weight:500;font-weight:var(--vkui--font_weight_accent2,500)}.vkuiHeadline--w-3{font-weight:400;font-weight:var(--vkui--font_weight_accent3,400)}
1
+ .vkuiHeadline{display:block;margin:0}.vkuiHeadline--l-1{font-size:16px;font-size:var(--vkui--font_headline1--font_size--regular,16px);font-weight:500;font-weight:var(--vkui--font_headline1--font_weight--regular,500);line-height:20px;line-height:var(--vkui--font_headline1--line_height--regular,20px)}.vkuiHeadline--l-2{font-size:15px;font-size:var(--vkui--font_headline2--font_size--regular,15px);font-weight:500;font-weight:var(--vkui--font_headline2--font_weight--regular,500);line-height:20px;line-height:var(--vkui--font_headline2--line_height--regular,20px)}.vkuiHeadline--sizeY-compact.vkuiHeadline--l-1{font-size:15px;font-size:var(--vkui--font_headline1--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_headline1--line_height--compact,20px)}.vkuiHeadline--sizeY-compact.vkuiHeadline--l-2{font-size:14px;font-size:var(--vkui--font_headline2--font_size--compact,14px);line-height:20px;line-height:var(--vkui--font_headline2--line_height--compact,20px)}.vkuiHeadline--w-regular{font-weight:400}.vkuiHeadline--w-medium{font-weight:500}.vkuiHeadline--w-semibold{font-weight:600}.vkuiHeadline--android.vkuiHeadline--w-semibold{font-weight:500}.vkuiHeadline--w-1{font-weight:600;font-weight:var(--vkui--font_weight_accent1,600)}.vkuiHeadline--w-2{font-weight:500;font-weight:var(--vkui--font_weight_accent2,500)}.vkuiHeadline--w-3{font-weight:400;font-weight:var(--vkui--font_weight_accent3,400)}.vkuiPanelHeaderContent__children .vkuiHeadline{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@@ -1 +1 @@
1
- .vkuiText{display:block;font-size:16px;font-size:var(--vkui--font_text--font_size--regular,16px);font-weight:400;font-weight:var(--vkui--font_text--font_weight--regular,400);line-height:20px;line-height:var(--vkui--font_text--line_height--regular,20px);margin:0}.vkuiText--sizeY-compact{font-size:15px;font-size:var(--vkui--font_text--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_text--line_height--compact,20px)}.vkuiText--w-regular{font-weight:400}.vkuiText--w-medium{font-weight:500}.vkuiText--w-1,.vkuiText--w-semibold{font-weight:600}.vkuiText--w-1{font-weight:var(--vkui--font_weight_accent1,600)}.vkuiText--w-2{font-weight:500;font-weight:var(--vkui--font_weight_accent2,500)}.vkuiText--w-3{font-weight:400;font-weight:var(--vkui--font_weight_accent3,400)}
1
+ .vkuiText{display:block;font-size:16px;font-size:var(--vkui--font_text--font_size--regular,16px);font-weight:400;font-weight:var(--vkui--font_text--font_weight--regular,400);line-height:20px;line-height:var(--vkui--font_text--line_height--regular,20px);margin:0}.vkuiText--sizeY-compact{font-size:15px;font-size:var(--vkui--font_text--font_size--compact,15px);line-height:20px;line-height:var(--vkui--font_text--line_height--compact,20px)}.vkuiText--w-regular{font-weight:400}.vkuiText--w-medium{font-weight:500}.vkuiText--w-1,.vkuiText--w-semibold{font-weight:600}.vkuiText--w-1{font-weight:var(--vkui--font_weight_accent1,600)}.vkuiText--w-2{font-weight:500;font-weight:var(--vkui--font_weight_accent2,500)}.vkuiText--w-3{font-weight:400;font-weight:var(--vkui--font_weight_accent3,400)}.vkuiPanelHeaderContent__children .vkuiText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@@ -2,4 +2,4 @@
2
2
  --placeholder_icon_background,var(--vkui--color_image_placeholder_alpha)
3
3
  )}.vkuiUsersStack__photo--others{align-items:center;background:#99a2ad;background:var(
4
4
  --content_placeholder_icon,var(--vkui--color_icon_secondary)
5
- );border-radius:50%;color:#f2f3f5;color:var(--vkui--color_icon_contrast_secondary,#f2f3f5);display:flex;justify-content:center}.vkuiUsersStack--size-xs .vkuiUsersStack__photo{height:16px;width:16px}.vkuiUsersStack--size-s .vkuiUsersStack__photo{height:24px;width:24px}.vkuiUsersStack--size-m .vkuiUsersStack__photo{height:32px;width:32px}.vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-2px}.vkuiUsersStack__text{flex:1;margin:0 0 0 8px;min-width:0}.vkuiUsersStack--l-vertical{flex-direction:column;justify-content:center}.vkuiUsersStack--l-vertical .vkuiUsersStack__text{margin:8px 0 0;text-align:center}.vkuiModalCardBase .vkuiUsersStack{margin-top:20px}
5
+ );border-radius:50%;color:#f2f3f5;color:var(--vkui--color_icon_contrast_secondary,#f2f3f5);display:flex;justify-content:center}.vkuiUsersStack--size-xs .vkuiUsersStack__photo{height:16px;width:16px}.vkuiUsersStack--size-s .vkuiUsersStack__photo{height:24px;width:24px}.vkuiUsersStack--size-m .vkuiUsersStack__photo{height:32px;width:32px}.vkuiUsersStack__photo+.vkuiUsersStack__photo{margin-left:-2px}.vkuiUsersStack__text{flex:1;margin:0 0 0 8px;min-width:0}.vkuiUsersStack--l-vertical{flex-direction:column;justify-content:center}.vkuiUsersStack--l-vertical .vkuiUsersStack__text{margin:8px 0 0;text-align:center}.vkuiModalCardBase .vkuiUsersStack{margin-top:20px}.vkuiUsersStack__mask--16-left{-webkit-clip-path:path("M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285");clip-path:path("M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285")}.vkuiUsersStack__mask--16-circle{-webkit-clip-path:circle(8px);clip-path:circle(8px)}.vkuiUsersStack__mask--24-left{-webkit-clip-path:path("M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625");clip-path:path("M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625")}.vkuiUsersStack__mask--24-circle{-webkit-clip-path:circle(12px);clip-path:circle(12px)}.vkuiUsersStack__mask--24-right{-webkit-clip-path:path("M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625");clip-path:path("M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625")}.vkuiUsersStack__mask--32-left{-webkit-clip-path:path("M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75");clip-path:path("M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75")}.vkuiUsersStack__mask--32-circle{-webkit-clip-path:circle(16px);clip-path:circle(16px)}.vkuiUsersStack__mask--32-right{-webkit-clip-path:path("M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75");clip-path:path("M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75")}
@@ -1,37 +1,78 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["photos", "visibleCount", "size", "layout", "children"];
3
+ var _excluded = ["photoSize", "direction"],
4
+ _excluded2 = ["photos", "visibleCount", "size", "layout", "children"];
4
5
  import { createScopedElement } from "../../lib/jsxRuntime";
5
6
  import { hasReactNode } from "../../lib/utils";
6
7
  import { classNames } from "../../lib/classNames";
7
- import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
8
8
  import { Footnote } from "../Typography/Footnote/Footnote";
9
9
  import { Caption } from "../Typography/Caption/Caption";
10
- import { createMasks } from "./masks";
11
- import { useDOM } from "../../lib/dom";
12
10
  import "./UsersStack.css";
13
11
 
12
+ function PathElement(_ref) {
13
+ var photoSize = _ref.photoSize,
14
+ direction = _ref.direction,
15
+ props = _objectWithoutProperties(_ref, _excluded);
16
+
17
+ switch (direction) {
18
+ case "circle":
19
+ var radius = photoSize / 2;
20
+ return createScopedElement("circle", _extends({
21
+ cx: radius,
22
+ cy: radius,
23
+ r: radius
24
+ }, props));
25
+
26
+ case "right":
27
+ switch (photoSize) {
28
+ case 24:
29
+ return createScopedElement("path", _extends({
30
+ d: "M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625"
31
+ }, props));
32
+
33
+ default:
34
+ return createScopedElement("path", _extends({
35
+ d: "M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75"
36
+ }, props));
37
+ }
38
+
39
+ default:
40
+ switch (photoSize) {
41
+ case 16:
42
+ return createScopedElement("path", _extends({
43
+ d: "M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285"
44
+ }, props));
45
+
46
+ case 24:
47
+ return createScopedElement("path", _extends({
48
+ d: "M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625"
49
+ }, props));
50
+
51
+ default:
52
+ return createScopedElement("path", _extends({
53
+ d: "M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75"
54
+ }, props));
55
+ }
56
+
57
+ }
58
+ }
14
59
  /**
15
60
  * @see https://vkcom.github.io/VKUI/#/UsersStack
16
61
  */
17
- export var UsersStack = function UsersStack(_ref) {
18
- var _ref$photos = _ref.photos,
19
- photos = _ref$photos === void 0 ? [] : _ref$photos,
20
- _ref$visibleCount = _ref.visibleCount,
21
- visibleCount = _ref$visibleCount === void 0 ? 3 : _ref$visibleCount,
22
- _ref$size = _ref.size,
23
- size = _ref$size === void 0 ? "s" : _ref$size,
24
- _ref$layout = _ref.layout,
25
- layout = _ref$layout === void 0 ? "horizontal" : _ref$layout,
26
- children = _ref.children,
27
- restProps = _objectWithoutProperties(_ref, _excluded);
28
62
 
29
- var _useDOM = useDOM(),
30
- document = _useDOM.document;
31
63
 
32
- useIsomorphicLayoutEffect(function () {
33
- createMasks(document);
34
- }, [document]);
64
+ export var UsersStack = function UsersStack(_ref2) {
65
+ var _ref2$photos = _ref2.photos,
66
+ photos = _ref2$photos === void 0 ? [] : _ref2$photos,
67
+ _ref2$visibleCount = _ref2.visibleCount,
68
+ visibleCount = _ref2$visibleCount === void 0 ? 3 : _ref2$visibleCount,
69
+ _ref2$size = _ref2.size,
70
+ size = _ref2$size === void 0 ? "s" : _ref2$size,
71
+ _ref2$layout = _ref2.layout,
72
+ layout = _ref2$layout === void 0 ? "horizontal" : _ref2$layout,
73
+ children = _ref2.children,
74
+ restProps = _objectWithoutProperties(_ref2, _excluded2);
75
+
35
76
  var othersCount = Math.max(0, photos.length - visibleCount);
36
77
  var canShowOthers = othersCount > 0 && size !== "xs";
37
78
  var CounterTypography = size === "m" ? Footnote : Caption;
@@ -49,24 +90,24 @@ export var UsersStack = function UsersStack(_ref) {
49
90
  role: "presentation"
50
91
  }, photosShown.map(function (photo, i) {
51
92
  var direction = i === 0 && !canShowOthers ? "circle" : directionClip;
52
- var pathHref = "#users_stack_".concat(photoSize, "_").concat(direction);
53
- var clipPathHref = "url(#users_stack_mask_".concat(photoSize, "_").concat(direction, ")");
54
93
  return createScopedElement("svg", {
55
94
  xmlns: "http://www.w3.org/2000/svg",
56
95
  vkuiClass: "UsersStack__photo",
57
96
  key: i,
58
97
  "aria-hidden": true
59
98
  }, createScopedElement("g", {
60
- clipPath: clipPathHref
61
- }, createScopedElement("use", {
62
- vkuiClass: "UsersStack__fill",
63
- href: pathHref
99
+ vkuiClass: "UsersStack__mask--".concat(photoSize, "-").concat(direction)
100
+ }, createScopedElement(PathElement, {
101
+ direction: direction,
102
+ photoSize: photoSize,
103
+ vkuiClass: "UsersStack__fill"
64
104
  }), createScopedElement("image", {
65
105
  href: photo,
66
106
  width: photoSize,
67
107
  height: photoSize
68
- }), createScopedElement("use", {
69
- href: pathHref,
108
+ }), createScopedElement(PathElement, {
109
+ direction: direction,
110
+ photoSize: photoSize,
70
111
  fill: "none",
71
112
  stroke: "rgba(0, 0, 0, 0.08)"
72
113
  })));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/UsersStack/UsersStack.tsx"],"names":["hasReactNode","classNames","useIsomorphicLayoutEffect","Footnote","Caption","createMasks","useDOM","UsersStack","photos","visibleCount","size","layout","children","restProps","document","othersCount","Math","max","length","canShowOthers","CounterTypography","photoSize","xs","s","m","directionClip","photosShown","slice","map","photo","i","direction","pathHref","clipPathHref"],"mappings":";;;;AACA,SAASA,YAAT;AACA,SAASC,UAAT;AACA,SAASC,yBAAT;AACA,SAASC,QAAT;AACA,SAASC,OAAT;AACA,SAASC,WAAT;AACA,SAASC,MAAT;AACA;;AAsBA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAa,OAOH;AAAA,yBANrBC,MAMqB;AAAA,MANrBA,MAMqB,4BANZ,EAMY;AAAA,+BALrBC,YAKqB;AAAA,MALrBA,YAKqB,kCALN,CAKM;AAAA,uBAJrBC,IAIqB;AAAA,MAJrBA,IAIqB,0BAJd,GAIc;AAAA,yBAHrBC,MAGqB;AAAA,MAHrBA,MAGqB,4BAHZ,YAGY;AAAA,MAFrBC,QAEqB,QAFrBA,QAEqB;AAAA,MADlBC,SACkB;;AACrB,gBAAqBP,MAAM,EAA3B;AAAA,MAAQQ,QAAR,WAAQA,QAAR;;AAEAZ,EAAAA,yBAAyB,CAAC,YAAM;AAC9BG,IAAAA,WAAW,CAACS,QAAD,CAAX;AACD,GAFwB,EAEtB,CAACA,QAAD,CAFsB,CAAzB;AAIA,MAAMC,WAAW,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYT,MAAM,CAACU,MAAP,GAAgBT,YAA5B,CAApB;AACA,MAAMU,aAAa,GAAGJ,WAAW,GAAG,CAAd,IAAmBL,IAAI,KAAK,IAAlD;AACA,MAAMU,iBAAiB,GAAGV,IAAI,KAAK,GAAT,GAAeP,QAAf,GAA0BC,OAApD;AAEA,MAAMiB,SAAS,GAAG;AAChBC,IAAAA,EAAE,EAAE,EADY;AAEhBC,IAAAA,CAAC,EAAE,EAFa;AAGhBC,IAAAA,CAAC,EAAE;AAHa,IAIhBd,IAJgB,CAAlB;AAKA,MAAMe,aAAa,GAAGN,aAAa,GAAG,OAAH,GAAa,MAAhD;AAEA,MAAMO,WAAW,GAAGlB,MAAM,CAACmB,KAAP,CAAa,CAAb,EAAgBlB,YAAhB,CAApB;AAEA,SACE,wCACMI,SADN;AAEE,IAAA,SAAS,EAAEZ,UAAU,CACnB,YADmB,6BAECS,IAFD,2BAGFC,MAHE,GAInBQ,aAAa,IAAI,oBAJE;AAFvB,MASE;AAAK,IAAA,SAAS,EAAC,oBAAf;AAAoC,IAAA,IAAI,EAAC;AAAzC,KACGO,WAAW,CAACE,GAAZ,CAAgB,UAACC,KAAD,EAAQC,CAAR,EAAc;AAC7B,QAAMC,SAAS,GACbD,CAAC,KAAK,CAAN,IAAW,CAACX,aAAZ,GAA4B,QAA5B,GAAuCM,aADzC;AAGA,QAAMO,QAAQ,0BAAmBX,SAAnB,cAAgCU,SAAhC,CAAd;AACA,QAAME,YAAY,mCAA4BZ,SAA5B,cAAyCU,SAAzC,MAAlB;AAEA,WACE;AACE,MAAA,KAAK,EAAC,4BADR;AAEE,MAAA,SAAS,EAAC,mBAFZ;AAGE,MAAA,GAAG,EAAED,CAHP;AAIE;AAJF,OAME;AAAG,MAAA,QAAQ,EAAEG;AAAb,OACE;AAAK,MAAA,SAAS,EAAC,kBAAf;AAAkC,MAAA,IAAI,EAAED;AAAxC,MADF,EAEE;AAAO,MAAA,IAAI,EAAEH,KAAb;AAAoB,MAAA,KAAK,EAAER,SAA3B;AAAsC,MAAA,MAAM,EAAEA;AAA9C,MAFF,EAGE;AAAK,MAAA,IAAI,EAAEW,QAAX;AAAqB,MAAA,IAAI,EAAC,MAA1B;AAAiC,MAAA,MAAM,EAAC;AAAxC,MAHF,CANF,CADF;AAcD,GArBA,CADH,EAwBGb,aAAa,IACZ,oBAAC,iBAAD;AACE,IAAA,IAAI,MADN;AAEE,IAAA,MAAM,EAAC,GAFT;AAGE,IAAA,KAAK,EAAC,GAHR,CAGY;AAHZ;AAIE,IAAA,SAAS,EAAC,6CAJZ;AAKE;AALF,KAOE,uCAAQJ,WAAR,CAPF,CAzBJ,CATF,EA6CGf,YAAY,CAACY,QAAD,CAAZ,IACC,oBAAC,QAAD;AAAU,IAAA,SAAS,EAAC;AAApB,KAAwCA,QAAxC,CA9CJ,CADF;AAmDD,CA9EM","sourcesContent":["import * as React from \"react\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { createMasks } from \"./masks\";\nimport { useDOM } from \"../../lib/dom\";\nimport \"./UsersStack.css\";\n\nexport interface UsersStackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Массив ссылок на фотографии\n */\n photos?: string[];\n /**\n * Размер аватарок\n */\n size?: \"xs\" | \"s\" | \"m\"; // TODO: \"s\" | \"m\" | \"l\"\n /**\n * Вертикальный режим рекомендуется использовать с размером `m`\n */\n layout?: \"vertical\" | \"horizontal\";\n /**\n * Количество аватарок, которые будут показаны.\n * Если в массиве `photos` больше элементов и используется размер `m`, то будет показано количество остальных элементов\n */\n visibleCount?: number;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/UsersStack\n */\nexport const UsersStack = ({\n photos = [],\n visibleCount = 3,\n size = \"s\",\n layout = \"horizontal\",\n children,\n ...restProps\n}: UsersStackProps) => {\n const { document } = useDOM();\n\n useIsomorphicLayoutEffect(() => {\n createMasks(document);\n }, [document]);\n\n const othersCount = Math.max(0, photos.length - visibleCount);\n const canShowOthers = othersCount > 0 && size !== \"xs\";\n const CounterTypography = size === \"m\" ? Footnote : Caption;\n\n const photoSize = {\n xs: 16,\n s: 24,\n m: 32,\n }[size];\n const directionClip = canShowOthers ? \"right\" : \"left\";\n\n const photosShown = photos.slice(0, visibleCount);\n\n return (\n <div\n {...restProps}\n vkuiClass={classNames(\n \"UsersStack\",\n `UsersStack--size-${size}`,\n `UsersStack--l-${layout}`,\n canShowOthers && \"UsersStack--others\"\n )}\n >\n <div vkuiClass=\"UsersStack__photos\" role=\"presentation\">\n {photosShown.map((photo, i) => {\n const direction =\n i === 0 && !canShowOthers ? \"circle\" : directionClip;\n\n const pathHref = `#users_stack_${photoSize}_${direction}`;\n const clipPathHref = `url(#users_stack_mask_${photoSize}_${direction})`;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n vkuiClass=\"UsersStack__photo\"\n key={i}\n aria-hidden\n >\n <g clipPath={clipPathHref}>\n <use vkuiClass=\"UsersStack__fill\" href={pathHref} />\n <image href={photo} width={photoSize} height={photoSize} />\n <use href={pathHref} fill=\"none\" stroke=\"rgba(0, 0, 0, 0.08)\" />\n </g>\n </svg>\n );\n })}\n\n {canShowOthers && (\n <CounterTypography\n caps\n weight=\"1\"\n level=\"2\" // TODO: remove only level in #2343\n vkuiClass=\"UsersStack__photo UsersStack__photo--others\"\n aria-hidden\n >\n <span>+{othersCount}</span>\n </CounterTypography>\n )}\n </div>\n {hasReactNode(children) && (\n <Footnote vkuiClass=\"UsersStack__text\">{children}</Footnote>\n )}\n </div>\n );\n};\n"],"file":"UsersStack.js"}
1
+ {"version":3,"sources":["../../../../src/components/UsersStack/UsersStack.tsx"],"names":["hasReactNode","classNames","Footnote","Caption","PathElement","photoSize","direction","props","radius","UsersStack","photos","visibleCount","size","layout","children","restProps","othersCount","Math","max","length","canShowOthers","CounterTypography","xs","s","m","directionClip","photosShown","slice","map","photo","i"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { classNames } from \"../../lib/classNames\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport \"./UsersStack.css\";\n\nexport interface UsersStackProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Массив ссылок на фотографии\n */\n photos?: string[];\n /**\n * Размер аватарок\n */\n size?: \"xs\" | \"s\" | \"m\"; // TODO: \"s\" | \"m\" | \"l\"\n /**\n * Вертикальный режим рекомендуется использовать с размером `m`\n */\n layout?: \"vertical\" | \"horizontal\";\n /**\n * Количество аватарок, которые будут показаны.\n * Если в массиве `photos` больше элементов и используется размер `m`, то будет показано количество остальных элементов\n */\n visibleCount?: number;\n}\n\ninterface PathElementProps extends React.SVGAttributes<SVGElement> {\n photoSize: number;\n direction: \"circle\" | \"right\" | \"left\";\n}\n\nfunction PathElement({ photoSize, direction, ...props }: PathElementProps) {\n switch (direction) {\n case \"circle\":\n const radius = photoSize / 2;\n\n return <circle cx={radius} cy={radius} r={radius} {...props} />;\n\n case \"right\":\n switch (photoSize) {\n case 24:\n return (\n <path\n d=\"M22,18.625A12 12 0 0 1 12 24A12 12 0 0 1 12 0A12 12 0 0 1 22 5.375A12 12 0 0 0 22,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M30,23.75A16 16 0 0 1 16 32A16 16 0 0 1 16 0A16 16 0 0 1 30 8.25A16 16 0 0 0 30,23.75\"\n {...props}\n />\n );\n }\n\n default:\n switch (photoSize) {\n case 16:\n return (\n <path\n d=\"M2,13.285A8 8 0 0 0 8 16A8 8 0 0 0 8 0A8 8 0 0 0 2 2.715A8 8 0 0 1 2,13.285\"\n {...props}\n />\n );\n case 24:\n return (\n <path\n d=\"M2,18.625A12 12 0 0 0 12 24A12 12 0 0 0 12 0A12 12 0 0 0 2 5.375A12 12 0 0 1 2,18.625\"\n {...props}\n />\n );\n\n default:\n return (\n <path\n d=\"M2,23.75A16 16 0 0 0 16 32A16 16 0 0 0 16 0A16 16 0 0 0 2 8.25A16 16 0 0 1 2,23.75\"\n {...props}\n />\n );\n }\n }\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/UsersStack\n */\nexport const UsersStack = ({\n photos = [],\n visibleCount = 3,\n size = \"s\",\n layout = \"horizontal\",\n children,\n ...restProps\n}: UsersStackProps) => {\n const othersCount = Math.max(0, photos.length - visibleCount);\n const canShowOthers = othersCount > 0 && size !== \"xs\";\n const CounterTypography = size === \"m\" ? Footnote : Caption;\n\n const photoSize = {\n xs: 16,\n s: 24,\n m: 32,\n }[size];\n const directionClip = canShowOthers ? \"right\" : \"left\";\n\n const photosShown = photos.slice(0, visibleCount);\n\n return (\n <div\n {...restProps}\n vkuiClass={classNames(\n \"UsersStack\",\n `UsersStack--size-${size}`,\n `UsersStack--l-${layout}`,\n canShowOthers && \"UsersStack--others\"\n )}\n >\n <div vkuiClass=\"UsersStack__photos\" role=\"presentation\">\n {photosShown.map((photo, i) => {\n const direction =\n i === 0 && !canShowOthers ? \"circle\" : directionClip;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n vkuiClass=\"UsersStack__photo\"\n key={i}\n aria-hidden\n >\n <g vkuiClass={`UsersStack__mask--${photoSize}-${direction}`}>\n <PathElement\n direction={direction}\n photoSize={photoSize}\n vkuiClass=\"UsersStack__fill\"\n />\n <image href={photo} width={photoSize} height={photoSize} />\n <PathElement\n direction={direction}\n photoSize={photoSize}\n fill=\"none\"\n stroke=\"rgba(0, 0, 0, 0.08)\"\n />\n </g>\n </svg>\n );\n })}\n\n {canShowOthers && (\n <CounterTypography\n caps\n weight=\"1\"\n level=\"2\" // TODO: remove only level in #2343\n vkuiClass=\"UsersStack__photo UsersStack__photo--others\"\n aria-hidden\n >\n <span>+{othersCount}</span>\n </CounterTypography>\n )}\n </div>\n {hasReactNode(children) && (\n <Footnote vkuiClass=\"UsersStack__text\">{children}</Footnote>\n )}\n </div>\n );\n};\n"],"file":"UsersStack.js"}
@@ -154,8 +154,6 @@ export var View = function View(_ref) {
154
154
  var prevSwipeBackResult = usePrevious(swipeBackResult);
155
155
  var prevSwipeBackPrevPanel = usePrevious(swipeBackPrevPanel);
156
156
  var prevOnTransition = usePrevious(onTransition);
157
- var hasPopout = !!popout;
158
- var hasModal = !!modal;
159
157
  var panels = React.Children.toArray(children).filter(function (panel) {
160
158
  var panelId = getNavId(panel.props, warn);
161
159
  return panelId !== undefined && visiblePanels.includes(panelId) || panelId === swipeBackPrevPanel || panelId === swipeBackNextPanel;
@@ -333,9 +331,6 @@ export var View = function View(_ref) {
333
331
  React.useEffect(function () {
334
332
  popout && blurActiveElement(document);
335
333
  }, [document, popout]);
336
- React.useEffect(function () {
337
- modal && blurActiveElement(document);
338
- }, [document, modal]);
339
334
  React.useEffect(function () {
340
335
  // Нужен переход
341
336
  if (prevActivePanel && prevActivePanel !== activePanelProp && !prevSwipingBack && !prevBrowserSwipe) {
@@ -451,9 +446,9 @@ export var View = function View(_ref) {
451
446
  }, createScopedElement(NavTransitionProvider, {
452
447
  entering: panelId === nextPanel || panelId === swipeBackNextPanel
453
448
  }, panel)));
454
- })), createScopedElement(AppRootPortal, null, hasPopout && createScopedElement("div", {
449
+ })), createScopedElement(AppRootPortal, null, !!popout && createScopedElement("div", {
455
450
  vkuiClass: "View__popout"
456
- }, popout), hasModal && createScopedElement("div", {
451
+ }, popout), !!modal && createScopedElement("div", {
457
452
  vkuiClass: "View__modal"
458
453
  }, modal)));
459
454
  };