@vkontakte/vkui 7.3.8 → 7.4.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 (357) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts +1 -1
  2. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/AppRoot/ScrollContext.js +2 -2
  5. package/dist/components/AppRoot/ScrollContext.js.map +1 -1
  6. package/dist/components/Banner/Banner.d.ts +2 -2
  7. package/dist/components/Banner/Banner.d.ts.map +1 -1
  8. package/dist/components/Banner/Banner.js.map +1 -1
  9. package/dist/components/Button/Button.d.ts +2 -2
  10. package/dist/components/Button/Button.d.ts.map +1 -1
  11. package/dist/components/Button/Button.js.map +1 -1
  12. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  13. package/dist/components/Calendar/Calendar.js +9 -7
  14. package/dist/components/Calendar/Calendar.js.map +1 -1
  15. package/dist/components/CalendarRange/CalendarRange.d.ts +9 -2
  16. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  17. package/dist/components/CalendarRange/CalendarRange.js +48 -35
  18. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  19. package/dist/components/CalendarRange/types.d.ts +2 -0
  20. package/dist/components/CalendarRange/types.d.ts.map +1 -0
  21. package/dist/components/CalendarRange/types.js +3 -0
  22. package/dist/components/CalendarRange/types.js.map +1 -0
  23. package/dist/components/CalendarRange/utils.d.ts +29 -0
  24. package/dist/components/CalendarRange/utils.d.ts.map +1 -0
  25. package/dist/components/CalendarRange/utils.js +123 -0
  26. package/dist/components/CalendarRange/utils.js.map +1 -0
  27. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  28. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  29. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  30. package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
  31. package/dist/components/ChipsInput/useChipsInput.js +21 -2
  32. package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
  33. package/dist/components/ChipsInputBase/types.d.ts +5 -1
  34. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  35. package/dist/components/ChipsInputBase/types.js.map +1 -1
  36. package/dist/components/Clickable/Clickable.d.ts +4 -0
  37. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  38. package/dist/components/Clickable/Clickable.js +9 -5
  39. package/dist/components/Clickable/Clickable.js.map +1 -1
  40. package/dist/components/Clickable/RealClickable.d.ts +1 -1
  41. package/dist/components/Clickable/RealClickable.d.ts.map +1 -1
  42. package/dist/components/Clickable/RealClickable.js +3 -2
  43. package/dist/components/Clickable/RealClickable.js.map +1 -1
  44. package/dist/components/ContentCard/ContentCard.d.ts +2 -2
  45. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  46. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  47. package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
  48. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  49. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  50. package/dist/components/DateInput/DateInput.d.ts +1 -1
  51. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  52. package/dist/components/DateInput/DateInput.js +48 -50
  53. package/dist/components/DateInput/DateInput.js.map +1 -1
  54. package/dist/components/DateRangeInput/DateRangeInput.d.ts +22 -2
  55. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  56. package/dist/components/DateRangeInput/DateRangeInput.js +159 -66
  57. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  58. package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
  59. package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  60. package/dist/components/FocusTrap/FocusTrap.js +6 -3
  61. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  62. package/dist/components/HorizontalCell/HorizontalCell.d.ts +2 -2
  63. package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
  64. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  65. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts +2 -2
  66. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.d.ts.map +1 -1
  67. package/dist/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
  68. package/dist/components/IconButton/IconButton.d.ts +2 -2
  69. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  70. package/dist/components/IconButton/IconButton.js.map +1 -1
  71. package/dist/components/InputLike/InputLike.d.ts +1 -1
  72. package/dist/components/InputLike/InputLike.d.ts.map +1 -1
  73. package/dist/components/InputLike/InputLike.js +7 -6
  74. package/dist/components/InputLike/InputLike.js.map +1 -1
  75. package/dist/components/Link/Link.d.ts +2 -2
  76. package/dist/components/Link/Link.d.ts.map +1 -1
  77. package/dist/components/Link/Link.js +2 -1
  78. package/dist/components/Link/Link.js.map +1 -1
  79. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  80. package/dist/components/MiniInfoCell/MiniInfoCell.js +1 -8
  81. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  82. package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts +2 -2
  83. package/dist/components/ModalOutsideButton/ModalOutsideButton.d.ts.map +1 -1
  84. package/dist/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
  85. package/dist/components/NumberInputLike/NumberInputLike.d.ts +8 -0
  86. package/dist/components/NumberInputLike/NumberInputLike.d.ts.map +1 -0
  87. package/dist/components/NumberInputLike/NumberInputLike.js +45 -0
  88. package/dist/components/NumberInputLike/NumberInputLike.js.map +1 -0
  89. package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts +2 -2
  90. package/dist/components/Pagination/PaginationPage/PaginationPageButton.d.ts.map +1 -1
  91. package/dist/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
  92. package/dist/components/PanelHeader/PanelHeader.d.ts +3 -1
  93. package/dist/components/PanelHeader/PanelHeader.d.ts.map +1 -1
  94. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  95. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts +2 -2
  96. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  97. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  98. package/dist/components/Radio/Radio.d.ts +2 -2
  99. package/dist/components/Radio/Radio.d.ts.map +1 -1
  100. package/dist/components/Radio/Radio.js.map +1 -1
  101. package/dist/components/Removable/Removable.d.ts +1 -4
  102. package/dist/components/Removable/Removable.d.ts.map +1 -1
  103. package/dist/components/Removable/Removable.js +39 -116
  104. package/dist/components/Removable/Removable.js.map +1 -1
  105. package/dist/components/Removable/RemovableIos.d.ts +10 -0
  106. package/dist/components/Removable/RemovableIos.d.ts.map +1 -0
  107. package/dist/components/Removable/RemovableIos.js +124 -0
  108. package/dist/components/Removable/RemovableIos.js.map +1 -0
  109. package/dist/components/RichCell/RichCell.d.ts +2 -2
  110. package/dist/components/RichCell/RichCell.d.ts.map +1 -1
  111. package/dist/components/RichCell/RichCell.js.map +1 -1
  112. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  113. package/dist/components/ScreenSpinner/ScreenSpinner.js +4 -2
  114. package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  115. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +2 -2
  116. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
  117. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js +4 -3
  118. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  119. package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
  120. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  121. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  122. package/dist/components/SimpleCell/SimpleCell.d.ts +2 -2
  123. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  124. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  125. package/dist/components/Skeleton/Skeleton.d.ts +5 -1
  126. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  127. package/dist/components/Skeleton/Skeleton.js +7 -4
  128. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  129. package/dist/components/Spinner/Spinner.d.ts +5 -1
  130. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  131. package/dist/components/Spinner/Spinner.js +6 -3
  132. package/dist/components/Spinner/Spinner.js.map +1 -1
  133. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -2
  134. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts.map +1 -1
  135. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  136. package/dist/components/Tabs/Tabs.d.ts +13 -9
  137. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  138. package/dist/components/Tabs/Tabs.js +14 -10
  139. package/dist/components/Tabs/Tabs.js.map +1 -1
  140. package/dist/components/Tabs/TabsController.d.ts +7 -0
  141. package/dist/components/Tabs/TabsController.d.ts.map +1 -0
  142. package/dist/components/Tabs/TabsController.js +19 -0
  143. package/dist/components/Tabs/TabsController.js.map +1 -0
  144. package/dist/components/Tabs/TabsModeContext.d.ts +13 -0
  145. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -0
  146. package/dist/components/Tabs/TabsModeContext.js +11 -0
  147. package/dist/components/Tabs/TabsModeContext.js.map +1 -0
  148. package/dist/components/TabsItem/TabsItem.d.ts +3 -3
  149. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  150. package/dist/components/TabsItem/TabsItem.js +21 -6
  151. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  152. package/dist/components/Tappable/Tappable.d.ts +1 -0
  153. package/dist/components/Tappable/Tappable.d.ts.map +1 -1
  154. package/dist/components/Tappable/Tappable.js.map +1 -1
  155. package/dist/components/ToolButton/ToolButton.d.ts +2 -2
  156. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  157. package/dist/components/ToolButton/ToolButton.js.map +1 -1
  158. package/dist/components/View/ViewInfinite.js.map +1 -1
  159. package/dist/components.css +1 -1
  160. package/dist/components.css.map +1 -1
  161. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  162. package/dist/cssm/components/AppRoot/ScrollContext.js +2 -2
  163. package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
  164. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  165. package/dist/cssm/components/Button/Button.js.map +1 -1
  166. package/dist/cssm/components/Calendar/Calendar.js +9 -7
  167. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  168. package/dist/cssm/components/CalendarRange/CalendarRange.js +44 -31
  169. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  170. package/dist/cssm/components/CalendarRange/types.js +3 -0
  171. package/dist/cssm/components/CalendarRange/types.js.map +1 -0
  172. package/dist/cssm/components/CalendarRange/utils.js +122 -0
  173. package/dist/cssm/components/CalendarRange/utils.js.map +1 -0
  174. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  175. package/dist/cssm/components/ChipsInput/useChipsInput.js +21 -2
  176. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
  177. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  178. package/dist/cssm/components/Clickable/Clickable.js +4 -3
  179. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  180. package/dist/cssm/components/Clickable/RealClickable.js +1 -1
  181. package/dist/cssm/components/Clickable/RealClickable.js.map +1 -1
  182. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  183. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  184. package/dist/cssm/components/DateInput/DateInput.js +45 -46
  185. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  186. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +148 -58
  187. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  188. package/dist/cssm/components/FocusTrap/FocusTrap.js +4 -2
  189. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  190. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  191. package/dist/cssm/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.js.map +1 -1
  192. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
  193. package/dist/cssm/components/IconButton/IconButton.js.map +1 -1
  194. package/dist/cssm/components/ImageBase/ImageBase.module.css +2 -3
  195. package/dist/cssm/components/InputLike/InputLike.js +3 -3
  196. package/dist/cssm/components/InputLike/InputLike.js.map +1 -1
  197. package/dist/cssm/components/Link/Link.js +1 -0
  198. package/dist/cssm/components/Link/Link.js.map +1 -1
  199. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js +1 -8
  200. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  201. package/dist/cssm/components/ModalOutsideButton/ModalOutsideButton.js.map +1 -1
  202. package/dist/cssm/components/NumberInputLike/NumberInputLike.js +33 -0
  203. package/dist/cssm/components/NumberInputLike/NumberInputLike.js.map +1 -0
  204. package/dist/cssm/components/Pagination/PaginationPage/PaginationPageButton.js.map +1 -1
  205. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  206. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  207. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  208. package/dist/cssm/components/Removable/Removable.js +39 -115
  209. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  210. package/dist/cssm/components/Removable/Removable.module.css +9 -0
  211. package/dist/cssm/components/Removable/RemovableIos.js +118 -0
  212. package/dist/cssm/components/Removable/RemovableIos.js.map +1 -0
  213. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  214. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +2 -1
  215. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  216. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js +3 -2
  217. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  218. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  219. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  220. package/dist/cssm/components/Skeleton/Skeleton.js +6 -3
  221. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  222. package/dist/cssm/components/Spinner/Spinner.js +5 -2
  223. package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
  224. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  225. package/dist/cssm/components/Tabs/Tabs.js +10 -9
  226. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  227. package/dist/cssm/components/Tabs/TabsController.js +19 -0
  228. package/dist/cssm/components/Tabs/TabsController.js.map +1 -0
  229. package/dist/cssm/components/Tabs/TabsModeContext.js +11 -0
  230. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -0
  231. package/dist/cssm/components/TabsItem/TabsItem.js +17 -4
  232. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  233. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  234. package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
  235. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  236. package/dist/cssm/hooks/useCalendar.js +0 -10
  237. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  238. package/dist/cssm/hooks/useDateInput.js +28 -17
  239. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  240. package/dist/cssm/hooks/useEventListener.js.map +1 -1
  241. package/dist/cssm/hooks/useExternRef.js.map +1 -1
  242. package/dist/cssm/hooks/useFocusTrap.js +2 -2
  243. package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
  244. package/dist/cssm/hooks/useMutationObserver.js +6 -5
  245. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  246. package/dist/cssm/lib/dom.js +7 -1
  247. package/dist/cssm/lib/dom.js.map +1 -1
  248. package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
  249. package/dist/cssm/lib/floating/index.js.map +1 -1
  250. package/dist/cssm/lib/floating/types/common.js.map +1 -1
  251. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  252. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  253. package/dist/cssm/styles/animationVisibilityDelay.js +10 -0
  254. package/dist/cssm/styles/animationVisibilityDelay.js.map +1 -0
  255. package/dist/cssm/styles/animationVisibilityDelay.module.css +13 -0
  256. package/dist/cssm/styles/themes.css +4 -2
  257. package/dist/hooks/useCalendar.d.ts +0 -3
  258. package/dist/hooks/useCalendar.d.ts.map +1 -1
  259. package/dist/hooks/useCalendar.js +0 -10
  260. package/dist/hooks/useCalendar.js.map +1 -1
  261. package/dist/hooks/useDateInput.d.ts.map +1 -1
  262. package/dist/hooks/useDateInput.js +29 -18
  263. package/dist/hooks/useDateInput.js.map +1 -1
  264. package/dist/hooks/useEventListener.js.map +1 -1
  265. package/dist/hooks/useExternRef.js.map +1 -1
  266. package/dist/hooks/useFocusTrap.d.ts +5 -1
  267. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  268. package/dist/hooks/useFocusTrap.js +2 -2
  269. package/dist/hooks/useFocusTrap.js.map +1 -1
  270. package/dist/hooks/useMutationObserver.d.ts +2 -1
  271. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  272. package/dist/hooks/useMutationObserver.js +6 -5
  273. package/dist/hooks/useMutationObserver.js.map +1 -1
  274. package/dist/lib/dom.d.ts.map +1 -1
  275. package/dist/lib/dom.js +7 -1
  276. package/dist/lib/dom.js.map +1 -1
  277. package/dist/lib/floating/customResizeObserver.js.map +1 -1
  278. package/dist/lib/floating/index.d.ts +1 -1
  279. package/dist/lib/floating/index.d.ts.map +1 -1
  280. package/dist/lib/floating/index.js.map +1 -1
  281. package/dist/lib/floating/types/common.d.ts +1 -1
  282. package/dist/lib/floating/types/common.d.ts.map +1 -1
  283. package/dist/lib/floating/types/common.js.map +1 -1
  284. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  285. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  286. package/dist/styles/animationVisibilityDelay.d.ts +3 -0
  287. package/dist/styles/animationVisibilityDelay.d.ts.map +1 -0
  288. package/dist/styles/animationVisibilityDelay.js +10 -0
  289. package/dist/styles/animationVisibilityDelay.js.map +1 -0
  290. package/dist/vkui.css +1 -1
  291. package/dist/vkui.css.map +1 -1
  292. package/package.json +3 -6
  293. package/src/components/ActionSheet/ActionSheet.tsx +4 -1
  294. package/src/components/AppRoot/AppRoot.mdx +1 -1
  295. package/src/components/AppRoot/ScrollContext.tsx +2 -2
  296. package/src/components/Banner/Banner.tsx +2 -2
  297. package/src/components/Button/Button.tsx +2 -2
  298. package/src/components/Calendar/Calendar.tsx +8 -7
  299. package/src/components/CalendarRange/CalendarRange.tsx +65 -42
  300. package/src/components/CalendarRange/types.ts +1 -0
  301. package/src/components/CalendarRange/utils.ts +190 -0
  302. package/src/components/Checkbox/Checkbox.tsx +2 -2
  303. package/src/components/ChipsInput/useChipsInput.ts +23 -2
  304. package/src/components/ChipsInputBase/types.ts +5 -1
  305. package/src/components/Clickable/Clickable.tsx +12 -4
  306. package/src/components/Clickable/RealClickable.tsx +1 -0
  307. package/src/components/ContentCard/ContentCard.tsx +2 -2
  308. package/src/components/CustomSelect/CustomSelect.tsx +11 -7
  309. package/src/components/DateInput/DateInput.tsx +41 -43
  310. package/src/components/DateRangeInput/DateRangeInput.tsx +183 -65
  311. package/src/components/FocusTrap/FocusTrap.tsx +3 -0
  312. package/src/components/FormItem/FormItemTop/FormItemTop.mdx +1 -1
  313. package/src/components/HorizontalCell/HorizontalCell.tsx +2 -2
  314. package/src/components/HorizontalScroll/HorizontalCellShowMore/HorizontalCellShowMore.tsx +2 -2
  315. package/src/components/HorizontalScroll/HorizontalScroll.module.css +2 -3
  316. package/src/components/HorizontalScroll/HorizontalScroll.module.css.d.ts.map +1 -1
  317. package/src/components/IconButton/IconButton.tsx +2 -2
  318. package/src/components/ImageBase/ImageBase.module.css +2 -3
  319. package/src/components/ImageBase/ImageBase.module.css.d.ts.map +1 -1
  320. package/src/components/InputLike/InputLike.tsx +4 -3
  321. package/src/components/Link/Link.tsx +3 -2
  322. package/src/components/MiniInfoCell/MiniInfoCell.tsx +2 -7
  323. package/src/components/ModalOutsideButton/ModalOutsideButton.tsx +2 -2
  324. package/src/components/NumberInputLike/NumberInputLike.tsx +56 -0
  325. package/src/components/Pagination/PaginationPage/PaginationPageButton.tsx +2 -2
  326. package/src/components/PanelHeader/PanelHeader.tsx +3 -1
  327. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +2 -2
  328. package/src/components/Radio/Radio.tsx +2 -2
  329. package/src/components/Removable/Removable.module.css +9 -0
  330. package/src/components/Removable/Removable.module.css.d.ts.map +1 -1
  331. package/src/components/Removable/Removable.tsx +50 -120
  332. package/src/components/Removable/RemovableIos.tsx +135 -0
  333. package/src/components/RichCell/RichCell.tsx +2 -2
  334. package/src/components/ScreenSpinner/ScreenSpinner.tsx +8 -1
  335. package/src/components/ScreenSpinner/ScreenSpinnerContainer.tsx +4 -1
  336. package/src/components/SelectionControl/SelectionControl.tsx +2 -2
  337. package/src/components/SimpleCell/SimpleCell.tsx +2 -2
  338. package/src/components/Skeleton/Skeleton.tsx +15 -2
  339. package/src/components/Spinner/Spinner.tsx +13 -1
  340. package/src/components/SubnavigationButton/SubnavigationButton.tsx +2 -2
  341. package/src/components/Tabs/Tabs.tsx +23 -19
  342. package/src/components/Tabs/TabsController.ts +37 -0
  343. package/src/components/Tabs/TabsModeContext.ts +24 -0
  344. package/src/components/TabsItem/TabsItem.tsx +22 -5
  345. package/src/components/Tappable/Tappable.tsx +5 -0
  346. package/src/components/ToolButton/ToolButton.tsx +2 -2
  347. package/src/components/UnstyledTextField/UnstyledTextField.mdx +1 -1
  348. package/src/hooks/useCalendar.ts +0 -12
  349. package/src/hooks/useDateInput.ts +21 -12
  350. package/src/hooks/useFocusTrap.ts +10 -1
  351. package/src/hooks/useMutationObserver.ts +7 -4
  352. package/src/lib/dom.tsx +7 -1
  353. package/src/lib/floating/index.ts +2 -0
  354. package/src/lib/floating/types/common.ts +2 -0
  355. package/src/styles/animationVisibilityDelay.module.css +13 -0
  356. package/src/styles/animationVisibilityDelay.module.css.d.ts.map +1 -0
  357. package/src/styles/animationVisibilityDelay.ts +13 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { hasAccessibleName } from '../../lib/accessibility';\nimport { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nconst platformClassNames = {\n ios: styles.ios,\n android: styles.android,\n vkcom: styles.vkcom,\n};\n\nexport interface PanelHeaderButtonProps extends Omit<TappableProps, 'label'> {\n /**\n * Флаг для обозначения первичной кнопки\n * Влияет на стилизацию кнопки.\n */\n primary?: boolean;\n /**\n * Текст или содержимое кнопки.\n */\n label?: React.ReactNode; // TODO [>=8]: добавить св-во indicator, чтобы разграничить кейсы.\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n /**\n * Флаг для обозначения первичной кнопки\n * Наследуется от PanelHeaderButtonProps['primary'].\n */\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === 'ios') {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === 'vkcom' ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n ...restProps\n}: PanelHeaderButtonProps): React.ReactNode => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case 'ios':\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case 'vkcom':\n hoverMode = styles.hover;\n activeMode = styles.active;\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n /* istanbul ignore next: проверка в dev mode, тест на hasAccessibleName() есть в lib/accessibility.test.tsx */\n const isAccessible = hasAccessibleName({\n children: [children, label],\n ...restProps,\n });\n\n if (!isAccessible) {\n warn(COMMON_WARNINGS.a11y[restProps.href ? 'link-name' : 'button-name'], 'error');\n }\n }\n const elements = [label, children].filter((item) => !!item);\n\n const onlyPrimitive = elements.length === 1 && isPrimitiveReactNode(elements[0]);\n\n return (\n <Tappable\n Component={restProps.href ? 'a' : 'button'}\n hoverMode={hoverMode}\n activeEffectDelay={200}\n activeMode={activeMode}\n {...restProps}\n baseClassName={classNames(\n styles.host,\n platformClassNames.hasOwnProperty(platform)\n ? platformClassNames[platform]\n : platformClassNames.android,\n onlyPrimitive && styles.primitive,\n !isPrimitive && !isPrimitiveLabel && styles.notPrimitive,\n )}\n >\n {isPrimitive ? <ButtonTypography primary={primary}>{children}</ButtonTypography> : children}\n {isPrimitiveLabel ? (\n <ButtonTypography primary={primary} className={styles.label}>\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","isPrimitiveReactNode","usePlatform","hasAccessibleName","COMMON_WARNINGS","warnOnce","Tappable","Text","Title","styles","platformClassNames","ios","android","vkcom","ButtonTypography","primary","children","platform","Component","level","weight","undefined","warn","PanelHeaderButton","label","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","hover","active","process","env","NODE_ENV","isAccessible","a11y","href","elements","filter","item","onlyPrimitive","length","activeEffectDelay","baseClassName","host","hasOwnProperty","primitive","notPrimitive","className"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,oBAAoB,QAAQ,kBAAkB;AACnE,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,6BAA0B;AAC5D,SAASC,eAAe,EAAEC,QAAQ,QAAQ,wBAAqB;AAC/D,SAASC,QAAQ,QAA4B,0BAAuB;AACpE,SAASC,IAAI,QAAQ,6BAA0B;AAC/C,SAASC,KAAK,QAAQ,+BAA4B;AAClD,OAAOC,YAAY,iCAAiC;AAEpD,MAAMC,qBAAqB;IACzBC,KAAKF,OAAOE,GAAG;IACfC,SAASH,OAAOG,OAAO;IACvBC,OAAOJ,OAAOI,KAAK;AACrB;AAsBA,MAAMC,mBAAmB,CAAC,EAAEC,OAAO,EAAEC,QAAQ,EAAyB;IACpE,MAAMC,WAAWf;IAEjB,IAAIe,aAAa,OAAO;QACtB,qBACE,KAACT;YAAMU,WAAU;YAAOC,OAAM;YAAIC,QAAQL,UAAU,MAAM;sBACvDC;;IAGP;IAEA,qBAAO,KAACT;QAAKa,QAAQH,aAAa,UAAUI,YAAY;kBAAML;;AAChE;AAEA,MAAMM,OAAOjB,SAAS;AAEtB;;CAEC,GACD,OAAO,MAAMkB,oBAAoB,CAAC,EAChCP,QAAQ,EACRD,UAAU,KAAK,EACfS,KAAK,EACL,GAAGC,WACoB;IACvB,MAAMC,cAAczB,qBAAqBe;IACzC,MAAMW,mBAAmB1B,qBAAqBuB;IAC9C,MAAMP,WAAWf;IAEjB,IAAI0B;IACJ,IAAIC;IAEJ,OAAQZ;QACN,KAAK;YACHW,YAAY;YACZC,aAAa;YACb;QACF,KAAK;YACHD,YAAYnB,OAAOqB,KAAK;YACxBD,aAAapB,OAAOsB,MAAM;YAC1B;QACF;YACEH,YAAY;YACZC,aAAa;IACjB;IAEA,IAAIG,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,4GAA4G,GAC5G,MAAMC,eAAehC,kBAAkB;YACrCa,UAAU;gBAACA;gBAAUQ;aAAM;YAC3B,GAAGC,SAAS;QACd;QAEA,IAAI,CAACU,cAAc;YACjBb,KAAKlB,gBAAgBgC,IAAI,CAACX,UAAUY,IAAI,GAAG,cAAc,cAAc,EAAE;QAC3E;IACF;IACA,MAAMC,WAAW;QAACd;QAAOR;KAAS,CAACuB,MAAM,CAAC,CAACC,OAAS,CAAC,CAACA;IAEtD,MAAMC,gBAAgBH,SAASI,MAAM,KAAK,KAAKzC,qBAAqBqC,QAAQ,CAAC,EAAE;IAE/E,qBACE,MAAChC;QACCY,WAAWO,UAAUY,IAAI,GAAG,MAAM;QAClCT,WAAWA;QACXe,mBAAmB;QACnBd,YAAYA;QACX,GAAGJ,SAAS;QACbmB,eAAe5C,WACbS,OAAOoC,IAAI,EACXnC,mBAAmBoC,cAAc,CAAC7B,YAC9BP,kBAAkB,CAACO,SAAS,GAC5BP,mBAAmBE,OAAO,EAC9B6B,iBAAiBhC,OAAOsC,SAAS,EACjC,CAACrB,eAAe,CAACC,oBAAoBlB,OAAOuC,YAAY;;YAGzDtB,4BAAc,KAACZ;gBAAiBC,SAASA;0BAAUC;iBAA+BA;YAClFW,iCACC,KAACb;gBAAiBC,SAASA;gBAASkC,WAAWxC,OAAOe,KAAK;0BACxDA;iBAGHA;;;AAIR,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/PanelHeaderButton/PanelHeaderButton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { hasAccessibleName } from '../../lib/accessibility';\nimport { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './PanelHeaderButton.module.css';\n\nconst platformClassNames = {\n ios: styles.ios,\n android: styles.android,\n vkcom: styles.vkcom,\n};\n\nexport interface PanelHeaderButtonProps extends Omit<TappableOmitProps, 'label'> {\n /**\n * Флаг для обозначения первичной кнопки\n * Влияет на стилизацию кнопки.\n */\n primary?: boolean;\n /**\n * Текст или содержимое кнопки.\n */\n label?: React.ReactNode; // TODO [>=8]: добавить св-во indicator, чтобы разграничить кейсы.\n}\n\ninterface ButtonTypographyProps extends React.AllHTMLAttributes<HTMLElement> {\n /**\n * Флаг для обозначения первичной кнопки\n * Наследуется от PanelHeaderButtonProps['primary'].\n */\n primary?: PanelHeaderButtonProps['primary'];\n}\n\nconst ButtonTypography = ({ primary, children }: ButtonTypographyProps) => {\n const platform = usePlatform();\n\n if (platform === 'ios') {\n return (\n <Title Component=\"span\" level=\"3\" weight={primary ? '1' : '3'}>\n {children}\n </Title>\n );\n }\n\n return <Text weight={platform === 'vkcom' ? undefined : '2'}>{children}</Text>;\n};\n\nconst warn = warnOnce('PanelHeaderButton');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderButton\n */\nexport const PanelHeaderButton = ({\n children,\n primary = false,\n label,\n ...restProps\n}: PanelHeaderButtonProps): React.ReactNode => {\n const isPrimitive = isPrimitiveReactNode(children);\n const isPrimitiveLabel = isPrimitiveReactNode(label);\n const platform = usePlatform();\n\n let hoverMode;\n let activeMode;\n\n switch (platform) {\n case 'ios':\n hoverMode = 'background';\n activeMode = 'opacity';\n break;\n case 'vkcom':\n hoverMode = styles.hover;\n activeMode = styles.active;\n break;\n default:\n hoverMode = 'background';\n activeMode = 'background';\n }\n\n if (process.env.NODE_ENV === 'development') {\n /* istanbul ignore next: проверка в dev mode, тест на hasAccessibleName() есть в lib/accessibility.test.tsx */\n const isAccessible = hasAccessibleName({\n children: [children, label],\n ...restProps,\n });\n\n if (!isAccessible) {\n warn(COMMON_WARNINGS.a11y[restProps.href ? 'link-name' : 'button-name'], 'error');\n }\n }\n const elements = [label, children].filter((item) => !!item);\n\n const onlyPrimitive = elements.length === 1 && isPrimitiveReactNode(elements[0]);\n\n return (\n <Tappable\n Component={restProps.href ? 'a' : 'button'}\n hoverMode={hoverMode}\n activeEffectDelay={200}\n activeMode={activeMode}\n {...restProps}\n baseClassName={classNames(\n styles.host,\n platformClassNames.hasOwnProperty(platform)\n ? platformClassNames[platform]\n : platformClassNames.android,\n onlyPrimitive && styles.primitive,\n !isPrimitive && !isPrimitiveLabel && styles.notPrimitive,\n )}\n >\n {isPrimitive ? <ButtonTypography primary={primary}>{children}</ButtonTypography> : children}\n {isPrimitiveLabel ? (\n <ButtonTypography primary={primary} className={styles.label}>\n {label}\n </ButtonTypography>\n ) : (\n label\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","isPrimitiveReactNode","usePlatform","hasAccessibleName","COMMON_WARNINGS","warnOnce","Tappable","Text","Title","styles","platformClassNames","ios","android","vkcom","ButtonTypography","primary","children","platform","Component","level","weight","undefined","warn","PanelHeaderButton","label","restProps","isPrimitive","isPrimitiveLabel","hoverMode","activeMode","hover","active","process","env","NODE_ENV","isAccessible","a11y","href","elements","filter","item","onlyPrimitive","length","activeEffectDelay","baseClassName","host","hasOwnProperty","primitive","notPrimitive","className"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,oBAAoB,QAAQ,kBAAkB;AACnE,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,6BAA0B;AAC5D,SAASC,eAAe,EAAEC,QAAQ,QAAQ,wBAAqB;AAC/D,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,IAAI,QAAQ,6BAA0B;AAC/C,SAASC,KAAK,QAAQ,+BAA4B;AAClD,OAAOC,YAAY,iCAAiC;AAEpD,MAAMC,qBAAqB;IACzBC,KAAKF,OAAOE,GAAG;IACfC,SAASH,OAAOG,OAAO;IACvBC,OAAOJ,OAAOI,KAAK;AACrB;AAsBA,MAAMC,mBAAmB,CAAC,EAAEC,OAAO,EAAEC,QAAQ,EAAyB;IACpE,MAAMC,WAAWf;IAEjB,IAAIe,aAAa,OAAO;QACtB,qBACE,KAACT;YAAMU,WAAU;YAAOC,OAAM;YAAIC,QAAQL,UAAU,MAAM;sBACvDC;;IAGP;IAEA,qBAAO,KAACT;QAAKa,QAAQH,aAAa,UAAUI,YAAY;kBAAML;;AAChE;AAEA,MAAMM,OAAOjB,SAAS;AAEtB;;CAEC,GACD,OAAO,MAAMkB,oBAAoB,CAAC,EAChCP,QAAQ,EACRD,UAAU,KAAK,EACfS,KAAK,EACL,GAAGC,WACoB;IACvB,MAAMC,cAAczB,qBAAqBe;IACzC,MAAMW,mBAAmB1B,qBAAqBuB;IAC9C,MAAMP,WAAWf;IAEjB,IAAI0B;IACJ,IAAIC;IAEJ,OAAQZ;QACN,KAAK;YACHW,YAAY;YACZC,aAAa;YACb;QACF,KAAK;YACHD,YAAYnB,OAAOqB,KAAK;YACxBD,aAAapB,OAAOsB,MAAM;YAC1B;QACF;YACEH,YAAY;YACZC,aAAa;IACjB;IAEA,IAAIG,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,4GAA4G,GAC5G,MAAMC,eAAehC,kBAAkB;YACrCa,UAAU;gBAACA;gBAAUQ;aAAM;YAC3B,GAAGC,SAAS;QACd;QAEA,IAAI,CAACU,cAAc;YACjBb,KAAKlB,gBAAgBgC,IAAI,CAACX,UAAUY,IAAI,GAAG,cAAc,cAAc,EAAE;QAC3E;IACF;IACA,MAAMC,WAAW;QAACd;QAAOR;KAAS,CAACuB,MAAM,CAAC,CAACC,OAAS,CAAC,CAACA;IAEtD,MAAMC,gBAAgBH,SAASI,MAAM,KAAK,KAAKzC,qBAAqBqC,QAAQ,CAAC,EAAE;IAE/E,qBACE,MAAChC;QACCY,WAAWO,UAAUY,IAAI,GAAG,MAAM;QAClCT,WAAWA;QACXe,mBAAmB;QACnBd,YAAYA;QACX,GAAGJ,SAAS;QACbmB,eAAe5C,WACbS,OAAOoC,IAAI,EACXnC,mBAAmBoC,cAAc,CAAC7B,YAC9BP,kBAAkB,CAACO,SAAS,GAC5BP,mBAAmBE,OAAO,EAC9B6B,iBAAiBhC,OAAOsC,SAAS,EACjC,CAACrB,eAAe,CAACC,oBAAoBlB,OAAOuC,YAAY;;YAGzDtB,4BAAc,KAACZ;gBAAiBC,SAASA;0BAAUC;iBAA+BA;YAClFW,iCACC,KAACb;gBAAiBC,SAASA;gBAASkC,WAAWxC,OAAOe,KAAK;0BACxDA;iBAGHA;;;AAIR,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HasDataAttribute, HasRef, HasRootRef } from '../../types';\nimport { SelectionControl } from '../SelectionControl/SelectionControl';\nimport { SelectionControlLabel } from '../SelectionControl/SelectionControlLabel/SelectionControlLabel';\nimport type { TappableProps } from '../Tappable/Tappable';\nimport { RadioInput } from './RadioInput/RadioInput';\nimport styles from './Radio.module.css';\n\nexport interface RadioProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n /**\n * Дополнительное описание под основным текстом.\n */\n description?: React.ReactNode;\n /**\n * Элемент после основного текста.\n */\n titleAfter?: React.ReactNode;\n /**\n * Позволяет передавать data-* аттрибуты элементу label.\n **/\n labelProps?: HasDataAttribute;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Radio\n */\nexport const Radio = ({\n children,\n description,\n style,\n className,\n getRootRef,\n titleAfter,\n getRef,\n labelProps,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n ...restProps\n}: RadioProps): React.ReactNode => {\n return (\n <SelectionControl\n style={style}\n className={classNames(styles.host, className)}\n disabled={restProps.disabled}\n getRootRef={getRootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n {...labelProps}\n >\n <RadioInput {...restProps} getRef={getRef} />\n <SelectionControlLabel titleAfter={titleAfter} description={description}>\n {children}\n </SelectionControlLabel>\n </SelectionControl>\n );\n};\n\nRadio.Input = RadioInput;\n"],"names":["React","classNames","SelectionControl","SelectionControlLabel","RadioInput","styles","Radio","children","description","style","className","getRootRef","titleAfter","getRef","labelProps","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","restProps","host","disabled","Input"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,gBAAgB,QAAQ,0CAAuC;AACxE,SAASC,qBAAqB,QAAQ,qEAAkE;AAExG,SAASC,UAAU,QAAQ,6BAA0B;AACrD,OAAOC,YAAY,qBAAqB;AAwBxC;;CAEC,GACD,OAAO,MAAMC,QAAQ,CAAC,EACpBC,QAAQ,EACRC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,EAChB,GAAGC,WACQ;IACX,qBACE,MAAClB;QACCO,OAAOA;QACPC,WAAWT,WAAWI,OAAOgB,IAAI,EAAEX;QACnCY,UAAUF,UAAUE,QAAQ;QAC5BX,YAAYA;QACZI,WAAWA;QACXC,YAAYA;QACZC,UAAUA;QACVC,WAAWA;QACXC,kBAAkBA;QACjB,GAAGL,UAAU;;0BAEd,KAACV;gBAAY,GAAGgB,SAAS;gBAAEP,QAAQA;;0BACnC,KAACV;gBAAsBS,YAAYA;gBAAYJ,aAAaA;0BACzDD;;;;AAIT,EAAE;AAEFD,MAAMiB,KAAK,GAAGnB"}
1
+ {"version":3,"sources":["../../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HasDataAttribute, HasRef, HasRootRef } from '../../types';\nimport { SelectionControl } from '../SelectionControl/SelectionControl';\nimport { SelectionControlLabel } from '../SelectionControl/SelectionControlLabel/SelectionControlLabel';\nimport type { TappableOmitProps } from '../Tappable/Tappable';\nimport { RadioInput } from './RadioInput/RadioInput';\nimport styles from './Radio.module.css';\n\nexport interface RadioProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n /**\n * Дополнительное описание под основным текстом.\n */\n description?: React.ReactNode;\n /**\n * Элемент после основного текста.\n */\n titleAfter?: React.ReactNode;\n /**\n * Позволяет передавать data-* аттрибуты элементу label.\n **/\n labelProps?: HasDataAttribute;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Radio\n */\nexport const Radio = ({\n children,\n description,\n style,\n className,\n getRootRef,\n titleAfter,\n getRef,\n labelProps,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n ...restProps\n}: RadioProps): React.ReactNode => {\n return (\n <SelectionControl\n style={style}\n className={classNames(styles.host, className)}\n disabled={restProps.disabled}\n getRootRef={getRootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n {...labelProps}\n >\n <RadioInput {...restProps} getRef={getRef} />\n <SelectionControlLabel titleAfter={titleAfter} description={description}>\n {children}\n </SelectionControlLabel>\n </SelectionControl>\n );\n};\n\nRadio.Input = RadioInput;\n"],"names":["React","classNames","SelectionControl","SelectionControlLabel","RadioInput","styles","Radio","children","description","style","className","getRootRef","titleAfter","getRef","labelProps","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","restProps","host","disabled","Input"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,gBAAgB,QAAQ,0CAAuC;AACxE,SAASC,qBAAqB,QAAQ,qEAAkE;AAExG,SAASC,UAAU,QAAQ,6BAA0B;AACrD,OAAOC,YAAY,qBAAqB;AAwBxC;;CAEC,GACD,OAAO,MAAMC,QAAQ,CAAC,EACpBC,QAAQ,EACRC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,EAChB,GAAGC,WACQ;IACX,qBACE,MAAClB;QACCO,OAAOA;QACPC,WAAWT,WAAWI,OAAOgB,IAAI,EAAEX;QACnCY,UAAUF,UAAUE,QAAQ;QAC5BX,YAAYA;QACZI,WAAWA;QACXC,YAAYA;QACZC,UAAUA;QACVC,WAAWA;QACXC,kBAAkBA;QACjB,GAAGL,UAAU;;0BAEd,KAACV;gBAAY,GAAGgB,SAAS;gBAAEP,QAAQA;;0BACnC,KAACV;gBAAsBS,YAAYA;gBAAYJ,aAAaA;0BACzDD;;;;AAIT,EAAE;AAEFD,MAAMiB,KAAK,GAAGnB"}
@@ -3,144 +3,68 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { Icon24Cancel } from "@vkontakte/icons";
5
5
  import { classNames } from "@vkontakte/vkjs";
6
- import { useConfigDirection } from "../../hooks/useConfigDirection.js";
7
- import { useGlobalEventListener } from "../../hooks/useGlobalEventListener.js";
8
6
  import { usePlatform } from "../../hooks/usePlatform.js";
9
7
  import { getTextFromChildren } from "../../lib/children.js";
10
- import { useDOM } from "../../lib/dom.js";
11
8
  import { IconButton } from "../IconButton/IconButton.js";
12
9
  import { RootComponent } from "../RootComponent/RootComponent.js";
13
- import { Tappable } from "../Tappable/Tappable.js";
14
- import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
10
+ import { RemovableIos } from "./RemovableIos.js";
15
11
  import styles from "./Removable.module.css";
16
- /* eslint-enable jsdoc/require-jsdoc */ /**
17
- * @see https://vkcom.github.io/VKUI/#/RemovableIos
18
- */ const RemovableIos = ({ onRemove, removePlaceholder, removePlaceholderString, children: childrenProp, toggleButtonTestId, removeButtonTestId, disabled })=>{
19
- const direction = useConfigDirection();
20
- const isRtl = direction === 'rtl';
21
- const { window } = useDOM();
22
- const removeButtonRef = React.useRef(null);
23
- const disabledRef = React.useRef(true);
24
- const [removeOffset, updateRemoveOffset] = React.useState(0);
25
- useGlobalEventListener(window, 'click', ()=>{
26
- if (removeOffset > 0) {
27
- updateRemoveOffset(0);
28
- }
29
- }, {
30
- capture: true
31
- });
32
- const onRemoveTransitionEnd = ()=>{
33
- if (removeOffset > 0) {
34
- removeButtonRef?.current?.focus();
35
- } else {
36
- disabledRef.current = true;
37
- }
38
- };
39
- const onRemoveActivateClick = (e)=>{
40
- e.stopPropagation();
41
- if (!removeButtonRef.current) {
42
- return;
43
- }
44
- const { offsetWidth } = removeButtonRef.current;
45
- disabledRef.current = false;
46
- updateRemoveOffset(offsetWidth);
47
- };
48
- const style = {
49
- '--vkui_internal_Removable_remove_offset': String(removeOffset ?? 0)
50
- };
12
+ /* eslint-enable jsdoc/require-jsdoc */ const RemovableCommon = ({ noPadding, children, removePlaceholderString, onRemoveClick, removeButtonTestId, disabled, indent })=>{
51
13
  return /*#__PURE__*/ _jsxs("div", {
52
- className: classNames(styles.content, isRtl && styles.rtl, 'vkuiInternalRemovable__content'),
53
- style: style,
54
- onTransitionEnd: onRemoveTransitionEnd,
14
+ className: classNames(styles.content, !noPadding && styles.withPadding, 'vkuiInternalRemovable__content'),
55
15
  children: [
56
- /*#__PURE__*/ _jsxs(IconButton, {
57
- hasActive: false,
58
- hasHover: false,
59
- className: classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action'),
60
- onClick: onRemoveActivateClick,
61
- disabled: removeOffset > 0 || disabled,
62
- "data-testid": toggleButtonTestId,
63
- children: [
64
- /*#__PURE__*/ _jsx(VisuallyHidden, {
65
- children: removePlaceholderString
66
- }),
67
- /*#__PURE__*/ _jsx("i", {
68
- className: styles.toggleIn,
69
- role: "presentation"
70
- })
71
- ]
16
+ typeof children === 'function' ? children({
17
+ isRemoving: false
18
+ }) : children,
19
+ indent ? /*#__PURE__*/ _jsx("div", {
20
+ className: classNames(styles.action, styles.indentation)
21
+ }) : /*#__PURE__*/ _jsx(IconButton, {
22
+ activeMode: "opacity",
23
+ hoverMode: "opacity",
24
+ className: classNames(styles.action, 'vkuiInternalRemovable__action'),
25
+ onClick: onRemoveClick,
26
+ label: removePlaceholderString,
27
+ "data-testid": removeButtonTestId,
28
+ disabled: disabled,
29
+ children: /*#__PURE__*/ _jsx(Icon24Cancel, {
30
+ role: "presentation"
31
+ })
72
32
  }),
73
- typeof childrenProp === 'function' ? childrenProp({
74
- isRemoving: removeOffset > 0
75
- }) : childrenProp,
76
33
  /*#__PURE__*/ _jsx("span", {
77
34
  className: styles.offset,
78
35
  "aria-hidden": true
79
- }),
80
- /*#__PURE__*/ _jsx(Tappable, {
81
- Component: "button",
82
- hasActive: false,
83
- hasHover: false,
84
- disabled: disabledRef.current,
85
- getRootRef: removeButtonRef,
86
- className: styles.remove,
87
- onClick: onRemove,
88
- "data-testid": removeButtonTestId,
89
- children: /*#__PURE__*/ _jsx("span", {
90
- className: styles.removeIn,
91
- children: removePlaceholder
92
- })
93
36
  })
94
37
  ]
95
38
  });
96
39
  };
97
- /**
98
- * @see https://vkcom.github.io/VKUI/#/Removable
99
- */ export const Removable = ({ children, onRemove, removePlaceholder = 'Удалить', align = 'center', indent = false, toggleButtonTestId, removeButtonTestId, disabled, noPadding, ...restProps })=>{
40
+ export const Removable = ({ children, onRemove, removePlaceholder = 'Удалить', align = 'center', indent = false, toggleButtonTestId, removeButtonTestId, disabled, noPadding, ...restProps })=>{
100
41
  const platform = usePlatform();
101
42
  const onRemoveClick = (e)=>{
102
43
  e.preventDefault();
103
44
  onRemove?.(e);
104
45
  };
105
46
  const removePlaceholderString = getTextFromChildren(removePlaceholder);
106
- return /*#__PURE__*/ _jsxs(RootComponent, {
47
+ return /*#__PURE__*/ _jsx(RootComponent, {
107
48
  ...restProps,
108
49
  baseClassName: classNames(platform === 'ios' && styles.ios, align === 'start' && styles.alignStart, indent && styles.indent),
109
- children: [
110
- platform !== 'ios' && /*#__PURE__*/ _jsxs("div", {
111
- className: classNames(styles.content, !noPadding && styles.withPadding, 'vkuiInternalRemovable__content'),
112
- children: [
113
- typeof children === 'function' ? children({
114
- isRemoving: false
115
- }) : children,
116
- /*#__PURE__*/ _jsx(IconButton, {
117
- activeMode: "opacity",
118
- hoverMode: "opacity",
119
- className: classNames(styles.action, 'vkuiInternalRemovable__action'),
120
- onClick: onRemoveClick,
121
- label: removePlaceholderString,
122
- "data-testid": removeButtonTestId,
123
- disabled: disabled,
124
- children: /*#__PURE__*/ _jsx(Icon24Cancel, {
125
- role: "presentation"
126
- })
127
- }),
128
- /*#__PURE__*/ _jsx("span", {
129
- className: styles.offset,
130
- "aria-hidden": true
131
- })
132
- ]
133
- }),
134
- platform === 'ios' && /*#__PURE__*/ _jsx(RemovableIos, {
135
- onRemove: onRemoveClick,
136
- removePlaceholder: removePlaceholder,
137
- removePlaceholderString: removePlaceholderString,
138
- toggleButtonTestId: toggleButtonTestId,
139
- removeButtonTestId: removeButtonTestId,
140
- disabled: disabled,
141
- children: children
142
- })
143
- ]
50
+ children: platform === 'ios' ? /*#__PURE__*/ _jsx(RemovableIos, {
51
+ onRemove: onRemoveClick,
52
+ removePlaceholder: removePlaceholder,
53
+ removePlaceholderString: removePlaceholderString,
54
+ toggleButtonTestId: toggleButtonTestId,
55
+ removeButtonTestId: removeButtonTestId,
56
+ disabled: disabled,
57
+ indent: indent,
58
+ children: children
59
+ }) : /*#__PURE__*/ _jsx(RemovableCommon, {
60
+ onRemoveClick: onRemoveClick,
61
+ noPadding: noPadding,
62
+ removeButtonTestId: removeButtonTestId,
63
+ removePlaceholderString: removePlaceholderString,
64
+ disabled: disabled,
65
+ indent: indent,
66
+ children: children
67
+ })
144
68
  });
145
69
  };
146
70
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Removable/Removable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTextFromChildren } from '../../lib/children';\nimport { useDOM } from '../../lib/dom';\nimport type { CSSCustomProperties, HTMLAttributesWithRootRef } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Removable.module.css';\n\nexport interface RemovableProps {\n /**\n * Текст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки.\n */\n removePlaceholder?: React.ReactNode;\n /**\n * Обработчик, срабатывающий при нажатии на контрол удаления.\n */\n onRemove?: (e: React.MouseEvent, rootEl?: HTMLElement | null) => void;\n /**\n * Передает атрибут `data-testid` для кнопки, которая активирует кнопку удаления (iOS only).\n */\n toggleButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки удаления.\n */\n removeButtonTestId?: string;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n}\n/* eslint-disable jsdoc/require-jsdoc */\ninterface RemovableIosOwnProps extends RemovableProps {\n removePlaceholderString?: string;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RemovableIos\n */\nconst RemovableIos = ({\n onRemove,\n removePlaceholder,\n removePlaceholderString,\n children: childrenProp,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n}: RemovableIosOwnProps) => {\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n const { window } = useDOM();\n\n const removeButtonRef = React.useRef<HTMLElement>(null);\n const disabledRef = React.useRef(true);\n const [removeOffset, updateRemoveOffset] = React.useState(0);\n\n useGlobalEventListener(\n window,\n 'click',\n () => {\n if (removeOffset > 0) {\n updateRemoveOffset(0);\n }\n },\n { capture: true },\n );\n\n const onRemoveTransitionEnd = () => {\n if (removeOffset > 0) {\n removeButtonRef?.current?.focus();\n } else {\n disabledRef.current = true;\n }\n };\n\n const onRemoveActivateClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!removeButtonRef.current) {\n return;\n }\n const { offsetWidth } = removeButtonRef.current;\n disabledRef.current = false;\n updateRemoveOffset(offsetWidth);\n };\n\n const style: CSSCustomProperties = {\n '--vkui_internal_Removable_remove_offset': String(removeOffset ?? 0),\n };\n\n return (\n <div\n className={classNames(styles.content, isRtl && styles.rtl, 'vkuiInternalRemovable__content')}\n style={style}\n onTransitionEnd={onRemoveTransitionEnd}\n >\n <IconButton\n hasActive={false}\n hasHover={false}\n className={classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action')}\n onClick={onRemoveActivateClick}\n disabled={removeOffset > 0 || disabled}\n data-testid={toggleButtonTestId}\n >\n <VisuallyHidden>{removePlaceholderString}</VisuallyHidden>\n <i className={styles.toggleIn} role=\"presentation\" />\n </IconButton>\n {typeof childrenProp === 'function'\n ? childrenProp({ isRemoving: removeOffset > 0 })\n : childrenProp}\n\n <span className={styles.offset} aria-hidden />\n\n <Tappable\n Component=\"button\"\n hasActive={false}\n hasHover={false}\n disabled={disabledRef.current}\n getRootRef={removeButtonRef}\n className={styles.remove}\n onClick={onRemove}\n data-testid={removeButtonTestId}\n >\n <span className={styles.removeIn}>{removePlaceholder}</span>\n </Tappable>\n </div>\n );\n};\n\ninterface RemovableIosRenderProps {\n /**\n * Показывает состояние Removable на платформе iOS при нажатии на иконку удаления.\n * Для имитации поведения на iOS при нажатии на иконку удаления самого удаление не происходит,\n * контент сдвигается влево и справа выезжает настоящая кнопка \"Удалить\".\n * Когда контент сдвинут `isRemoving = true`.\n */\n isRemoving: boolean;\n}\n\ninterface RemovableOwnProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'children'>,\n RemovableProps {\n /**\n * Расположение кнопки удаления.\n */\n align?: 'start' | 'center';\n /**\n * Скрывает кнопку, но оставляет отступ.\n * @since 5.4.0\n */\n indent?: boolean;\n /**\n * Убирает базовые отступы для базовой платформы.\n */\n noPadding?: boolean;\n /**\n * Содержимое. Можно передать функцию для отрисовки.\n */\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Removable\n */\nexport const Removable = ({\n children,\n onRemove,\n removePlaceholder = 'Удалить',\n align = 'center',\n indent = false,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n noPadding,\n ...restProps\n}: RemovableOwnProps): React.ReactNode => {\n const platform = usePlatform();\n\n const onRemoveClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onRemove?.(e);\n };\n\n const removePlaceholderString: string = getTextFromChildren(removePlaceholder);\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n platform === 'ios' && styles.ios,\n align === 'start' && styles.alignStart,\n indent && styles.indent,\n )}\n >\n {platform !== 'ios' && (\n <div\n className={classNames(\n styles.content,\n !noPadding && styles.withPadding,\n 'vkuiInternalRemovable__content',\n )}\n >\n {typeof children === 'function' ? children({ isRemoving: false }) : children}\n\n <IconButton\n activeMode=\"opacity\"\n hoverMode=\"opacity\"\n className={classNames(styles.action, 'vkuiInternalRemovable__action')}\n onClick={onRemoveClick}\n label={removePlaceholderString}\n data-testid={removeButtonTestId}\n disabled={disabled}\n >\n <Icon24Cancel role=\"presentation\" />\n </IconButton>\n\n <span className={styles.offset} aria-hidden />\n </div>\n )}\n\n {platform === 'ios' && (\n <RemovableIos\n onRemove={onRemoveClick}\n removePlaceholder={removePlaceholder}\n removePlaceholderString={removePlaceholderString}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n disabled={disabled}\n >\n {children}\n </RemovableIos>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon24Cancel","classNames","useConfigDirection","useGlobalEventListener","usePlatform","getTextFromChildren","useDOM","IconButton","RootComponent","Tappable","VisuallyHidden","styles","RemovableIos","onRemove","removePlaceholder","removePlaceholderString","children","childrenProp","toggleButtonTestId","removeButtonTestId","disabled","direction","isRtl","window","removeButtonRef","useRef","disabledRef","removeOffset","updateRemoveOffset","useState","capture","onRemoveTransitionEnd","current","focus","onRemoveActivateClick","e","stopPropagation","offsetWidth","style","String","div","className","content","rtl","onTransitionEnd","hasActive","hasHover","action","toggle","onClick","data-testid","i","toggleIn","role","isRemoving","span","offset","aria-hidden","Component","getRootRef","remove","removeIn","Removable","align","indent","noPadding","restProps","platform","onRemoveClick","preventDefault","baseClassName","ios","alignStart","withPadding","activeMode","hoverMode","label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Removable/Removable.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon24Cancel } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getTextFromChildren } from '../../lib/children';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { RemovableIos } from './RemovableIos';\nimport styles from './Removable.module.css';\n\nexport interface RemovableProps {\n /**\n * Текст кнопки удаления ячейки. Визуально скрыт везде, кроме iOS. На iOS появляется в выезжающей кнопке для удаления ячейки.\n */\n removePlaceholder?: React.ReactNode;\n /**\n * Обработчик, срабатывающий при нажатии на контрол удаления.\n */\n onRemove?: (e: React.MouseEvent, rootEl?: HTMLElement | null) => void;\n /**\n * Передает атрибут `data-testid` для кнопки, которая активирует кнопку удаления (iOS only).\n */\n toggleButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки удаления.\n */\n removeButtonTestId?: string;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n}\n/* eslint-disable jsdoc/require-jsdoc */\ninterface RemovableCommonOwnProps\n extends Pick<\n RemovableOwnProps,\n 'noPadding' | 'children' | 'removeButtonTestId' | 'disabled' | 'indent'\n > {\n removePlaceholderString?: string;\n onRemoveClick: (e: React.MouseEvent) => void;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nconst RemovableCommon = ({\n noPadding,\n children,\n removePlaceholderString,\n onRemoveClick,\n removeButtonTestId,\n disabled,\n indent,\n}: RemovableCommonOwnProps) => {\n return (\n <div\n className={classNames(\n styles.content,\n !noPadding && styles.withPadding,\n 'vkuiInternalRemovable__content',\n )}\n >\n {typeof children === 'function' ? children({ isRemoving: false }) : children}\n\n {indent ? (\n <div className={classNames(styles.action, styles.indentation)} />\n ) : (\n <IconButton\n activeMode=\"opacity\"\n hoverMode=\"opacity\"\n className={classNames(styles.action, 'vkuiInternalRemovable__action')}\n onClick={onRemoveClick}\n label={removePlaceholderString}\n data-testid={removeButtonTestId}\n disabled={disabled}\n >\n <Icon24Cancel role=\"presentation\" />\n </IconButton>\n )}\n <span className={styles.offset} aria-hidden />\n </div>\n );\n};\n\nexport interface RemovableIosRenderProps {\n /**\n * Показывает состояние Removable на платформе iOS при нажатии на иконку удаления.\n * Для имитации поведения на iOS при нажатии на иконку удаления самого удаление не происходит,\n * контент сдвигается влево и справа выезжает настоящая кнопка \"Удалить\".\n * Когда контент сдвинут `isRemoving = true`.\n */\n isRemoving: boolean;\n}\n\ninterface RemovableOwnProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'children'>,\n RemovableProps {\n /**\n * Расположение кнопки удаления.\n */\n align?: 'start' | 'center';\n /**\n * Скрывает кнопку, но оставляет отступ.\n * @since 5.4.0\n */\n indent?: boolean;\n /**\n * Убирает базовые отступы для базовой платформы.\n */\n noPadding?: boolean;\n /**\n * Содержимое. Можно передать функцию для отрисовки.\n */\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n\nexport const Removable = ({\n children,\n onRemove,\n removePlaceholder = 'Удалить',\n align = 'center',\n indent = false,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n noPadding,\n ...restProps\n}: RemovableOwnProps): React.ReactNode => {\n const platform = usePlatform();\n\n const onRemoveClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onRemove?.(e);\n };\n\n const removePlaceholderString: string = getTextFromChildren(removePlaceholder);\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n platform === 'ios' && styles.ios,\n align === 'start' && styles.alignStart,\n indent && styles.indent,\n )}\n >\n {platform === 'ios' ? (\n <RemovableIos\n onRemove={onRemoveClick}\n removePlaceholder={removePlaceholder}\n removePlaceholderString={removePlaceholderString}\n toggleButtonTestId={toggleButtonTestId}\n removeButtonTestId={removeButtonTestId}\n disabled={disabled}\n indent={indent}\n >\n {children}\n </RemovableIos>\n ) : (\n <RemovableCommon\n onRemoveClick={onRemoveClick}\n noPadding={noPadding}\n removeButtonTestId={removeButtonTestId}\n removePlaceholderString={removePlaceholderString}\n disabled={disabled}\n indent={indent}\n >\n {children}\n </RemovableCommon>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon24Cancel","classNames","usePlatform","getTextFromChildren","IconButton","RootComponent","RemovableIos","styles","RemovableCommon","noPadding","children","removePlaceholderString","onRemoveClick","removeButtonTestId","disabled","indent","div","className","content","withPadding","isRemoving","action","indentation","activeMode","hoverMode","onClick","label","data-testid","role","span","offset","aria-hidden","Removable","onRemove","removePlaceholder","align","toggleButtonTestId","restProps","platform","e","preventDefault","baseClassName","ios","alignStart"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,mBAAmB,QAAQ,wBAAqB;AAEzD,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,OAAOC,YAAY,yBAAyB;AAiC5C,qCAAqC,GAErC,MAAMC,kBAAkB,CAAC,EACvBC,SAAS,EACTC,QAAQ,EACRC,uBAAuB,EACvBC,aAAa,EACbC,kBAAkB,EAClBC,QAAQ,EACRC,MAAM,EACkB;IACxB,qBACE,MAACC;QACCC,WAAWhB,WACTM,OAAOW,OAAO,EACd,CAACT,aAAaF,OAAOY,WAAW,EAChC;;YAGD,OAAOT,aAAa,aAAaA,SAAS;gBAAEU,YAAY;YAAM,KAAKV;YAEnEK,uBACC,KAACC;gBAAIC,WAAWhB,WAAWM,OAAOc,MAAM,EAAEd,OAAOe,WAAW;+BAE5D,KAAClB;gBACCmB,YAAW;gBACXC,WAAU;gBACVP,WAAWhB,WAAWM,OAAOc,MAAM,EAAE;gBACrCI,SAASb;gBACTc,OAAOf;gBACPgB,eAAad;gBACbC,UAAUA;0BAEV,cAAA,KAACd;oBAAa4B,MAAK;;;0BAGvB,KAACC;gBAAKZ,WAAWV,OAAOuB,MAAM;gBAAEC,aAAW;;;;AAGjD;AAkCA,OAAO,MAAMC,YAAY,CAAC,EACxBtB,QAAQ,EACRuB,QAAQ,EACRC,oBAAoB,SAAS,EAC7BC,QAAQ,QAAQ,EAChBpB,SAAS,KAAK,EACdqB,kBAAkB,EAClBvB,kBAAkB,EAClBC,QAAQ,EACRL,SAAS,EACT,GAAG4B,WACe;IAClB,MAAMC,WAAWpC;IAEjB,MAAMU,gBAAgB,CAAC2B;QACrBA,EAAEC,cAAc;QAChBP,WAAWM;IACb;IAEA,MAAM5B,0BAAkCR,oBAAoB+B;IAE5D,qBACE,KAAC7B;QACE,GAAGgC,SAAS;QACbI,eAAexC,WACbqC,aAAa,SAAS/B,OAAOmC,GAAG,EAChCP,UAAU,WAAW5B,OAAOoC,UAAU,EACtC5B,UAAUR,OAAOQ,MAAM;kBAGxBuB,aAAa,sBACZ,KAAChC;YACC2B,UAAUrB;YACVsB,mBAAmBA;YACnBvB,yBAAyBA;YACzByB,oBAAoBA;YACpBvB,oBAAoBA;YACpBC,UAAUA;YACVC,QAAQA;sBAEPL;2BAGH,KAACF;YACCI,eAAeA;YACfH,WAAWA;YACXI,oBAAoBA;YACpBF,yBAAyBA;YACzBG,UAAUA;YACVC,QAAQA;sBAEPL;;;AAKX,EAAE"}
@@ -30,6 +30,15 @@
30
30
  border: 0;
31
31
  }
32
32
 
33
+ .ios .action.indentation,
34
+ .action.indentation {
35
+ inline-size: 44px;
36
+ }
37
+
38
+ .ios .action.indentation {
39
+ margin-inline: 2px;
40
+ }
41
+
33
42
  .alignStart .action {
34
43
  align-self: flex-start;
35
44
  }
@@ -0,0 +1,118 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { classNames } from "@vkontakte/vkjs";
5
+ import { useConfigDirection } from "../../hooks/useConfigDirection.js";
6
+ import { useGlobalEventListener } from "../../hooks/useGlobalEventListener.js";
7
+ import { useDOM } from "../../lib/dom.js";
8
+ import { IconButton } from "../IconButton/IconButton.js";
9
+ import { Tappable } from "../Tappable/Tappable.js";
10
+ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
11
+ import styles from "./Removable.module.css";
12
+ /* eslint-enable jsdoc/require-jsdoc */ const RemovableIosWithRemove = ({ onRemove, removePlaceholder, removePlaceholderString, children: childrenProp, toggleButtonTestId, removeButtonTestId, disabled })=>{
13
+ const direction = useConfigDirection();
14
+ const isRtl = direction === 'rtl';
15
+ const { window } = useDOM();
16
+ const removeButtonRef = React.useRef(null);
17
+ const disabledRef = React.useRef(true);
18
+ const [removeOffset, updateRemoveOffset] = React.useState(0);
19
+ useGlobalEventListener(window, 'click', ()=>{
20
+ if (removeOffset > 0) {
21
+ updateRemoveOffset(0);
22
+ }
23
+ }, {
24
+ capture: true
25
+ });
26
+ const onRemoveTransitionEnd = ()=>{
27
+ if (removeOffset > 0) {
28
+ removeButtonRef?.current?.focus();
29
+ } else {
30
+ disabledRef.current = true;
31
+ }
32
+ };
33
+ const onRemoveActivateClick = (e)=>{
34
+ e.stopPropagation();
35
+ if (!removeButtonRef.current) {
36
+ return;
37
+ }
38
+ const { offsetWidth } = removeButtonRef.current;
39
+ disabledRef.current = false;
40
+ updateRemoveOffset(offsetWidth);
41
+ };
42
+ const style = {
43
+ '--vkui_internal_Removable_remove_offset': String(removeOffset ?? 0)
44
+ };
45
+ return /*#__PURE__*/ _jsxs("div", {
46
+ className: classNames(styles.content, isRtl && styles.rtl, 'vkuiInternalRemovable__content'),
47
+ style: style,
48
+ onTransitionEnd: onRemoveTransitionEnd,
49
+ children: [
50
+ /*#__PURE__*/ _jsxs(IconButton, {
51
+ hasActive: false,
52
+ hasHover: false,
53
+ className: classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action'),
54
+ onClick: onRemoveActivateClick,
55
+ disabled: removeOffset > 0 || disabled,
56
+ "data-testid": toggleButtonTestId,
57
+ children: [
58
+ /*#__PURE__*/ _jsx(VisuallyHidden, {
59
+ children: removePlaceholderString
60
+ }),
61
+ /*#__PURE__*/ _jsx("i", {
62
+ className: styles.toggleIn,
63
+ role: "presentation"
64
+ })
65
+ ]
66
+ }),
67
+ typeof childrenProp === 'function' ? childrenProp({
68
+ isRemoving: removeOffset > 0
69
+ }) : childrenProp,
70
+ /*#__PURE__*/ _jsx("span", {
71
+ className: styles.offset,
72
+ "aria-hidden": true
73
+ }),
74
+ /*#__PURE__*/ _jsx(Tappable, {
75
+ Component: "button",
76
+ hasActive: false,
77
+ hasHover: false,
78
+ disabled: disabledRef.current,
79
+ getRootRef: removeButtonRef,
80
+ className: styles.remove,
81
+ onClick: onRemove,
82
+ "data-testid": removeButtonTestId,
83
+ children: /*#__PURE__*/ _jsx("span", {
84
+ className: styles.removeIn,
85
+ children: removePlaceholder
86
+ })
87
+ })
88
+ ]
89
+ });
90
+ };
91
+ const RemovableIosWithIndent = ({ children: childrenProp })=>{
92
+ return /*#__PURE__*/ _jsxs("div", {
93
+ className: classNames(styles.content, 'vkuiInternalRemovable__content'),
94
+ children: [
95
+ /*#__PURE__*/ _jsx("div", {
96
+ className: classNames(styles.action, styles.indentation, 'vkuiInternalRemovable__action')
97
+ }),
98
+ typeof childrenProp === 'function' ? childrenProp({
99
+ isRemoving: false
100
+ }) : childrenProp,
101
+ /*#__PURE__*/ _jsx("span", {
102
+ className: styles.offset,
103
+ "aria-hidden": true
104
+ })
105
+ ]
106
+ });
107
+ };
108
+ const RemovableIos = ({ indent, children, ...restProps })=>{
109
+ return indent ? /*#__PURE__*/ _jsx(RemovableIosWithIndent, {
110
+ children: children
111
+ }) : /*#__PURE__*/ _jsx(RemovableIosWithRemove, {
112
+ ...restProps,
113
+ children: children
114
+ });
115
+ };
116
+ export { RemovableIos };
117
+
118
+ //# sourceMappingURL=RemovableIos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Removable/RemovableIos.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport { type CSSCustomProperties } from '../../types';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Tappable } from '../Tappable/Tappable';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { type RemovableIosRenderProps, type RemovableProps } from './Removable';\nimport styles from './Removable.module.css';\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface RemovableIosOwnProps extends RemovableProps {\n indent?: boolean;\n removePlaceholderString?: string;\n children?: React.ReactNode | ((renderProps: RemovableIosRenderProps) => React.ReactNode);\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nconst RemovableIosWithRemove = ({\n onRemove,\n removePlaceholder,\n removePlaceholderString,\n children: childrenProp,\n toggleButtonTestId,\n removeButtonTestId,\n disabled,\n}: Omit<RemovableIosOwnProps, 'indent'>) => {\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n const { window } = useDOM();\n\n const removeButtonRef = React.useRef<HTMLElement>(null);\n const disabledRef = React.useRef(true);\n const [removeOffset, updateRemoveOffset] = React.useState(0);\n\n useGlobalEventListener(\n window,\n 'click',\n () => {\n if (removeOffset > 0) {\n updateRemoveOffset(0);\n }\n },\n { capture: true },\n );\n\n const onRemoveTransitionEnd = () => {\n if (removeOffset > 0) {\n removeButtonRef?.current?.focus();\n } else {\n disabledRef.current = true;\n }\n };\n\n const onRemoveActivateClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!removeButtonRef.current) {\n return;\n }\n const { offsetWidth } = removeButtonRef.current;\n disabledRef.current = false;\n updateRemoveOffset(offsetWidth);\n };\n\n const style: CSSCustomProperties = {\n '--vkui_internal_Removable_remove_offset': String(removeOffset ?? 0),\n };\n\n return (\n <div\n className={classNames(styles.content, isRtl && styles.rtl, 'vkuiInternalRemovable__content')}\n style={style}\n onTransitionEnd={onRemoveTransitionEnd}\n >\n <IconButton\n hasActive={false}\n hasHover={false}\n className={classNames(styles.action, styles.toggle, 'vkuiInternalRemovable__action')}\n onClick={onRemoveActivateClick}\n disabled={removeOffset > 0 || disabled}\n data-testid={toggleButtonTestId}\n >\n <VisuallyHidden>{removePlaceholderString}</VisuallyHidden>\n <i className={styles.toggleIn} role=\"presentation\" />\n </IconButton>\n {typeof childrenProp === 'function'\n ? childrenProp({ isRemoving: removeOffset > 0 })\n : childrenProp}\n\n <span className={styles.offset} aria-hidden />\n\n <Tappable\n Component=\"button\"\n hasActive={false}\n hasHover={false}\n disabled={disabledRef.current}\n getRootRef={removeButtonRef}\n className={styles.remove}\n onClick={onRemove}\n data-testid={removeButtonTestId}\n >\n <span className={styles.removeIn}>{removePlaceholder}</span>\n </Tappable>\n </div>\n );\n};\n\nconst RemovableIosWithIndent = ({\n children: childrenProp,\n}: Pick<RemovableIosOwnProps, 'children'>) => {\n return (\n <div className={classNames(styles.content, 'vkuiInternalRemovable__content')}>\n <div\n className={classNames(styles.action, styles.indentation, 'vkuiInternalRemovable__action')}\n />\n {typeof childrenProp === 'function' ? childrenProp({ isRemoving: false }) : childrenProp}\n\n <span className={styles.offset} aria-hidden />\n </div>\n );\n};\n\nconst RemovableIos = ({ indent, children, ...restProps }: RemovableIosOwnProps) => {\n return indent ? (\n <RemovableIosWithIndent>{children}</RemovableIosWithIndent>\n ) : (\n <RemovableIosWithRemove {...restProps}>{children}</RemovableIosWithRemove>\n );\n};\n\nexport { RemovableIos };\n"],"names":["React","classNames","useConfigDirection","useGlobalEventListener","useDOM","IconButton","Tappable","VisuallyHidden","styles","RemovableIosWithRemove","onRemove","removePlaceholder","removePlaceholderString","children","childrenProp","toggleButtonTestId","removeButtonTestId","disabled","direction","isRtl","window","removeButtonRef","useRef","disabledRef","removeOffset","updateRemoveOffset","useState","capture","onRemoveTransitionEnd","current","focus","onRemoveActivateClick","e","stopPropagation","offsetWidth","style","String","div","className","content","rtl","onTransitionEnd","hasActive","hasHover","action","toggle","onClick","data-testid","i","toggleIn","role","isRemoving","span","offset","aria-hidden","Component","getRootRef","remove","removeIn","RemovableIosWithIndent","indentation","RemovableIos","indent","restProps"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst alignAfterClassNames = {\n start: styles.alignAfterStart,\n center: styles.alignAfterCenter,\n end: styles.alignAfterEnd,\n};\n\nconst alignBeforeClassNames = {\n start: styles.alignBeforeStart,\n center: styles.alignBeforeCenter,\n end: styles.alignBeforeEnd,\n};\n\nconst alignContentClassNames = {\n start: styles.contentAlignStart,\n center: styles.contentAlignCenter,\n end: styles.contentAlignEnd,\n};\n\ntype Align = 'start' | 'center' | 'end';\n\nexport interface RichCellProps extends TappableProps {\n /**\n * Контейнер для текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Контейнер для текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Контейнер для текста под `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Контейнер для контента под `caption`. Например `<UsersStack size=\"m\" />`.\n */\n bottom?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button) с параметрами:\n *\n * - `mode=\"primary\" size=\"s\"`\n * - `mode=\"secondary\" size=\"s\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `mode=\"horizontal\" gap=\"s\" stretched`.\n */\n actions?: React.ReactNode;\n /**\n * `<Avatar size={40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 28 или текст.\n */\n after?: React.ReactNode;\n /**\n * Текст под `after`.\n */\n afterCaption?: React.ReactNode;\n /**\n * Выравнивание before компонента по вертикали.\n */\n beforeAlign?: Align;\n /**\n * Выравнивание центрального контента по вертикали.\n */\n contentAlign?: Align;\n /**\n * Выравнивание after компонента по вертикали.\n */\n afterAlign?: Align;\n /**\n * Блокировка взаимодействия с компонентом. Убирает анимацию нажатия.\n */\n disabled?: boolean;\n /**\n * Включает многострочный режим для `subhead`, `children`, `text` и `caption`.\n */\n multiline?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RichCell\n */\nexport const RichCell: React.FC<RichCellProps> & {\n Icon: typeof RichCellIcon;\n} = ({\n overTitle,\n children,\n subtitle,\n extraSubtitle,\n before,\n after,\n afterCaption,\n bottom,\n actions,\n multiline,\n beforeAlign = 'start',\n contentAlign = 'start',\n afterAlign = 'start',\n ...restProps\n}: RichCellProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n const withAfter = after || afterCaption;\n\n const afterRender = () => {\n if (!withAfter) {\n return;\n }\n return (\n <div className={styles.contentAfter}>\n {after && <div className={styles.afterChildren}>{after}</div>}\n {afterCaption && <div className={styles.afterCaption}>{afterCaption}</div>}\n </div>\n );\n };\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n !multiline && styles.textEllipsis,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withAfter && styles.withAfter,\n withAfter && alignAfterClassNames[afterAlign],\n before && alignBeforeClassNames[beforeAlign],\n alignContentClassNames[contentAlign],\n )}\n >\n {before && <div className={styles.before}>{before}</div>}\n <div className={styles.in}>\n <div className={styles.content}>\n <div className={styles.contentBefore}>\n {overTitle && (\n <Subhead Component=\"div\" className={styles.overTitle}>\n {overTitle}\n </Subhead>\n )}\n <div className={styles.children}>{children}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n {extraSubtitle && (\n <Subhead Component=\"div\" className={styles.extraSubtitle}>\n {extraSubtitle}\n </Subhead>\n )}\n </div>\n {afterAlign === 'start' && afterRender()}\n </div>\n {bottom && <div className={styles.bottom}>{bottom}</div>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n {afterAlign !== 'start' && afterRender()}\n </Tappable>\n );\n};\n\nRichCell.Icon = RichCellIcon;\n"],"names":["React","classNames","useAdaptivity","Tappable","Subhead","RichCellIcon","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","alignAfterClassNames","start","alignAfterStart","center","alignAfterCenter","end","alignAfterEnd","alignBeforeClassNames","alignBeforeStart","alignBeforeCenter","alignBeforeEnd","alignContentClassNames","contentAlignStart","contentAlignCenter","contentAlignEnd","RichCell","overTitle","children","subtitle","extraSubtitle","before","after","afterCaption","bottom","actions","multiline","beforeAlign","contentAlign","afterAlign","restProps","sizeY","withAfter","afterRender","div","className","contentAfter","afterChildren","baseClassName","host","textEllipsis","in","content","contentBefore","Component","Icon"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAA4B,0BAAuB;AACpE,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,OAAOC,YAAY,wBAAwB;AAE3C,MAAMC,kBAAkB;IACtBC,MAAMF,OAAOG,SAAS;IACtBC,SAASJ,OAAOK,YAAY;AAC9B;AAEA,MAAMC,uBAAuB;IAC3BC,OAAOP,OAAOQ,eAAe;IAC7BC,QAAQT,OAAOU,gBAAgB;IAC/BC,KAAKX,OAAOY,aAAa;AAC3B;AAEA,MAAMC,wBAAwB;IAC5BN,OAAOP,OAAOc,gBAAgB;IAC9BL,QAAQT,OAAOe,iBAAiB;IAChCJ,KAAKX,OAAOgB,cAAc;AAC5B;AAEA,MAAMC,yBAAyB;IAC7BV,OAAOP,OAAOkB,iBAAiB;IAC/BT,QAAQT,OAAOmB,kBAAkB;IACjCR,KAAKX,OAAOoB,eAAe;AAC7B;AAkEA;;CAEC,GACD,OAAO,MAAMC,WAET,CAAC,EACHC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,KAAK,EACLC,YAAY,EACZC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,cAAc,OAAO,EACrBC,eAAe,OAAO,EACtBC,aAAa,OAAO,EACpB,GAAGC,WACW;IACd,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGxC;IAC3B,MAAMyC,YAAYV,SAASC;IAE3B,MAAMU,cAAc;QAClB,IAAI,CAACD,WAAW;YACd;QACF;QACA,qBACE,MAACE;YAAIC,WAAWxC,OAAOyC,YAAY;;gBAChCd,uBAAS,KAACY;oBAAIC,WAAWxC,OAAO0C,aAAa;8BAAGf;;gBAChDC,8BAAgB,KAACW;oBAAIC,WAAWxC,OAAO4B,YAAY;8BAAGA;;;;IAG7D;IAEA,qBACE,MAAC/B;QACE,GAAGsC,SAAS;QACbQ,eAAehD,WACbK,OAAO4C,IAAI,EACX,CAACb,aAAa/B,OAAO6C,YAAY,EACjCT,UAAU,aAAanC,eAAe,CAACmC,MAAM,EAC7CC,aAAarC,OAAOqC,SAAS,EAC7BA,aAAa/B,oBAAoB,CAAC4B,WAAW,EAC7CR,UAAUb,qBAAqB,CAACmB,YAAY,EAC5Cf,sBAAsB,CAACgB,aAAa;;YAGrCP,wBAAU,KAACa;gBAAIC,WAAWxC,OAAO0B,MAAM;0BAAGA;;0BAC3C,MAACa;gBAAIC,WAAWxC,OAAO8C,EAAE;;kCACvB,MAACP;wBAAIC,WAAWxC,OAAO+C,OAAO;;0CAC5B,MAACR;gCAAIC,WAAWxC,OAAOgD,aAAa;;oCACjC1B,2BACC,KAACxB;wCAAQmD,WAAU;wCAAMT,WAAWxC,OAAOsB,SAAS;kDACjDA;;kDAGL,KAACiB;wCAAIC,WAAWxC,OAAOuB,QAAQ;kDAAGA;;oCACjCC,0BAAY,KAACe;wCAAIC,WAAWxC,OAAOwB,QAAQ;kDAAGA;;oCAC9CC,+BACC,KAAC3B;wCAAQmD,WAAU;wCAAMT,WAAWxC,OAAOyB,aAAa;kDACrDA;;;;4BAINS,eAAe,WAAWI;;;oBAE5BT,wBAAU,KAACU;wBAAIC,WAAWxC,OAAO6B,MAAM;kCAAGA;;oBAC1CC,yBAAW,KAACS;wBAAIC,WAAWxC,OAAO8B,OAAO;kCAAGA;;;;YAE9CI,eAAe,WAAWI;;;AAGjC,EAAE;AAEFjB,SAAS6B,IAAI,GAAGnD"}
1
+ {"version":3,"sources":["../../../../src/components/RichCell/RichCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { RichCellIcon } from './RichCellIcon/RichCellIcon';\nimport styles from './RichCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst alignAfterClassNames = {\n start: styles.alignAfterStart,\n center: styles.alignAfterCenter,\n end: styles.alignAfterEnd,\n};\n\nconst alignBeforeClassNames = {\n start: styles.alignBeforeStart,\n center: styles.alignBeforeCenter,\n end: styles.alignBeforeEnd,\n};\n\nconst alignContentClassNames = {\n start: styles.contentAlignStart,\n center: styles.contentAlignCenter,\n end: styles.contentAlignEnd,\n};\n\ntype Align = 'start' | 'center' | 'end';\n\nexport interface RichCellProps extends TappableOmitProps {\n /**\n * Контейнер для текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Контейнер для текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Контейнер для текста под `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Контейнер для контента под `caption`. Например `<UsersStack size=\"m\" />`.\n */\n bottom?: React.ReactNode;\n /**\n * Кнопки-действия. Принимает [`Button`](https://vkcom.github.io/VKUI/#/Button) с параметрами:\n *\n * - `mode=\"primary\" size=\"s\"`\n * - `mode=\"secondary\" size=\"s\"`.\n *\n * Для набора кнопок используйте [`ButtonGroup`](https://vkcom.github.io/VKUI/#/ButtonGroup) с параметрами:\n *\n * - `mode=\"horizontal\" gap=\"s\" stretched`.\n */\n actions?: React.ReactNode;\n /**\n * `<Avatar size={40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 28 или текст.\n */\n after?: React.ReactNode;\n /**\n * Текст под `after`.\n */\n afterCaption?: React.ReactNode;\n /**\n * Выравнивание before компонента по вертикали.\n */\n beforeAlign?: Align;\n /**\n * Выравнивание центрального контента по вертикали.\n */\n contentAlign?: Align;\n /**\n * Выравнивание after компонента по вертикали.\n */\n afterAlign?: Align;\n /**\n * Блокировка взаимодействия с компонентом. Убирает анимацию нажатия.\n */\n disabled?: boolean;\n /**\n * Включает многострочный режим для `subhead`, `children`, `text` и `caption`.\n */\n multiline?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/RichCell\n */\nexport const RichCell: React.FC<RichCellProps> & {\n Icon: typeof RichCellIcon;\n} = ({\n overTitle,\n children,\n subtitle,\n extraSubtitle,\n before,\n after,\n afterCaption,\n bottom,\n actions,\n multiline,\n beforeAlign = 'start',\n contentAlign = 'start',\n afterAlign = 'start',\n ...restProps\n}: RichCellProps) => {\n const { sizeY = 'none' } = useAdaptivity();\n const withAfter = after || afterCaption;\n\n const afterRender = () => {\n if (!withAfter) {\n return;\n }\n return (\n <div className={styles.contentAfter}>\n {after && <div className={styles.afterChildren}>{after}</div>}\n {afterCaption && <div className={styles.afterCaption}>{afterCaption}</div>}\n </div>\n );\n };\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n !multiline && styles.textEllipsis,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withAfter && styles.withAfter,\n withAfter && alignAfterClassNames[afterAlign],\n before && alignBeforeClassNames[beforeAlign],\n alignContentClassNames[contentAlign],\n )}\n >\n {before && <div className={styles.before}>{before}</div>}\n <div className={styles.in}>\n <div className={styles.content}>\n <div className={styles.contentBefore}>\n {overTitle && (\n <Subhead Component=\"div\" className={styles.overTitle}>\n {overTitle}\n </Subhead>\n )}\n <div className={styles.children}>{children}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n {extraSubtitle && (\n <Subhead Component=\"div\" className={styles.extraSubtitle}>\n {extraSubtitle}\n </Subhead>\n )}\n </div>\n {afterAlign === 'start' && afterRender()}\n </div>\n {bottom && <div className={styles.bottom}>{bottom}</div>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n {afterAlign !== 'start' && afterRender()}\n </Tappable>\n );\n};\n\nRichCell.Icon = RichCellIcon;\n"],"names":["React","classNames","useAdaptivity","Tappable","Subhead","RichCellIcon","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","alignAfterClassNames","start","alignAfterStart","center","alignAfterCenter","end","alignAfterEnd","alignBeforeClassNames","alignBeforeStart","alignBeforeCenter","alignBeforeEnd","alignContentClassNames","contentAlignStart","contentAlignCenter","contentAlignEnd","RichCell","overTitle","children","subtitle","extraSubtitle","before","after","afterCaption","bottom","actions","multiline","beforeAlign","contentAlign","afterAlign","restProps","sizeY","withAfter","afterRender","div","className","contentAfter","afterChildren","baseClassName","host","textEllipsis","in","content","contentBefore","Component","Icon"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,OAAOC,YAAY,wBAAwB;AAE3C,MAAMC,kBAAkB;IACtBC,MAAMF,OAAOG,SAAS;IACtBC,SAASJ,OAAOK,YAAY;AAC9B;AAEA,MAAMC,uBAAuB;IAC3BC,OAAOP,OAAOQ,eAAe;IAC7BC,QAAQT,OAAOU,gBAAgB;IAC/BC,KAAKX,OAAOY,aAAa;AAC3B;AAEA,MAAMC,wBAAwB;IAC5BN,OAAOP,OAAOc,gBAAgB;IAC9BL,QAAQT,OAAOe,iBAAiB;IAChCJ,KAAKX,OAAOgB,cAAc;AAC5B;AAEA,MAAMC,yBAAyB;IAC7BV,OAAOP,OAAOkB,iBAAiB;IAC/BT,QAAQT,OAAOmB,kBAAkB;IACjCR,KAAKX,OAAOoB,eAAe;AAC7B;AAkEA;;CAEC,GACD,OAAO,MAAMC,WAET,CAAC,EACHC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,MAAM,EACNC,KAAK,EACLC,YAAY,EACZC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,cAAc,OAAO,EACrBC,eAAe,OAAO,EACtBC,aAAa,OAAO,EACpB,GAAGC,WACW;IACd,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGxC;IAC3B,MAAMyC,YAAYV,SAASC;IAE3B,MAAMU,cAAc;QAClB,IAAI,CAACD,WAAW;YACd;QACF;QACA,qBACE,MAACE;YAAIC,WAAWxC,OAAOyC,YAAY;;gBAChCd,uBAAS,KAACY;oBAAIC,WAAWxC,OAAO0C,aAAa;8BAAGf;;gBAChDC,8BAAgB,KAACW;oBAAIC,WAAWxC,OAAO4B,YAAY;8BAAGA;;;;IAG7D;IAEA,qBACE,MAAC/B;QACE,GAAGsC,SAAS;QACbQ,eAAehD,WACbK,OAAO4C,IAAI,EACX,CAACb,aAAa/B,OAAO6C,YAAY,EACjCT,UAAU,aAAanC,eAAe,CAACmC,MAAM,EAC7CC,aAAarC,OAAOqC,SAAS,EAC7BA,aAAa/B,oBAAoB,CAAC4B,WAAW,EAC7CR,UAAUb,qBAAqB,CAACmB,YAAY,EAC5Cf,sBAAsB,CAACgB,aAAa;;YAGrCP,wBAAU,KAACa;gBAAIC,WAAWxC,OAAO0B,MAAM;0BAAGA;;0BAC3C,MAACa;gBAAIC,WAAWxC,OAAO8C,EAAE;;kCACvB,MAACP;wBAAIC,WAAWxC,OAAO+C,OAAO;;0CAC5B,MAACR;gCAAIC,WAAWxC,OAAOgD,aAAa;;oCACjC1B,2BACC,KAACxB;wCAAQmD,WAAU;wCAAMT,WAAWxC,OAAOsB,SAAS;kDACjDA;;kDAGL,KAACiB;wCAAIC,WAAWxC,OAAOuB,QAAQ;kDAAGA;;oCACjCC,0BAAY,KAACe;wCAAIC,WAAWxC,OAAOwB,QAAQ;kDAAGA;;oCAC9CC,+BACC,KAAC3B;wCAAQmD,WAAU;wCAAMT,WAAWxC,OAAOyB,aAAa;kDACrDA;;;;4BAINS,eAAe,WAAWI;;;oBAE5BT,wBAAU,KAACU;wBAAIC,WAAWxC,OAAO6B,MAAM;kCAAGA;;oBAC1CC,yBAAW,KAACS;wBAAIC,WAAWxC,OAAO8B,OAAO;kCAAGA;;;;YAE9CI,eAAe,WAAWI;;;AAGjC,EAAE;AAEFjB,SAAS6B,IAAI,GAAGnD"}
@@ -10,7 +10,7 @@ import { ScreenSpinnerLoader } from "./ScreenSpinnerLoader.js";
10
10
  import { ScreenSpinnerSwapIcon } from "./ScreenSpinnerSwapIcon.js";
11
11
  /**
12
12
  * @see https://vkcom.github.io/VKUI/#/ScreenSpinner
13
- */ export const ScreenSpinner = ({ style, className, state = 'loading', onClick, cancelLabel, mode, label, customIcon, usePortal, ...restProps })=>{
13
+ */ export const ScreenSpinner = ({ style, className, state = 'loading', onClick, cancelLabel, mode, label, customIcon, usePortal, visibilityDelay, ...restProps })=>{
14
14
  useScrollLock();
15
15
  return /*#__PURE__*/ _jsx(AppRootPortal, {
16
16
  usePortal: usePortal,
@@ -24,6 +24,7 @@ import { ScreenSpinnerSwapIcon } from "./ScreenSpinnerSwapIcon.js";
24
24
  mode: mode,
25
25
  label: label,
26
26
  customIcon: customIcon,
27
+ visibilityDelay: visibilityDelay,
27
28
  children: [
28
29
  /*#__PURE__*/ _jsx(ScreenSpinnerLoader, {
29
30
  ...restProps
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { ScreenSpinnerContainer } from './ScreenSpinnerContainer';\nimport { ScreenSpinnerLoader } from './ScreenSpinnerLoader';\nimport { ScreenSpinnerSwapIcon } from './ScreenSpinnerSwapIcon';\nimport type { ScreenSpinnerProps } from './types';\n\nexport type { ScreenSpinnerProps };\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ScreenSpinner\n */\nexport const ScreenSpinner: React.FC<ScreenSpinnerProps> & {\n Container: typeof ScreenSpinnerContainer;\n Loader: typeof ScreenSpinnerLoader;\n SwapIcon: typeof ScreenSpinnerSwapIcon;\n} = ({\n style,\n className,\n state = 'loading',\n onClick,\n cancelLabel,\n mode,\n label,\n customIcon,\n usePortal,\n ...restProps\n}: ScreenSpinnerProps): React.ReactNode => {\n useScrollLock();\n\n return (\n <AppRootPortal usePortal={usePortal}>\n <PopoutWrapper className={className} style={style} noBackground strategy=\"fixed\">\n <ScreenSpinnerContainer state={state} mode={mode} label={label} customIcon={customIcon}>\n <ScreenSpinnerLoader {...restProps} />\n <ScreenSpinnerSwapIcon onClick={onClick} cancelLabel={cancelLabel} />\n </ScreenSpinnerContainer>\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n\nScreenSpinner.Container = ScreenSpinnerContainer;\nScreenSpinner.Loader = ScreenSpinnerLoader;\nScreenSpinner.SwapIcon = ScreenSpinnerSwapIcon;\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(ScreenSpinner.Container, 'ScreenSpinner.Container');\n defineComponentDisplayNames(ScreenSpinner.Loader, 'ScreenSpinner.Loader');\n defineComponentDisplayNames(ScreenSpinner.SwapIcon, 'ScreenSpinner.SwapIcon');\n}\n"],"names":["React","defineComponentDisplayNames","AppRootPortal","useScrollLock","PopoutWrapper","ScreenSpinnerContainer","ScreenSpinnerLoader","ScreenSpinnerSwapIcon","ScreenSpinner","style","className","state","onClick","cancelLabel","mode","label","customIcon","usePortal","restProps","noBackground","strategy","Container","Loader","SwapIcon","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,2BAA2B,QAAQ,iDAA8C;AAC1F,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,sBAAsB,QAAQ,8BAA2B;AAClE,SAASC,mBAAmB,QAAQ,2BAAwB;AAC5D,SAASC,qBAAqB,QAAQ,6BAA0B;AAKhE;;CAEC,GACD,OAAO,MAAMC,gBAIT,CAAC,EACHC,KAAK,EACLC,SAAS,EACTC,QAAQ,SAAS,EACjBC,OAAO,EACPC,WAAW,EACXC,IAAI,EACJC,KAAK,EACLC,UAAU,EACVC,SAAS,EACT,GAAGC,WACgB;IACnBf;IAEA,qBACE,KAACD;QAAce,WAAWA;kBACxB,cAAA,KAACb;YAAcM,WAAWA;YAAWD,OAAOA;YAAOU,YAAY;YAACC,UAAS;sBACvE,cAAA,MAACf;gBAAuBM,OAAOA;gBAAOG,MAAMA;gBAAMC,OAAOA;gBAAOC,YAAYA;;kCAC1E,KAACV;wBAAqB,GAAGY,SAAS;;kCAClC,KAACX;wBAAsBK,SAASA;wBAASC,aAAaA;;;;;;AAKhE,EAAE;AAEFL,cAAca,SAAS,GAAGhB;AAC1BG,cAAcc,MAAM,GAAGhB;AACvBE,cAAce,QAAQ,GAAGhB;AAEzB,IAAIiB,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCzB,4BAA4BO,cAAca,SAAS,EAAE;IACrDpB,4BAA4BO,cAAcc,MAAM,EAAE;IAClDrB,4BAA4BO,cAAce,QAAQ,EAAE;AACtD"}
1
+ {"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinner.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { ScreenSpinnerContainer } from './ScreenSpinnerContainer';\nimport { ScreenSpinnerLoader } from './ScreenSpinnerLoader';\nimport { ScreenSpinnerSwapIcon } from './ScreenSpinnerSwapIcon';\nimport type { ScreenSpinnerProps } from './types';\n\nexport type { ScreenSpinnerProps };\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ScreenSpinner\n */\nexport const ScreenSpinner: React.FC<ScreenSpinnerProps> & {\n Container: typeof ScreenSpinnerContainer;\n Loader: typeof ScreenSpinnerLoader;\n SwapIcon: typeof ScreenSpinnerSwapIcon;\n} = ({\n style,\n className,\n state = 'loading',\n onClick,\n cancelLabel,\n mode,\n label,\n customIcon,\n usePortal,\n visibilityDelay,\n ...restProps\n}: ScreenSpinnerProps): React.ReactNode => {\n useScrollLock();\n\n return (\n <AppRootPortal usePortal={usePortal}>\n <PopoutWrapper className={className} style={style} noBackground strategy=\"fixed\">\n <ScreenSpinnerContainer\n state={state}\n mode={mode}\n label={label}\n customIcon={customIcon}\n visibilityDelay={visibilityDelay}\n >\n <ScreenSpinnerLoader {...restProps} />\n <ScreenSpinnerSwapIcon onClick={onClick} cancelLabel={cancelLabel} />\n </ScreenSpinnerContainer>\n </PopoutWrapper>\n </AppRootPortal>\n );\n};\n\nScreenSpinner.Container = ScreenSpinnerContainer;\nScreenSpinner.Loader = ScreenSpinnerLoader;\nScreenSpinner.SwapIcon = ScreenSpinnerSwapIcon;\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(ScreenSpinner.Container, 'ScreenSpinner.Container');\n defineComponentDisplayNames(ScreenSpinner.Loader, 'ScreenSpinner.Loader');\n defineComponentDisplayNames(ScreenSpinner.SwapIcon, 'ScreenSpinner.SwapIcon');\n}\n"],"names":["React","defineComponentDisplayNames","AppRootPortal","useScrollLock","PopoutWrapper","ScreenSpinnerContainer","ScreenSpinnerLoader","ScreenSpinnerSwapIcon","ScreenSpinner","style","className","state","onClick","cancelLabel","mode","label","customIcon","usePortal","visibilityDelay","restProps","noBackground","strategy","Container","Loader","SwapIcon","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,2BAA2B,QAAQ,iDAA8C;AAC1F,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,sBAAsB,QAAQ,8BAA2B;AAClE,SAASC,mBAAmB,QAAQ,2BAAwB;AAC5D,SAASC,qBAAqB,QAAQ,6BAA0B;AAKhE;;CAEC,GACD,OAAO,MAAMC,gBAIT,CAAC,EACHC,KAAK,EACLC,SAAS,EACTC,QAAQ,SAAS,EACjBC,OAAO,EACPC,WAAW,EACXC,IAAI,EACJC,KAAK,EACLC,UAAU,EACVC,SAAS,EACTC,eAAe,EACf,GAAGC,WACgB;IACnBhB;IAEA,qBACE,KAACD;QAAce,WAAWA;kBACxB,cAAA,KAACb;YAAcM,WAAWA;YAAWD,OAAOA;YAAOW,YAAY;YAACC,UAAS;sBACvE,cAAA,MAAChB;gBACCM,OAAOA;gBACPG,MAAMA;gBACNC,OAAOA;gBACPC,YAAYA;gBACZE,iBAAiBA;;kCAEjB,KAACZ;wBAAqB,GAAGa,SAAS;;kCAClC,KAACZ;wBAAsBK,SAASA;wBAASC,aAAaA;;;;;;AAKhE,EAAE;AAEFL,cAAcc,SAAS,GAAGjB;AAC1BG,cAAce,MAAM,GAAGjB;AACvBE,cAAcgB,QAAQ,GAAGjB;AAEzB,IAAIkB,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzC1B,4BAA4BO,cAAcc,SAAS,EAAE;IACrDrB,4BAA4BO,cAAce,MAAM,EAAE;IAClDtB,4BAA4BO,cAAcgB,QAAQ,EAAE;AACtD"}
@@ -4,6 +4,7 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
4
4
  import { Footnote } from "../Typography/Footnote/Footnote.js";
5
5
  import { ScreenSpinnerContext } from "./context.js";
6
6
  import styles from "./ScreenSpinner.module.css";
7
+ import stylesDelay from "../../styles/animationVisibilityDelay.module.css";
7
8
  const stateClassNames = {
8
9
  cancelable: styles.stateCancelable,
9
10
  done: styles.stateDone,
@@ -14,7 +15,7 @@ const modeClassNames = {
14
15
  shadow: styles.modeShadow,
15
16
  overlay: styles.modeOverlay
16
17
  };
17
- export const ScreenSpinnerContainer = ({ state = 'loading', mode = 'shadow', customIcon, label, children, ...restProps })=>{
18
+ export const ScreenSpinnerContainer = ({ state = 'loading', mode = 'shadow', customIcon, label, children, visibilityDelay, ...restProps })=>{
18
19
  return /*#__PURE__*/ _jsx(ScreenSpinnerContext.Provider, {
19
20
  value: {
20
21
  state,
@@ -22,7 +23,7 @@ export const ScreenSpinnerContainer = ({ state = 'loading', mode = 'shadow', cus
22
23
  customIcon
23
24
  },
24
25
  children: /*#__PURE__*/ _jsxs(RootComponent, {
25
- baseClassName: classNames(styles.host, modeClassNames[mode], state !== 'loading' && stateClassNames[state], hasReactNode(label) && styles.hasLabel),
26
+ baseClassName: classNames(styles.host, modeClassNames[mode], state !== 'loading' && stateClassNames[state], hasReactNode(label) && styles.hasLabel, visibilityDelay && stylesDelay.visibilityDelay),
26
27
  ...restProps,
27
28
  children: [
28
29
  /*#__PURE__*/ _jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinnerContainer.tsx"],"sourcesContent":["import { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ScreenSpinnerContext } from './context';\nimport { type ScreenSpinnerProps } from './types';\nimport styles from './ScreenSpinner.module.css';\n\nconst stateClassNames = {\n cancelable: styles.stateCancelable,\n done: styles.stateDone,\n error: styles.stateError,\n custom: styles.stateCustom,\n};\n\nconst modeClassNames = {\n shadow: styles.modeShadow,\n overlay: styles.modeOverlay,\n};\n\ntype ScreenSpinnerContainerProps = HTMLAttributesWithRootRef<HTMLSpanElement> &\n Pick<ScreenSpinnerProps, 'state' | 'mode' | 'label' | 'customIcon'>;\n\nexport const ScreenSpinnerContainer = ({\n state = 'loading',\n mode = 'shadow',\n customIcon,\n label,\n children,\n ...restProps\n}: ScreenSpinnerContainerProps) => {\n return (\n <ScreenSpinnerContext.Provider value={{ state, label, customIcon }}>\n <RootComponent\n baseClassName={classNames(\n styles.host,\n modeClassNames[mode],\n state !== 'loading' && stateClassNames[state],\n hasReactNode(label) && styles.hasLabel,\n )}\n {...restProps}\n >\n <div className={styles.iconSlot}>{children}</div>\n {hasReactNode(label) && (\n <Footnote className={styles.label} aria-hidden>\n {label}\n </Footnote>\n )}\n </RootComponent>\n </ScreenSpinnerContext.Provider>\n );\n};\n"],"names":["classNames","hasReactNode","RootComponent","Footnote","ScreenSpinnerContext","styles","stateClassNames","cancelable","stateCancelable","done","stateDone","error","stateError","custom","stateCustom","modeClassNames","shadow","modeShadow","overlay","modeOverlay","ScreenSpinnerContainer","state","mode","customIcon","label","children","restProps","Provider","value","baseClassName","host","hasLabel","div","className","iconSlot","aria-hidden"],"mappings":";AAAA,SAASA,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAE3D,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,oBAAoB,QAAQ,eAAY;AAEjD,OAAOC,YAAY,6BAA6B;AAEhD,MAAMC,kBAAkB;IACtBC,YAAYF,OAAOG,eAAe;IAClCC,MAAMJ,OAAOK,SAAS;IACtBC,OAAON,OAAOO,UAAU;IACxBC,QAAQR,OAAOS,WAAW;AAC5B;AAEA,MAAMC,iBAAiB;IACrBC,QAAQX,OAAOY,UAAU;IACzBC,SAASb,OAAOc,WAAW;AAC7B;AAKA,OAAO,MAAMC,yBAAyB,CAAC,EACrCC,QAAQ,SAAS,EACjBC,OAAO,QAAQ,EACfC,UAAU,EACVC,KAAK,EACLC,QAAQ,EACR,GAAGC,WACyB;IAC5B,qBACE,KAACtB,qBAAqBuB,QAAQ;QAACC,OAAO;YAAEP;YAAOG;YAAOD;QAAW;kBAC/D,cAAA,MAACrB;YACC2B,eAAe7B,WACbK,OAAOyB,IAAI,EACXf,cAAc,CAACO,KAAK,EACpBD,UAAU,aAAaf,eAAe,CAACe,MAAM,EAC7CpB,aAAauB,UAAUnB,OAAO0B,QAAQ;YAEvC,GAAGL,SAAS;;8BAEb,KAACM;oBAAIC,WAAW5B,OAAO6B,QAAQ;8BAAGT;;gBACjCxB,aAAauB,wBACZ,KAACrB;oBAAS8B,WAAW5B,OAAOmB,KAAK;oBAAEW,aAAW;8BAC3CX;;;;;AAMb,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/ScreenSpinner/ScreenSpinnerContainer.tsx"],"sourcesContent":["import { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ScreenSpinnerContext } from './context';\nimport { type ScreenSpinnerProps } from './types';\nimport styles from './ScreenSpinner.module.css';\nimport stylesDelay from '../../styles/animationVisibilityDelay.module.css';\n\nconst stateClassNames = {\n cancelable: styles.stateCancelable,\n done: styles.stateDone,\n error: styles.stateError,\n custom: styles.stateCustom,\n};\n\nconst modeClassNames = {\n shadow: styles.modeShadow,\n overlay: styles.modeOverlay,\n};\n\ntype ScreenSpinnerContainerProps = HTMLAttributesWithRootRef<HTMLSpanElement> &\n Pick<ScreenSpinnerProps, 'state' | 'mode' | 'label' | 'customIcon' | 'visibilityDelay'>;\n\nexport const ScreenSpinnerContainer = ({\n state = 'loading',\n mode = 'shadow',\n customIcon,\n label,\n children,\n visibilityDelay,\n ...restProps\n}: ScreenSpinnerContainerProps) => {\n return (\n <ScreenSpinnerContext.Provider value={{ state, label, customIcon }}>\n <RootComponent\n baseClassName={classNames(\n styles.host,\n modeClassNames[mode],\n state !== 'loading' && stateClassNames[state],\n hasReactNode(label) && styles.hasLabel,\n visibilityDelay && stylesDelay.visibilityDelay,\n )}\n {...restProps}\n >\n <div className={styles.iconSlot}>{children}</div>\n {hasReactNode(label) && (\n <Footnote className={styles.label} aria-hidden>\n {label}\n </Footnote>\n )}\n </RootComponent>\n </ScreenSpinnerContext.Provider>\n );\n};\n"],"names":["classNames","hasReactNode","RootComponent","Footnote","ScreenSpinnerContext","styles","stylesDelay","stateClassNames","cancelable","stateCancelable","done","stateDone","error","stateError","custom","stateCustom","modeClassNames","shadow","modeShadow","overlay","modeOverlay","ScreenSpinnerContainer","state","mode","customIcon","label","children","visibilityDelay","restProps","Provider","value","baseClassName","host","hasLabel","div","className","iconSlot","aria-hidden"],"mappings":";AAAA,SAASA,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAE3D,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,oBAAoB,QAAQ,eAAY;AAEjD,OAAOC,YAAY,6BAA6B;AAChD,OAAOC,iBAAiB,mDAAmD;AAE3E,MAAMC,kBAAkB;IACtBC,YAAYH,OAAOI,eAAe;IAClCC,MAAML,OAAOM,SAAS;IACtBC,OAAOP,OAAOQ,UAAU;IACxBC,QAAQT,OAAOU,WAAW;AAC5B;AAEA,MAAMC,iBAAiB;IACrBC,QAAQZ,OAAOa,UAAU;IACzBC,SAASd,OAAOe,WAAW;AAC7B;AAKA,OAAO,MAAMC,yBAAyB,CAAC,EACrCC,QAAQ,SAAS,EACjBC,OAAO,QAAQ,EACfC,UAAU,EACVC,KAAK,EACLC,QAAQ,EACRC,eAAe,EACf,GAAGC,WACyB;IAC5B,qBACE,KAACxB,qBAAqByB,QAAQ;QAACC,OAAO;YAAER;YAAOG;YAAOD;QAAW;kBAC/D,cAAA,MAACtB;YACC6B,eAAe/B,WACbK,OAAO2B,IAAI,EACXhB,cAAc,CAACO,KAAK,EACpBD,UAAU,aAAaf,eAAe,CAACe,MAAM,EAC7CrB,aAAawB,UAAUpB,OAAO4B,QAAQ,EACtCN,mBAAmBrB,YAAYqB,eAAe;YAE/C,GAAGC,SAAS;;8BAEb,KAACM;oBAAIC,WAAW9B,OAAO+B,QAAQ;8BAAGV;;gBACjCzB,aAAawB,wBACZ,KAACtB;oBAASgC,WAAW9B,OAAOoB,KAAK;oBAAEY,aAAW;8BAC3CZ;;;;;AAMb,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SelectionControl/SelectionControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';\nimport styles from './SelectionControl.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SelectionControlProps\n extends React.ComponentProps<'label'>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'\n > {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SelectionControl\n */\nexport const SelectionControl = (restProps: SelectionControlProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n Component=\"label\"\n baseClassName={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY])}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n {...restProps}\n />\n );\n};\n\nSelectionControl.Label = SelectionControlLabel;\n"],"names":["React","classNames","useAdaptivity","usePlatform","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","SelectionControlLabel","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","SelectionControl","restProps","sizeY","platform","Component","baseClassName","host","activeEffectDelay","Label"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,2BAA2B,QAAQ,2BAAwB;AACpE,SAASC,QAAQ,QAA4B,0BAAuB;AACpE,SAASC,qBAAqB,QAAQ,mDAAgD;AACtF,OAAOC,YAAY,gCAAgC;AAEnD,MAAMC,kBAAkB;IACtBC,MAAMF,OAAOG,SAAS;IACtBC,SAASJ,OAAOK,YAAY;AAC9B;AAUA;;CAEC,GACD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGb;IAC3B,MAAMc,WAAWb;IAEjB,qBACE,KAACE;QACCY,WAAU;QACVC,eAAejB,WAAWM,OAAOY,IAAI,EAAEJ,UAAU,aAAaP,eAAe,CAACO,MAAM;QACpFK,mBAAmBJ,aAAa,QAAQ,MAAMZ;QAC7C,GAAGU,SAAS;;AAGnB,EAAE;AAEFD,iBAAiBQ,KAAK,GAAGf"}
1
+ {"version":3,"sources":["../../../../src/components/SelectionControl/SelectionControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';\nimport styles from './SelectionControl.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SelectionControlProps\n extends React.ComponentProps<'label'>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'\n > {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SelectionControl\n */\nexport const SelectionControl = (restProps: SelectionControlProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n Component=\"label\"\n baseClassName={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY])}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n {...restProps}\n />\n );\n};\n\nSelectionControl.Label = SelectionControlLabel;\n"],"names":["React","classNames","useAdaptivity","usePlatform","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","SelectionControlLabel","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","SelectionControl","restProps","sizeY","platform","Component","baseClassName","host","activeEffectDelay","Label"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,2BAA2B,QAAQ,2BAAwB;AACpE,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,qBAAqB,QAAQ,mDAAgD;AACtF,OAAOC,YAAY,gCAAgC;AAEnD,MAAMC,kBAAkB;IACtBC,MAAMF,OAAOG,SAAS;IACtBC,SAASJ,OAAOK,YAAY;AAC9B;AAUA;;CAEC,GACD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGb;IAC3B,MAAMc,WAAWb;IAEjB,qBACE,KAACE;QACCY,WAAU;QACVC,eAAejB,WAAWM,OAAOY,IAAI,EAAEJ,UAAU,aAAaP,eAAe,CAACO,MAAM;QACpFK,mBAAmBJ,aAAa,QAAQ,MAAMZ;QAC7C,GAAGU,SAAS;;AAGnB,EAAE;AAEFD,iBAAiBQ,KAAK,GAAGf"}