@vkontakte/vkui 7.5.4 → 7.6.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 (489) hide show
  1. package/dist/components/Calendar/Calendar.js +6 -6
  2. package/dist/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/components/CalendarDays/CalendarDays.js +3 -3
  4. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  5. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  6. package/dist/components/CalendarRange/CalendarRange.js +16 -14
  7. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  8. package/dist/components/CalendarRange/utils.d.ts.map +1 -1
  9. package/dist/components/CalendarRange/utils.js +6 -5
  10. package/dist/components/CalendarRange/utils.js.map +1 -1
  11. package/dist/components/Cell/Cell.d.ts.map +1 -1
  12. package/dist/components/Cell/Cell.js +6 -3
  13. package/dist/components/Cell/Cell.js.map +1 -1
  14. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts +5 -3
  15. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.d.ts +4 -0
  17. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  18. package/dist/components/Checkbox/Checkbox.js +4 -2
  19. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  20. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  21. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  22. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +6 -3
  23. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  24. package/dist/components/ChipsInputBase/Chip/Chip.d.ts +41 -2
  25. package/dist/components/ChipsInputBase/Chip/Chip.d.ts.map +1 -1
  26. package/dist/components/ChipsInputBase/Chip/Chip.js +7 -2
  27. package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  28. package/dist/components/ChipsInputBase/types.d.ts +2 -35
  29. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  30. package/dist/components/ChipsInputBase/types.js.map +1 -1
  31. package/dist/components/ContentBadge/ContentBadge.d.ts +1 -1
  32. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  33. package/dist/components/ContentBadge/ContentBadge.js +15 -9
  34. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  35. package/dist/components/ContentCard/ContentCard.d.ts +1 -1
  36. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  37. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  38. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -27
  39. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  40. package/dist/components/CustomSelect/CustomSelect.js +161 -428
  41. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  42. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +3 -1
  43. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  44. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +25 -5
  45. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  46. package/dist/components/CustomSelect/helpers.d.ts +12 -0
  47. package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
  48. package/dist/components/CustomSelect/helpers.js +63 -0
  49. package/dist/components/CustomSelect/helpers.js.map +1 -0
  50. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts +11 -0
  51. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts.map +1 -0
  52. package/dist/components/CustomSelect/hooks/useAfterItems.js +57 -0
  53. package/dist/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  54. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts +13 -0
  55. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts.map +1 -0
  56. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  57. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  58. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts +20 -0
  59. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts.map +1 -0
  60. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  61. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  62. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts +13 -0
  63. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts.map +1 -0
  64. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  65. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  66. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts +15 -0
  67. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts.map +1 -0
  68. package/dist/components/CustomSelect/hooks/useInputValueController.js +43 -0
  69. package/dist/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  70. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts +9 -0
  71. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts.map +1 -0
  72. package/dist/components/CustomSelect/hooks/useScrollListController.js +37 -0
  73. package/dist/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  74. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts +18 -0
  75. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts.map +1 -0
  76. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  77. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  78. package/dist/components/CustomSelect/types.d.ts +33 -0
  79. package/dist/components/CustomSelect/types.d.ts.map +1 -0
  80. package/dist/components/CustomSelect/types.js +3 -0
  81. package/dist/components/CustomSelect/types.js.map +1 -0
  82. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  83. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  84. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  85. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  86. package/dist/components/DateInput/DateInput.js +3 -2
  87. package/dist/components/DateInput/DateInput.js.map +1 -1
  88. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  89. package/dist/components/DateRangeInput/DateRangeInput.js +4 -4
  90. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  91. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.d.ts +1 -1
  92. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  93. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts +3 -2
  94. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  95. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  96. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  97. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  98. package/dist/components/ModalCard/ModalCard.js +4 -2
  99. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  100. package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
  101. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
  102. package/dist/components/ModalCard/ModalCardInternal.js +5 -3
  103. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  104. package/dist/components/ModalCard/types.d.ts +8 -0
  105. package/dist/components/ModalCard/types.d.ts.map +1 -1
  106. package/dist/components/ModalCard/types.js.map +1 -1
  107. package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
  108. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
  109. package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
  110. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
  111. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  112. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  113. package/dist/components/ModalPage/ModalPage.js +3 -1
  114. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  115. package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
  116. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  117. package/dist/components/ModalPage/ModalPageInternal.js +5 -3
  118. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  119. package/dist/components/ModalPage/types.d.ts +8 -0
  120. package/dist/components/ModalPage/types.d.ts.map +1 -1
  121. package/dist/components/ModalPage/types.js.map +1 -1
  122. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  123. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  124. package/dist/components/ModalRoot/ModalRoot.js +4 -2
  125. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  126. package/dist/components/ModalRoot/types.d.ts +6 -0
  127. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  128. package/dist/components/ModalRoot/types.js.map +1 -1
  129. package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
  130. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  131. package/dist/components/ModalRoot/useModalManager.js +2 -1
  132. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  133. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
  134. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  135. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
  136. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  137. package/dist/components/Popover/Popover.d.ts +1 -1
  138. package/dist/components/Popover/Popover.d.ts.map +1 -1
  139. package/dist/components/Popover/Popover.js.map +1 -1
  140. package/dist/components/Popover/usePopover.d.ts +1 -1
  141. package/dist/components/Popover/usePopover.d.ts.map +1 -1
  142. package/dist/components/Popover/usePopover.js +3 -1
  143. package/dist/components/Popover/usePopover.js.map +1 -1
  144. package/dist/components/Popper/Popper.d.ts +2 -2
  145. package/dist/components/Popper/Popper.d.ts.map +1 -1
  146. package/dist/components/Popper/Popper.js +3 -1
  147. package/dist/components/Popper/Popper.js.map +1 -1
  148. package/dist/components/Select/Select.d.ts +2 -1
  149. package/dist/components/Select/Select.d.ts.map +1 -1
  150. package/dist/components/Select/Select.js +5 -2
  151. package/dist/components/Select/Select.js.map +1 -1
  152. package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
  153. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  154. package/dist/components/SelectionControl/SelectionControl.js +22 -6
  155. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  156. package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
  157. package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
  158. package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
  159. package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
  160. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
  161. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  162. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  163. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  164. package/dist/components/SimpleCell/SimpleCell.js +29 -8
  165. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  166. package/dist/components/Skeleton/Skeleton.js +1 -1
  167. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  168. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  169. package/dist/components/Tabs/Tabs.js +19 -9
  170. package/dist/components/Tabs/Tabs.js.map +1 -1
  171. package/dist/components/Tabs/TabsController.d.ts +2 -2
  172. package/dist/components/Tabs/TabsController.d.ts.map +1 -1
  173. package/dist/components/Tabs/TabsController.js.map +1 -1
  174. package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
  175. package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
  176. package/dist/components/Tabs/TabsControllerContext.js +4 -0
  177. package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
  178. package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
  179. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
  180. package/dist/components/Tabs/TabsModeContext.js +1 -2
  181. package/dist/components/Tabs/TabsModeContext.js.map +1 -1
  182. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  183. package/dist/components/TabsItem/TabsItem.js +3 -1
  184. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  185. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  186. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  187. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  188. package/dist/components/Tooltip/useTooltip.d.ts +1 -1
  189. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  190. package/dist/components/Tooltip/useTooltip.js +3 -1
  191. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  192. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  193. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  194. package/dist/components/Typography/Caption/Caption.js +4 -1
  195. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  196. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  197. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  198. package/dist/components/Typography/Footnote/Footnote.js +4 -1
  199. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  200. package/dist/components/Typography/Typography.d.ts +1 -0
  201. package/dist/components/Typography/Typography.d.ts.map +1 -1
  202. package/dist/components/Typography/Typography.js +7 -1
  203. package/dist/components/Typography/Typography.js.map +1 -1
  204. package/dist/components/View/View.d.ts.map +1 -1
  205. package/dist/components/View/View.js +2 -1
  206. package/dist/components/View/View.js.map +1 -1
  207. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  208. package/dist/components/View/ViewInfinite.js +2 -1
  209. package/dist/components/View/ViewInfinite.js.map +1 -1
  210. package/dist/components.css +1 -1
  211. package/dist/components.css.map +1 -1
  212. package/dist/cssm/components/Banner/Banner.module.css +1 -6
  213. package/dist/cssm/components/Calendar/Calendar.js +6 -6
  214. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  215. package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
  216. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  217. package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
  218. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  219. package/dist/cssm/components/CalendarRange/utils.js +6 -5
  220. package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
  221. package/dist/cssm/components/Cell/Cell.js +3 -1
  222. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  223. package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
  224. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  225. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
  226. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  227. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
  228. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
  229. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  230. package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  231. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  232. package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
  233. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  234. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  235. package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
  236. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  237. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
  238. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  239. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  240. package/dist/cssm/components/CustomSelect/helpers.js +62 -0
  241. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  242. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
  243. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  244. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  245. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  246. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  247. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  248. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  249. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  250. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
  251. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  252. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
  253. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  254. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  255. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  256. package/dist/cssm/components/CustomSelect/types.js +3 -0
  257. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  258. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  259. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  260. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  261. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  262. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
  263. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  264. package/dist/cssm/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  265. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  266. package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
  267. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  268. package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
  269. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  270. package/dist/cssm/components/ModalCard/types.js.map +1 -1
  271. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
  272. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
  273. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
  274. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
  275. package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
  276. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  277. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
  278. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  279. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  280. package/dist/cssm/components/ModalPage/types.js.map +1 -1
  281. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
  282. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  283. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  284. package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
  285. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  286. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
  287. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  288. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  289. package/dist/cssm/components/Popover/usePopover.js +2 -1
  290. package/dist/cssm/components/Popover/usePopover.js.map +1 -1
  291. package/dist/cssm/components/Popper/Popper.js +2 -1
  292. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  293. package/dist/cssm/components/RichCell/RichCell.module.css +4 -2
  294. package/dist/cssm/components/Select/Select.js +1 -1
  295. package/dist/cssm/components/Select/Select.js.map +1 -1
  296. package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
  297. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  298. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
  299. package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
  300. package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
  301. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  302. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  303. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  304. package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
  305. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  306. package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
  307. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  308. package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
  309. package/dist/cssm/components/Tabs/Tabs.js +19 -9
  310. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  311. package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
  312. package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
  313. package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
  314. package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
  315. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
  316. package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
  317. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  318. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  319. package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
  320. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  321. package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
  322. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  323. package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
  324. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  325. package/dist/cssm/components/Typography/Typography.js +7 -1
  326. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  327. package/dist/cssm/components/View/View.js +2 -1
  328. package/dist/cssm/components/View/View.js.map +1 -1
  329. package/dist/cssm/components/View/View.module.css +1 -1
  330. package/dist/cssm/components/View/ViewInfinite.js +2 -1
  331. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  332. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  333. package/dist/cssm/hooks/useCalendar.js +6 -4
  334. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  335. package/dist/cssm/hooks/useFloatingElement.js +3 -2
  336. package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
  337. package/dist/cssm/hooks/useTodayDate.js +3 -2
  338. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  339. package/dist/cssm/index.js.map +1 -1
  340. package/dist/cssm/lib/accessibility.js +8 -0
  341. package/dist/cssm/lib/accessibility.js.map +1 -1
  342. package/dist/cssm/lib/calendar.js +9 -7
  343. package/dist/cssm/lib/calendar.js.map +1 -1
  344. package/dist/cssm/lib/date.js +66 -3
  345. package/dist/cssm/lib/date.js.map +1 -1
  346. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  347. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  348. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  349. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  350. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  351. package/dist/cssm/lib/utils.js +1 -0
  352. package/dist/cssm/lib/utils.js.map +1 -1
  353. package/dist/cssm/styles/dynamicTokens.css +14 -2
  354. package/dist/cssm/styles/themes.css +1 -1
  355. package/dist/hooks/useCalendar.d.ts.map +1 -1
  356. package/dist/hooks/useCalendar.js +6 -4
  357. package/dist/hooks/useCalendar.js.map +1 -1
  358. package/dist/hooks/useFloatingElement.d.ts +1 -1
  359. package/dist/hooks/useFloatingElement.d.ts.map +1 -1
  360. package/dist/hooks/useFloatingElement.js +3 -2
  361. package/dist/hooks/useFloatingElement.js.map +1 -1
  362. package/dist/hooks/useTodayDate.d.ts.map +1 -1
  363. package/dist/hooks/useTodayDate.js +3 -2
  364. package/dist/hooks/useTodayDate.js.map +1 -1
  365. package/dist/index.d.ts +4 -2
  366. package/dist/index.d.ts.map +1 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/lib/accessibility.d.ts +1 -1
  369. package/dist/lib/accessibility.d.ts.map +1 -1
  370. package/dist/lib/accessibility.js +8 -0
  371. package/dist/lib/accessibility.js.map +1 -1
  372. package/dist/lib/calendar.d.ts.map +1 -1
  373. package/dist/lib/calendar.js +9 -7
  374. package/dist/lib/calendar.js.map +1 -1
  375. package/dist/lib/date.d.ts +31 -1
  376. package/dist/lib/date.d.ts.map +1 -1
  377. package/dist/lib/date.js +67 -3
  378. package/dist/lib/date.js.map +1 -1
  379. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
  380. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  381. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  382. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  383. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
  384. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  385. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  386. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  387. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  388. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  389. package/dist/lib/utils.d.ts +1 -0
  390. package/dist/lib/utils.d.ts.map +1 -1
  391. package/dist/lib/utils.js +1 -0
  392. package/dist/lib/utils.js.map +1 -1
  393. package/dist/vkui.css +1 -1
  394. package/dist/vkui.css.map +1 -1
  395. package/package.json +6 -7
  396. package/src/components/Banner/Banner.module.css +1 -6
  397. package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
  398. package/src/components/Calendar/Calendar.tsx +6 -6
  399. package/src/components/CalendarDays/CalendarDays.tsx +3 -3
  400. package/src/components/CalendarRange/CalendarRange.tsx +15 -20
  401. package/src/components/CalendarRange/utils.ts +7 -6
  402. package/src/components/Cell/Cell.tsx +3 -0
  403. package/src/components/Checkbox/Checkbox.tsx +6 -0
  404. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
  405. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
  406. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
  407. package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  408. package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
  409. package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
  410. package/src/components/ChipsInputBase/types.ts +2 -45
  411. package/src/components/ContentBadge/ContentBadge.tsx +18 -12
  412. package/src/components/ContentCard/ContentCard.tsx +1 -1
  413. package/src/components/CustomSelect/CustomSelect.tsx +216 -562
  414. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  415. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
  416. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
  417. package/src/components/CustomSelect/helpers.ts +103 -0
  418. package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
  419. package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
  420. package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
  421. package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
  422. package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
  423. package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
  424. package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
  425. package/src/components/CustomSelect/types.ts +38 -0
  426. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
  427. package/src/components/DateInput/DateInput.tsx +9 -3
  428. package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
  429. package/src/components/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx +1 -1
  430. package/src/components/MiniInfoCell/MiniInfoCell.tsx +8 -3
  431. package/src/components/ModalCard/ModalCard.tsx +2 -0
  432. package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
  433. package/src/components/ModalCard/types.ts +8 -0
  434. package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
  435. package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
  436. package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
  437. package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
  438. package/src/components/ModalPage/ModalPage.module.css +1 -0
  439. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  440. package/src/components/ModalPage/ModalPage.tsx +2 -0
  441. package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
  442. package/src/components/ModalPage/types.ts +8 -0
  443. package/src/components/ModalRoot/ModalRoot.tsx +19 -6
  444. package/src/components/ModalRoot/types.ts +7 -0
  445. package/src/components/ModalRoot/useModalManager.tsx +4 -0
  446. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
  447. package/src/components/Popover/Popover.tsx +1 -0
  448. package/src/components/Popover/usePopover.tsx +2 -0
  449. package/src/components/Popper/Popper.tsx +3 -0
  450. package/src/components/RichCell/RichCell.module.css +4 -2
  451. package/src/components/RichCell/RichCell.module.css.d.ts.map +1 -1
  452. package/src/components/Select/Select.tsx +5 -5
  453. package/src/components/SelectionControl/SelectionControl.module.css +6 -3
  454. package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
  455. package/src/components/SelectionControl/SelectionControl.tsx +30 -8
  456. package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
  457. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  458. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
  459. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
  460. package/src/components/SimpleCell/SimpleCell.tsx +5 -0
  461. package/src/components/Skeleton/Skeleton.tsx +1 -1
  462. package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
  463. package/src/components/Tabs/Tabs.tsx +16 -12
  464. package/src/components/Tabs/TabsController.ts +2 -2
  465. package/src/components/Tabs/TabsControllerContext.ts +7 -0
  466. package/src/components/Tabs/TabsModeContext.ts +0 -3
  467. package/src/components/TabsItem/TabsItem.tsx +5 -9
  468. package/src/components/Tooltip/Tooltip.tsx +1 -0
  469. package/src/components/Tooltip/useTooltip.tsx +2 -0
  470. package/src/components/Typography/Caption/Caption.tsx +14 -6
  471. package/src/components/Typography/Footnote/Footnote.tsx +10 -6
  472. package/src/components/Typography/Typography.tsx +9 -2
  473. package/src/components/View/View.module.css +1 -1
  474. package/src/components/View/View.tsx +2 -1
  475. package/src/components/View/ViewInfinite.tsx +2 -1
  476. package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  477. package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
  478. package/src/hooks/useCalendar.ts +6 -4
  479. package/src/hooks/useFloatingElement.tsx +2 -0
  480. package/src/hooks/useTodayDate.ts +3 -2
  481. package/src/index.ts +5 -3
  482. package/src/lib/accessibility.ts +4 -0
  483. package/src/lib/calendar.ts +8 -12
  484. package/src/lib/date.ts +82 -3
  485. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
  486. package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
  487. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  488. package/src/lib/utils.ts +3 -0
  489. package/src/styles/dynamicTokens.css +13 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport type { HasOnlyExpectedProps } from '../../types';\nimport {\n CustomSelect,\n type CustomSelectOptionInterface,\n type SelectProps,\n} from '../CustomSelect/CustomSelect';\nimport { NativeSelect, type NativeSelectProps } from '../NativeSelect/NativeSelect';\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkui.io/components/select\n */\nexport const Select = <OptionT extends CustomSelectOptionInterface>({\n children,\n className,\n ...props\n}: SelectProps<OptionT>): React.ReactNode => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n clearButtonTestId,\n dropdownOffsetDistance,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight,\n labelTextTestId,\n nativeSelectTestId,\n after,\n mode,\n pattern,\n minLength,\n maxLength,\n readOnly,\n getSelectInputRef,\n overscrollBehavior,\n beforeAlign,\n afterAlign,\n onInputKeyDown,\n ...restProps\n } = props;\n\n const { deviceType } = useAdaptivityConditionalRender();\n\n const nativeProps: HasOnlyExpectedProps<typeof restProps, NativeSelectProps> = restProps;\n\n return (\n <React.Fragment>\n {deviceType.desktop && (\n <CustomSelect className={classNames(className, deviceType.desktop.className)} {...props} />\n )}\n {deviceType.mobile && (\n <NativeSelect\n className={classNames(className, deviceType.mobile.className)}\n {...nativeProps}\n >\n {options.map(({ label, value, disabled }) => (\n <option value={value} key={`${value}`} disabled={disabled}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","useAdaptivityConditionalRender","CustomSelect","NativeSelect","Select","children","className","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","after","mode","pattern","minLength","maxLength","readOnly","getSelectInputRef","overscrollBehavior","beforeAlign","afterAlign","onInputKeyDown","restProps","deviceType","nativeProps","Fragment","desktop","mobile","map","label","value","disabled","option"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,8BAA8B,QAAQ,sDAA6C;AAE5F,SACEC,YAAY,QAGP,kCAA+B;AACtC,SAASC,YAAY,QAAgC,kCAA+B;AAGpF;;CAEC,GACD,OAAO,MAAMC,SAAS;QAA8C,EAClEC,QAAQ,EACRC,SAAS,EAEY,WADlBC;QAFHF;QACAC;;IAGA,MAAM,EACJE,UAAU,EAAE,EACZC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,cAAc,EACdC,QAAQ,EACRC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,kBAAkB,EAClBC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,UAAU,EACVC,cAAc,EAEf,GAAGhC,OADCiC,uCACDjC;QAjCFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,MAAM,EAAEE,UAAU,EAAE,GAAGxC;IAEvB,MAAMyC,cAAyEF;IAE/E,qBACE,MAACzC,MAAM4C,QAAQ;;YACZF,WAAWG,OAAO,kBACjB,KAAC1C;gBAAaI,WAAWN,WAAWM,WAAWmC,WAAWG,OAAO,CAACtC,SAAS;eAAOC;YAEnFkC,WAAWI,MAAM,kBAChB,KAAC1C;gBACCG,WAAWN,WAAWM,WAAWmC,WAAWI,MAAM,CAACvC,SAAS;eACxDoC;0BAEHlC,QAAQsC,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACtC,KAACC;wBAAOF,OAAOA;wBAAwBC,UAAUA;kCAC9CF;uBADwB,GAAGC,OAAO;;;;AAQjD,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport type { HasOnlyExpectedProps } from '../../types';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { type CustomSelectOptionInterface } from '../CustomSelect/types';\nimport { NativeSelect, type NativeSelectProps } from '../NativeSelect/NativeSelect';\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkui.io/components/select\n */\nexport const Select = <OptionT extends CustomSelectOptionInterface>({\n children,\n className,\n ...props\n}: SelectProps<OptionT>): React.ReactNode => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n clearButtonTestId,\n dropdownOffsetDistance,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight,\n labelTextTestId,\n nativeSelectTestId,\n after,\n mode,\n pattern,\n minLength,\n maxLength,\n readOnly,\n getSelectInputRef,\n overscrollBehavior,\n beforeAlign,\n afterAlign,\n onInputKeyDown,\n accessible,\n fetchingCompletedLabel,\n fetchingInProgressLabel,\n ...restProps\n } = props;\n\n const { deviceType } = useAdaptivityConditionalRender();\n\n const nativeProps: HasOnlyExpectedProps<typeof restProps, NativeSelectProps> = restProps;\n\n return (\n <React.Fragment>\n {deviceType.desktop && (\n <CustomSelect className={classNames(className, deviceType.desktop.className)} {...props} />\n )}\n {deviceType.mobile && (\n <NativeSelect\n className={classNames(className, deviceType.mobile.className)}\n {...nativeProps}\n >\n {options.map(({ label, value, disabled }) => (\n <option value={value} key={`${value}`} disabled={disabled}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","useAdaptivityConditionalRender","CustomSelect","NativeSelect","Select","children","className","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","after","mode","pattern","minLength","maxLength","readOnly","getSelectInputRef","overscrollBehavior","beforeAlign","afterAlign","onInputKeyDown","accessible","fetchingCompletedLabel","fetchingInProgressLabel","restProps","deviceType","nativeProps","Fragment","desktop","mobile","map","label","value","disabled","option"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,8BAA8B,QAAQ,sDAA6C;AAE5F,SAASC,YAAY,QAA0B,kCAA+B;AAE9E,SAASC,YAAY,QAAgC,kCAA+B;AAGpF;;CAEC,GACD,OAAO,MAAMC,SAAS;QAA8C,EAClEC,QAAQ,EACRC,SAAS,EAEY,WADlBC;QAFHF;QACAC;;IAGA,MAAM,EACJE,UAAU,EAAE,EACZC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,cAAc,EACdC,QAAQ,EACRC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,kBAAkB,EAClBC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,UAAU,EACVC,cAAc,EACdC,UAAU,EACVC,sBAAsB,EACtBC,uBAAuB,EAExB,GAAGnC,OADCoC,uCACDpC;QApCFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,MAAM,EAAEE,UAAU,EAAE,GAAG3C;IAEvB,MAAM4C,cAAyEF;IAE/E,qBACE,MAAC5C,MAAM+C,QAAQ;;YACZF,WAAWG,OAAO,kBACjB,KAAC7C;gBAAaI,WAAWN,WAAWM,WAAWsC,WAAWG,OAAO,CAACzC,SAAS;eAAOC;YAEnFqC,WAAWI,MAAM,kBAChB,KAAC7C;gBACCG,WAAWN,WAAWM,WAAWsC,WAAWI,MAAM,CAAC1C,SAAS;eACxDuC;0BAEHrC,QAAQyC,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACtC,KAACC;wBAAOF,OAAOA;wBAAwBC,UAAUA;kCAC9CF;uBADwB,GAAGC,OAAO;;;;AAQjD,EAAE"}
@@ -3,12 +3,16 @@ import type { HasRootRef } from '../../types';
3
3
  import { type TappableOmitProps } from '../Tappable/Tappable';
4
4
  import { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';
5
5
  export interface SelectionControlProps extends React.ComponentProps<'label'>, HasRootRef<HTMLLabelElement>, Pick<TappableOmitProps, 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'> {
6
+ /**
7
+ * Отключает отступы. При использовании этого свойства, значение по умолчанию для свойств `hoverMode` и `activeMode` становится `"opacity"`.
8
+ */
9
+ noPadding?: boolean;
6
10
  }
7
11
  /**
8
12
  * @see https://vkui.io/components/selection-control
9
13
  */
10
14
  export declare const SelectionControl: {
11
- (restProps: SelectionControlProps): React.ReactNode;
15
+ ({ noPadding, hoverMode: hoverModeProp, activeMode: activeModeProp, ...restProps }: SelectionControlProps): React.ReactNode;
12
16
  Label: typeof SelectionControlLabel;
13
17
  };
14
18
  //# sourceMappingURL=SelectionControl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionControl.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAQtF,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EACnC,UAAU,CAAC,gBAAgB,CAAC,EAC5B,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CACxF;CAAG;AAER;;GAEG;AACH,eAAO,MAAM,gBAAgB;gBAAe,qBAAqB,GAAG,KAAK,CAAC,SAAS;;CAYlF,CAAC"}
1
+ {"version":3,"file":"SelectionControl.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAQtF,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EACnC,UAAU,CAAC,gBAAgB,CAAC,EAC5B,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CACxF;IACH;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;wFAK1B,qBAAqB,GAAG,KAAK,CAAC,SAAS;;CAuBzC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
+ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
5
  import * as React from "react";
5
6
  import { classNames } from "@vkontakte/vkjs";
@@ -7,6 +8,7 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
7
8
  import { usePlatform } from "../../hooks/usePlatform.js";
8
9
  import { DEFAULT_ACTIVE_EFFECT_DELAY } from "../Clickable/useState.js";
9
10
  import { Tappable } from "../Tappable/Tappable.js";
11
+ import { SelectionControlContext } from "./SelectionControlContext.js";
10
12
  import { SelectionControlLabel } from "./SelectionControlLabel/SelectionControlLabel.js";
11
13
  const sizeYClassNames = {
12
14
  none: "vkuiSelectionControl__sizeYNone",
@@ -14,14 +16,28 @@ const sizeYClassNames = {
14
16
  };
15
17
  /**
16
18
  * @see https://vkui.io/components/selection-control
17
- */ export const SelectionControl = (restProps)=>{
19
+ */ export const SelectionControl = (_param)=>{
20
+ var { noPadding = false, hoverMode: hoverModeProp, activeMode: activeModeProp } = _param, restProps = _object_without_properties(_param, [
21
+ "noPadding",
22
+ "hoverMode",
23
+ "activeMode"
24
+ ]);
18
25
  const { sizeY = 'none' } = useAdaptivity();
19
26
  const platform = usePlatform();
20
- return /*#__PURE__*/ _jsx(Tappable, _object_spread({
21
- Component: "label",
22
- baseClassName: classNames("vkuiSelectionControl__host", sizeY !== 'regular' && sizeYClassNames[sizeY]),
23
- activeEffectDelay: platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY
24
- }, restProps));
27
+ const hoverMode = hoverModeProp || (noPadding ? 'opacity' : 'background');
28
+ const activeMode = activeModeProp || (noPadding ? 'opacity' : 'background');
29
+ return /*#__PURE__*/ _jsx(SelectionControlContext.Provider, {
30
+ value: {
31
+ noPadding
32
+ },
33
+ children: /*#__PURE__*/ _jsx(Tappable, _object_spread({
34
+ Component: "label",
35
+ baseClassName: classNames("vkuiSelectionControl__host", sizeY !== 'regular' && sizeYClassNames[sizeY], !noPadding && "vkuiSelectionControl__withPadding"),
36
+ activeEffectDelay: platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY,
37
+ hoverMode: hoverMode,
38
+ activeMode: activeMode
39
+ }, restProps))
40
+ });
25
41
  };
26
42
  SelectionControl.Label = SelectionControlLabel;
27
43
 
@@ -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 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://vkui.io/components/selection-control\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","sizeYClassNames","none","compact","SelectionControl","restProps","sizeY","platform","Component","baseClassName","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;AAGtF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAUA;;CAEC,GACD,OAAO,MAAMC,mBAAmB,CAACC;IAC/B,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGV;IAC3B,MAAMW,WAAWV;IAEjB,qBACE,KAACE;QACCS,WAAU;QACVC,eAAed,yCAAwBW,UAAU,aAAaL,eAAe,CAACK,MAAM;QACpFI,mBAAmBH,aAAa,QAAQ,MAAMT;OAC1CO;AAGV,EAAE;AAEFD,iBAAiBO,KAAK,GAAGX"}
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 { SelectionControlContext } from './SelectionControlContext';\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 * Отключает отступы. При использовании этого свойства, значение по умолчанию для свойств `hoverMode` и `activeMode` становится `\"opacity\"`.\n */\n noPadding?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/selection-control\n */\nexport const SelectionControl = ({\n noPadding = false,\n hoverMode: hoverModeProp,\n activeMode: activeModeProp,\n ...restProps\n}: SelectionControlProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n const hoverMode = hoverModeProp || (noPadding ? 'opacity' : 'background');\n const activeMode = activeModeProp || (noPadding ? 'opacity' : 'background');\n\n return (\n <SelectionControlContext.Provider value={{ noPadding }}>\n <Tappable\n Component=\"label\"\n baseClassName={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !noPadding && styles.withPadding,\n )}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n hoverMode={hoverMode}\n activeMode={activeMode}\n {...restProps}\n />\n </SelectionControlContext.Provider>\n );\n};\n\nSelectionControl.Label = SelectionControlLabel;\n"],"names":["React","classNames","useAdaptivity","usePlatform","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","SelectionControlContext","SelectionControlLabel","sizeYClassNames","none","compact","SelectionControl","noPadding","hoverMode","hoverModeProp","activeMode","activeModeProp","restProps","sizeY","platform","Provider","value","Component","baseClassName","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,uBAAuB,QAAQ,+BAA4B;AACpE,SAASC,qBAAqB,QAAQ,mDAAgD;AAGtF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAeA;;CAEC,GACD,OAAO,MAAMC,mBAAmB;QAAC,EAC/BC,YAAY,KAAK,EACjBC,WAAWC,aAAa,EACxBC,YAAYC,cAAc,EAEJ,WADnBC;QAHHL;QACAC;QACAE;;IAGA,MAAM,EAAEG,QAAQ,MAAM,EAAE,GAAGhB;IAC3B,MAAMiB,WAAWhB;IAEjB,MAAMU,YAAYC,iBAAkBF,CAAAA,YAAY,YAAY,YAAW;IACvE,MAAMG,aAAaC,kBAAmBJ,CAAAA,YAAY,YAAY,YAAW;IAEzE,qBACE,KAACN,wBAAwBc,QAAQ;QAACC,OAAO;YAAET;QAAU;kBACnD,cAAA,KAACP;YACCiB,WAAU;YACVC,eAAetB,yCAEbiB,UAAU,aAAaV,eAAe,CAACU,MAAM,EAC7C,CAACN;YAEHY,mBAAmBL,aAAa,QAAQ,MAAMf;YAC9CS,WAAWA;YACXE,YAAYA;WACRE;;AAIZ,EAAE;AAEFN,iBAAiBc,KAAK,GAAGlB"}
@@ -0,0 +1,7 @@
1
+ export declare const SelectionControlContext: import("react").Context<{
2
+ noPadding: boolean;
3
+ }>;
4
+ export declare const useSelectionControlContext: () => {
5
+ noPadding: boolean;
6
+ };
7
+ //# sourceMappingURL=SelectionControlContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionControlContext.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionControl/SelectionControlContext.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB;eAA8B,OAAO;EAEvE,CAAC;AAEH,eAAO,MAAM,0BAA0B;eAJ2B,OAAO;CAIU,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { createContext, useContext } from "react";
2
+ export const SelectionControlContext = createContext({
3
+ noPadding: false
4
+ });
5
+ export const useSelectionControlContext = ()=>useContext(SelectionControlContext);
6
+
7
+ //# sourceMappingURL=SelectionControlContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SelectionControl/SelectionControlContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const SelectionControlContext = createContext<{ noPadding: boolean }>({\n noPadding: false,\n});\n\nexport const useSelectionControlContext = () => useContext(SelectionControlContext);\n"],"names":["createContext","useContext","SelectionControlContext","noPadding","useSelectionControlContext"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,QAAQ;AAElD,OAAO,MAAMC,0BAA0BF,cAAsC;IAC3EG,WAAW;AACb,GAAG;AAEH,OAAO,MAAMC,6BAA6B,IAAMH,WAAWC,yBAAyB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionControlLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx"],"names":[],"mappings":"AAeA,UAAU,0BAA2B,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACtE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,UAAU,EACV,WAAW,EACX,GAAG,SAAS,EACb,EAAE,0BAA0B,2CAiB5B"}
1
+ {"version":3,"file":"SelectionControlLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx"],"names":[],"mappings":"AAgBA,UAAU,0BAA2B,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACtE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,UAAU,EACV,WAAW,EACX,GAAG,SAAS,EACb,EAAE,0BAA0B,2CAsB5B"}
@@ -8,6 +8,7 @@ import { useAdaptivity } from "../../../hooks/useAdaptivity.js";
8
8
  import { RootComponent } from "../../RootComponent/RootComponent.js";
9
9
  import { Footnote } from "../../Typography/Footnote/Footnote.js";
10
10
  import { Text } from "../../Typography/Text/Text.js";
11
+ import { useSelectionControlContext } from "../SelectionControlContext.js";
11
12
  const sizeYClassNames = {
12
13
  none: "vkuiSelectionControlLabel__sizeYNone",
13
14
  compact: "vkuiSelectionControlLabel__sizeYCompact"
@@ -18,9 +19,10 @@ export function SelectionControlLabel(_param) {
18
19
  "titleAfter",
19
20
  "description"
20
21
  ]);
22
+ const { noPadding } = useSelectionControlContext();
21
23
  const { sizeY = 'none' } = useAdaptivity();
22
24
  return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
23
- baseClassName: classNames("vkuiSelectionControlLabel__host", sizeY !== 'regular' && sizeYClassNames[sizeY])
25
+ baseClassName: classNames("vkuiSelectionControlLabel__host", sizeY !== 'regular' && sizeYClassNames[sizeY], !noPadding && "vkuiSelectionControlLabel__withPadding")
24
26
  }, restProps), {
25
27
  children: [
26
28
  /*#__PURE__*/ _jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../hooks/useAdaptivity';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { Footnote } from '../../Typography/Footnote/Footnote';\nimport { Text } from '../../Typography/Text/Text';\nimport styles from './SelectionControlLabel.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\ninterface SelectionControlLabelProps extends React.ComponentProps<'div'> {\n description?: React.ReactNode;\n titleAfter?: React.ReactNode;\n}\n\nexport function SelectionControlLabel({\n children,\n titleAfter,\n description,\n ...restProps\n}: SelectionControlLabelProps) {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY])}\n {...restProps}\n >\n <div className={styles.titleLayout}>\n <Text className={styles.title}>{children}</Text>\n <div className={styles.titleAfter}>{titleAfter}</div>\n </div>\n {hasReactNode(description) && (\n <Footnote className={styles.description}>{description}</Footnote>\n )}\n </RootComponent>\n );\n}\n"],"names":["classNames","hasReactNode","useAdaptivity","RootComponent","Footnote","Text","sizeYClassNames","none","compact","SelectionControlLabel","children","titleAfter","description","restProps","sizeY","baseClassName","div","className"],"mappings":"AAAA;;;;;AACA,sCAAsC,GAEtC,SAASA,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,kCAA+B;AAC7D,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,QAAQ,QAAQ,wCAAqC;AAC9D,SAASC,IAAI,QAAQ,gCAA6B;AAGlD,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAOA,OAAO,SAASC,sBAAsB;QAAA,EACpCC,QAAQ,EACRC,UAAU,EACVC,WAAW,EAEgB,GALS,QAIjCC,uCAJiC;QACpCH;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAGZ;IAE3B,qBACE,MAACC;QACCY,eAAef,8CAAwBc,UAAU,aAAaR,eAAe,CAACQ,MAAM;OAChFD;;0BAEJ,MAACG;gBAAIC,SAAS;;kCACZ,KAACZ;wBAAKY,SAAS;kCAAiBP;;kCAChC,KAACM;wBAAIC,SAAS;kCAAsBN;;;;YAErCV,aAAaW,8BACZ,KAACR;gBAASa,SAAS;0BAAuBL;;;;AAIlD"}
1
+ {"version":3,"sources":["../../../../src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../hooks/useAdaptivity';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { Footnote } from '../../Typography/Footnote/Footnote';\nimport { Text } from '../../Typography/Text/Text';\nimport { useSelectionControlContext } from '../SelectionControlContext';\nimport styles from './SelectionControlLabel.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\ninterface SelectionControlLabelProps extends React.ComponentProps<'div'> {\n description?: React.ReactNode;\n titleAfter?: React.ReactNode;\n}\n\nexport function SelectionControlLabel({\n children,\n titleAfter,\n description,\n ...restProps\n}: SelectionControlLabelProps) {\n const { noPadding } = useSelectionControlContext();\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <RootComponent\n baseClassName={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !noPadding && styles.withPadding,\n )}\n {...restProps}\n >\n <div className={styles.titleLayout}>\n <Text className={styles.title}>{children}</Text>\n <div className={styles.titleAfter}>{titleAfter}</div>\n </div>\n {hasReactNode(description) && (\n <Footnote className={styles.description}>{description}</Footnote>\n )}\n </RootComponent>\n );\n}\n"],"names":["classNames","hasReactNode","useAdaptivity","RootComponent","Footnote","Text","useSelectionControlContext","sizeYClassNames","none","compact","SelectionControlLabel","children","titleAfter","description","restProps","noPadding","sizeY","baseClassName","div","className"],"mappings":"AAAA;;;;;AACA,sCAAsC,GAEtC,SAASA,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,kCAA+B;AAC7D,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,QAAQ,QAAQ,wCAAqC;AAC9D,SAASC,IAAI,QAAQ,gCAA6B;AAClD,SAASC,0BAA0B,QAAQ,gCAA6B;AAGxE,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAOA,OAAO,SAASC,sBAAsB;QAAA,EACpCC,QAAQ,EACRC,UAAU,EACVC,WAAW,EAEgB,GALS,QAIjCC,uCAJiC;QACpCH;QACAC;QACAC;;IAGA,MAAM,EAAEE,SAAS,EAAE,GAAGT;IACtB,MAAM,EAAEU,QAAQ,MAAM,EAAE,GAAGd;IAE3B,qBACE,MAACC;QACCc,eAAejB,8CAEbgB,UAAU,aAAaT,eAAe,CAACS,MAAM,EAC7C,CAACD;OAECD;;0BAEJ,MAACI;gBAAIC,SAAS;;kCACZ,KAACd;wBAAKc,SAAS;kCAAiBR;;kCAChC,KAACO;wBAAIC,SAAS;kCAAsBP;;;;YAErCX,aAAaY,8BACZ,KAACT;gBAASe,SAAS;0BAAuBN;;;;AAIlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"SimpleCell.d.ts","sourceRoot":"","sources":["../../../src/components/SimpleCell/SimpleCell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAYxE,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC;;OAEG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC;;OAEG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB,EAAE,iBAAiB;CAAG;AAEjF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,uMAgBxB,eAAe,KAAG,KAAK,CAAC,SA8D1B,CAAC"}
1
+ {"version":3,"file":"SimpleCell.d.ts","sourceRoot":"","sources":["../../../src/components/SimpleCell/SimpleCell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAaxE,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC;;OAEG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC;;OAEG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB,EAAE,iBAAiB;CAAG;AAEjF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,uMAgBxB,eAAe,KAAG,KAAK,CAAC,SAkE1B,CAAC"}
@@ -11,6 +11,7 @@ import { Tappable } from "../Tappable/Tappable.js";
11
11
  import { Footnote } from "../Typography/Footnote/Footnote.js";
12
12
  import { Headline } from "../Typography/Headline/Headline.js";
13
13
  import { Subhead } from "../Typography/Subhead/Subhead.js";
14
+ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
14
15
  import { Chevron } from "./Chevron/Chevron.js";
15
16
  const sizeYClassNames = {
16
17
  none: "vkuiSimpleCell__sizeYNone",
@@ -49,10 +50,15 @@ const sizeYClassNames = {
49
50
  /*#__PURE__*/ _jsxs("div", {
50
51
  className: "vkuiSimpleCell__middle",
51
52
  children: [
52
- overTitle && /*#__PURE__*/ _jsx(Subhead, {
53
+ overTitle && /*#__PURE__*/ _jsxs(Subhead, {
53
54
  Component: "span",
54
55
  className: classNames("vkuiSimpleCell__text", "vkuiSimpleCell__overTitle"),
55
- children: overTitle
56
+ children: [
57
+ overTitle,
58
+ /*#__PURE__*/ _jsx(VisuallyHidden, {
59
+ children: " "
60
+ })
61
+ ]
56
62
  }),
57
63
  /*#__PURE__*/ _jsxs("div", {
58
64
  className: "vkuiSimpleCell__content",
@@ -61,11 +67,16 @@ const sizeYClassNames = {
61
67
  className: "vkuiSimpleCell__badge",
62
68
  children: badgeBeforeTitle
63
69
  }),
64
- /*#__PURE__*/ _jsx(Headline, {
70
+ /*#__PURE__*/ _jsxs(Headline, {
65
71
  Component: "span",
66
72
  className: "vkuiSimpleCell__children",
67
73
  weight: "3",
68
- children: children
74
+ children: [
75
+ children,
76
+ /*#__PURE__*/ _jsx(VisuallyHidden, {
77
+ children: " "
78
+ })
79
+ ]
69
80
  }),
70
81
  hasReactNode(badgeAfterTitle) && /*#__PURE__*/ _jsx("span", {
71
82
  className: "vkuiSimpleCell__badge",
@@ -80,10 +91,15 @@ const sizeYClassNames = {
80
91
  className: "vkuiSimpleCell__badge",
81
92
  children: badgeBeforeSubtitle
82
93
  }),
83
- /*#__PURE__*/ _jsx(Footnote, {
94
+ /*#__PURE__*/ _jsxs(Footnote, {
84
95
  normalize: false,
85
96
  className: classNames("vkuiSimpleCell__text", "vkuiSimpleCell__subtitle"),
86
- children: subtitle
97
+ children: [
98
+ subtitle,
99
+ /*#__PURE__*/ _jsx(VisuallyHidden, {
100
+ children: " "
101
+ })
102
+ ]
87
103
  }),
88
104
  badgeAfterSubtitle && /*#__PURE__*/ _jsx("span", {
89
105
  className: "vkuiSimpleCell__badge",
@@ -91,9 +107,14 @@ const sizeYClassNames = {
91
107
  })
92
108
  ]
93
109
  }),
94
- extraSubtitle && /*#__PURE__*/ _jsx(Footnote, {
110
+ extraSubtitle && /*#__PURE__*/ _jsxs(Footnote, {
95
111
  className: classNames("vkuiSimpleCell__text", "vkuiSimpleCell__extraSubtitle"),
96
- children: extraSubtitle
112
+ children: [
113
+ extraSubtitle,
114
+ /*#__PURE__*/ _jsx(VisuallyHidden, {
115
+ children: " "
116
+ })
117
+ ]
97
118
  })
98
119
  ]
99
120
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SimpleCell/SimpleCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasComponent } from '../../types';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Chevron } from './Chevron/Chevron';\nimport styles from './SimpleCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SimpleCellOwnProps extends HasComponent {\n /**\n * Иконка 28 или `<Avatar size={28|32|40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится слева от текста `children`.\n */\n badgeBeforeTitle?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится справа от текста `children`.\n */\n badgeAfterTitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится слева от текста `subtitle`.\n */\n badgeBeforeSubtitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится справа от текста `subtitle`.\n */\n badgeAfterSubtitle?: React.ReactNode;\n /**\n * Контейнер для текста справа от `children`.\n */\n indicator?: React.ReactNode;\n /**\n * Дополнительная строка текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.\n */\n after?: React.ReactNode;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n /**\n * Управляет видимостью иконки шеврона `›`.\n *\n * - `auto` - добавляет шеврон справа только для платформы `ios`;\n * - `always` - всегда показывает шеврон.\n */\n chevron?: 'auto' | 'always';\n /**\n * Размер chevron.\n */\n chevronSize?: 's' | 'm';\n /**\n * Включает многострочный режим для отображения текста.\n */\n multiline?: boolean;\n}\n\nexport interface SimpleCellProps extends SimpleCellOwnProps, TappableOmitProps {}\n\n/**\n * @see https://vkui.io/components/simple-cell\n */\nexport const SimpleCell = ({\n badgeBeforeTitle,\n badgeAfterTitle,\n badgeBeforeSubtitle,\n badgeAfterSubtitle,\n before,\n indicator,\n children,\n after,\n chevron,\n multiline,\n overTitle,\n subtitle,\n extraSubtitle,\n chevronSize = 'm',\n ...restProps\n}: SimpleCellProps): React.ReactNode => {\n const platform = usePlatform();\n\n const hasChevron = chevron === 'always' || (chevron === 'auto' && platform === 'ios');\n\n const hasAfter = hasReactNode(after) || hasChevron;\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n restProps.disabled && styles.disabled,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n multiline && styles.mult,\n )}\n >\n <div className={classNames(styles.before, platform === 'ios' && styles.beforeIos)}>\n {before}\n </div>\n <div className={styles.middle}>\n {overTitle && (\n <Subhead Component=\"span\" className={classNames(styles.text, styles.overTitle)}>\n {overTitle}\n </Subhead>\n )}\n <div className={styles.content}>\n {badgeBeforeTitle && <span className={styles.badge}>{badgeBeforeTitle}</span>}\n <Headline Component=\"span\" className={styles.children} weight=\"3\">\n {children}\n </Headline>\n {hasReactNode(badgeAfterTitle) && <span className={styles.badge}>{badgeAfterTitle}</span>}\n </div>\n {subtitle && (\n <div className={styles.content}>\n {badgeBeforeSubtitle && <span className={styles.badge}>{badgeBeforeSubtitle}</span>}\n <Footnote normalize={false} className={classNames(styles.text, styles.subtitle)}>\n {subtitle}\n </Footnote>\n {badgeAfterSubtitle && <span className={styles.badge}>{badgeAfterSubtitle}</span>}\n </div>\n )}\n {extraSubtitle && (\n <Footnote className={classNames(styles.text, styles.extraSubtitle)}>\n {extraSubtitle}\n </Footnote>\n )}\n </div>\n {hasReactNode(indicator) && (\n <Headline Component=\"span\" weight=\"3\" className={styles.indicator}>\n {indicator}\n </Headline>\n )}\n {hasAfter && (\n <div className={classNames(styles.after, 'vkuiInternalSimpleCell__after')}>\n {after}\n {hasChevron && <Chevron size={chevronSize} className={styles.chevronIcon} />}\n </div>\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Tappable","Footnote","Headline","Subhead","Chevron","sizeYClassNames","none","compact","SimpleCell","badgeBeforeTitle","badgeAfterTitle","badgeBeforeSubtitle","badgeAfterSubtitle","before","indicator","children","after","chevron","multiline","overTitle","subtitle","extraSubtitle","chevronSize","restProps","platform","hasChevron","hasAfter","sizeY","baseClassName","disabled","div","className","Component","span","weight","normalize","size"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,OAAO,QAAQ,uBAAoB;AAG5C,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAkEA;;CAEC,GACD,OAAO,MAAMC,aAAa;QAAC,EACzBC,gBAAgB,EAChBC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,cAAc,GAAG,EAED,WADbC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWzB;IAEjB,MAAM0B,aAAaR,YAAY,YAAaA,YAAY,UAAUO,aAAa;IAE/E,MAAME,WAAW7B,aAAamB,UAAUS;IACxC,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAG7B;IAE3B,qBACE,MAACE,kDACKuB;QACJK,eAAehC,mCAEb2B,UAAUM,QAAQ,gCAClBF,UAAU,aAAatB,eAAe,CAACsB,MAAM,EAC7CT;;0BAGF,KAACY;gBAAIC,WAAWnC,qCAA0B4B,aAAa;0BACpDX;;0BAEH,MAACiB;gBAAIC,SAAS;;oBACXZ,2BACC,KAAChB;wBAAQ6B,WAAU;wBAAOD,WAAWnC;kCAClCuB;;kCAGL,MAACW;wBAAIC,SAAS;;4BACXtB,kCAAoB,KAACwB;gCAAKF,SAAS;0CAAiBtB;;0CACrD,KAACP;gCAAS8B,WAAU;gCAAOD,SAAS;gCAAmBG,QAAO;0CAC3DnB;;4BAEFlB,aAAaa,kCAAoB,KAACuB;gCAAKF,SAAS;0CAAiBrB;;;;oBAEnEU,0BACC,MAACU;wBAAIC,SAAS;;4BACXpB,qCAAuB,KAACsB;gCAAKF,SAAS;0CAAiBpB;;0CACxD,KAACV;gCAASkC,WAAW;gCAAOJ,WAAWnC;0CACpCwB;;4BAEFR,oCAAsB,KAACqB;gCAAKF,SAAS;0CAAiBnB;;;;oBAG1DS,+BACC,KAACpB;wBAAS8B,WAAWnC;kCAClByB;;;;YAINxB,aAAaiB,4BACZ,KAACZ;gBAAS8B,WAAU;gBAAOE,QAAO;gBAAIH,SAAS;0BAC5CjB;;YAGJY,0BACC,MAACI;gBAAIC,WAAWnC,oCAAyB;;oBACtCoB;oBACAS,4BAAc,KAACrB;wBAAQgC,MAAMd;wBAAaS,SAAS;;;;;;AAK9D,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/SimpleCell/SimpleCell.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasComponent } from '../../types';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { Chevron } from './Chevron/Chevron';\nimport styles from './SimpleCell.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SimpleCellOwnProps extends HasComponent {\n /**\n * Иконка 28 или `<Avatar size={28|32|40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится слева от текста `children`.\n */\n badgeBeforeTitle?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится справа от текста `children`.\n */\n badgeAfterTitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится слева от текста `subtitle`.\n */\n badgeBeforeSubtitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится справа от текста `subtitle`.\n */\n badgeAfterSubtitle?: React.ReactNode;\n /**\n * Контейнер для текста справа от `children`.\n */\n indicator?: React.ReactNode;\n /**\n * Дополнительная строка текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.\n */\n after?: React.ReactNode;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n /**\n * Управляет видимостью иконки шеврона `›`.\n *\n * - `auto` - добавляет шеврон справа только для платформы `ios`;\n * - `always` - всегда показывает шеврон.\n */\n chevron?: 'auto' | 'always';\n /**\n * Размер chevron.\n */\n chevronSize?: 's' | 'm';\n /**\n * Включает многострочный режим для отображения текста.\n */\n multiline?: boolean;\n}\n\nexport interface SimpleCellProps extends SimpleCellOwnProps, TappableOmitProps {}\n\n/**\n * @see https://vkui.io/components/simple-cell\n */\nexport const SimpleCell = ({\n badgeBeforeTitle,\n badgeAfterTitle,\n badgeBeforeSubtitle,\n badgeAfterSubtitle,\n before,\n indicator,\n children,\n after,\n chevron,\n multiline,\n overTitle,\n subtitle,\n extraSubtitle,\n chevronSize = 'm',\n ...restProps\n}: SimpleCellProps): React.ReactNode => {\n const platform = usePlatform();\n\n const hasChevron = chevron === 'always' || (chevron === 'auto' && platform === 'ios');\n\n const hasAfter = hasReactNode(after) || hasChevron;\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n restProps.disabled && styles.disabled,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n multiline && styles.mult,\n )}\n >\n <div className={classNames(styles.before, platform === 'ios' && styles.beforeIos)}>\n {before}\n </div>\n <div className={styles.middle}>\n {overTitle && (\n <Subhead Component=\"span\" className={classNames(styles.text, styles.overTitle)}>\n {overTitle}\n <VisuallyHidden>&nbsp;</VisuallyHidden>\n </Subhead>\n )}\n <div className={styles.content}>\n {badgeBeforeTitle && <span className={styles.badge}>{badgeBeforeTitle}</span>}\n <Headline Component=\"span\" className={styles.children} weight=\"3\">\n {children}\n <VisuallyHidden>&nbsp;</VisuallyHidden>\n </Headline>\n {hasReactNode(badgeAfterTitle) && <span className={styles.badge}>{badgeAfterTitle}</span>}\n </div>\n {subtitle && (\n <div className={styles.content}>\n {badgeBeforeSubtitle && <span className={styles.badge}>{badgeBeforeSubtitle}</span>}\n <Footnote normalize={false} className={classNames(styles.text, styles.subtitle)}>\n {subtitle}\n <VisuallyHidden>&nbsp;</VisuallyHidden>\n </Footnote>\n {badgeAfterSubtitle && <span className={styles.badge}>{badgeAfterSubtitle}</span>}\n </div>\n )}\n {extraSubtitle && (\n <Footnote className={classNames(styles.text, styles.extraSubtitle)}>\n {extraSubtitle}\n <VisuallyHidden>&nbsp;</VisuallyHidden>\n </Footnote>\n )}\n </div>\n {hasReactNode(indicator) && (\n <Headline Component=\"span\" weight=\"3\" className={styles.indicator}>\n {indicator}\n </Headline>\n )}\n {hasAfter && (\n <div className={classNames(styles.after, 'vkuiInternalSimpleCell__after')}>\n {after}\n {hasChevron && <Chevron size={chevronSize} className={styles.chevronIcon} />}\n </div>\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Tappable","Footnote","Headline","Subhead","VisuallyHidden","Chevron","sizeYClassNames","none","compact","SimpleCell","badgeBeforeTitle","badgeAfterTitle","badgeBeforeSubtitle","badgeAfterSubtitle","before","indicator","children","after","chevron","multiline","overTitle","subtitle","extraSubtitle","chevronSize","restProps","platform","hasChevron","hasAfter","sizeY","baseClassName","disabled","div","className","Component","span","weight","normalize","size"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,cAAc,QAAQ,sCAAmC;AAClE,SAASC,OAAO,QAAQ,uBAAoB;AAG5C,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAkEA;;CAEC,GACD,OAAO,MAAMC,aAAa;QAAC,EACzBC,gBAAgB,EAChBC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,cAAc,GAAG,EAED,WADbC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAW1B;IAEjB,MAAM2B,aAAaR,YAAY,YAAaA,YAAY,UAAUO,aAAa;IAE/E,MAAME,WAAW9B,aAAaoB,UAAUS;IACxC,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAG9B;IAE3B,qBACE,MAACE,kDACKwB;QACJK,eAAejC,mCAEb4B,UAAUM,QAAQ,gCAClBF,UAAU,aAAatB,eAAe,CAACsB,MAAM,EAC7CT;;0BAGF,KAACY;gBAAIC,WAAWpC,qCAA0B6B,aAAa;0BACpDX;;0BAEH,MAACiB;gBAAIC,SAAS;;oBACXZ,2BACC,MAACjB;wBAAQ8B,WAAU;wBAAOD,WAAWpC;;4BAClCwB;0CACD,KAAChB;0CAAe;;;;kCAGpB,MAAC2B;wBAAIC,SAAS;;4BACXtB,kCAAoB,KAACwB;gCAAKF,SAAS;0CAAiBtB;;0CACrD,MAACR;gCAAS+B,WAAU;gCAAOD,SAAS;gCAAmBG,QAAO;;oCAC3DnB;kDACD,KAACZ;kDAAe;;;;4BAEjBP,aAAac,kCAAoB,KAACuB;gCAAKF,SAAS;0CAAiBrB;;;;oBAEnEU,0BACC,MAACU;wBAAIC,SAAS;;4BACXpB,qCAAuB,KAACsB;gCAAKF,SAAS;0CAAiBpB;;0CACxD,MAACX;gCAASmC,WAAW;gCAAOJ,WAAWpC;;oCACpCyB;kDACD,KAACjB;kDAAe;;;;4BAEjBS,oCAAsB,KAACqB;gCAAKF,SAAS;0CAAiBnB;;;;oBAG1DS,+BACC,MAACrB;wBAAS+B,WAAWpC;;4BAClB0B;0CACD,KAAClB;0CAAe;;;;;;YAIrBP,aAAakB,4BACZ,KAACb;gBAAS+B,WAAU;gBAAOE,QAAO;gBAAIH,SAAS;0BAC5CjB;;YAGJY,0BACC,MAACI;gBAAIC,WAAWpC,oCAAyB;;oBACtCqB;oBACAS,4BAAc,KAACrB;wBAAQgC,MAAMd;wBAAaS,SAAS;;;;;;AAK9D,EAAE"}
@@ -5,11 +5,11 @@ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_
5
5
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { classNames } from "@vkontakte/vkjs";
8
- import { millisecondsInSecond } from "date-fns/constants";
9
8
  import { mergeStyle } from "../../helpers/mergeStyle.js";
10
9
  import { useExternRef } from "../../hooks/useExternRef.js";
11
10
  import { useResizeObserver } from "../../hooks/useResizeObserver.js";
12
11
  import { useStateWithPrev } from "../../hooks/useStateWithPrev.js";
12
+ import { millisecondsInSecond } from "../../lib/date.js";
13
13
  import { useDOM } from "../../lib/dom.js";
14
14
  import { animationVisibilityDelayStyles } from "../../styles/animationVisibilityDelay.js";
15
15
  import { RootComponent } from "../RootComponent/RootComponent.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { millisecondsInSecond } from 'date-fns/constants';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useStateWithPrev } from '../../hooks/useStateWithPrev';\nimport { useDOM } from '../../lib/dom';\nimport { animationVisibilityDelayStyles } from '../../styles/animationVisibilityDelay';\nimport type { CSSCustomProperties, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Skeleton.module.css';\nimport stylesDelay from '../../styles/animationVisibilityDelay.module.css';\n\nconst CUSTOM_PROPERTY_GRADIENT_LEFT = '--vkui_internal--skeleton_gradient_left';\n\n/**\n * Синхронизирует анимацию скелетонов с помощью временных отрезков.\n *\n * ## visibilitychange\n *\n * В синхронизацию не заложен механизм перехода на оптимизации браузеров при\n * переходе на другую вкладку, поскольку нет уверенности в реальности таких\n * кейсов со скелетонами. Если такой кейс принесут, необходимо обработать\n * событие `visibilitychange` используя функцию `syncAnimation`.\n *\n * Смотри https://developer.chrome.com/blog/page-lifecycle-api/.\n *\n * @param duration Длительность анимации в секундах.\n */\nfunction useSkeletonSyncAnimation(disableAnimation: boolean, duration = 1.5) {\n const [isAnimationStarted, setIsAnimationStarted] = React.useState<boolean>(false);\n const timer = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const syncAnimation = React.useCallback(() => {\n clearTimeout(timer.current);\n setIsAnimationStarted(false);\n\n const durationInMilliseconds = duration * millisecondsInSecond;\n const delay = durationInMilliseconds - (performance.now() % durationInMilliseconds);\n\n timer.current = setTimeout(() => setIsAnimationStarted(true), delay);\n\n return () => clearTimeout(timer.current);\n }, [duration]);\n\n React.useEffect(() => {\n if (disableAnimation) {\n setIsAnimationStarted(false);\n return;\n }\n\n if (isAnimationStarted) {\n return;\n }\n\n return syncAnimation();\n }, [disableAnimation, isAnimationStarted, syncAnimation]);\n\n return isAnimationStarted;\n}\n\n/**\n * Вычисляет позицию скелетона.\n */\nfunction useSkeletonPosition(rootRef: React.RefObject<HTMLElement | null>) {\n const { document, window } = useDOM();\n const [[skeletonGradientLeft, prevSkeletonGradientLeft], setSkeletonGradientLeft] =\n useStateWithPrev('0');\n\n const updatePosition = React.useCallback(() => {\n const el = rootRef.current;\n if (!el || !document) {\n return;\n }\n\n const value = -(el.getBoundingClientRect().left - document.body.getBoundingClientRect().left);\n const gradientValue = value === 0 ? '0' : `${value}px`;\n if (prevSkeletonGradientLeft !== gradientValue) {\n setSkeletonGradientLeft(gradientValue);\n }\n }, [document, prevSkeletonGradientLeft, rootRef, setSkeletonGradientLeft]);\n\n React.useEffect(updatePosition, [updatePosition]);\n useResizeObserver(window, updatePosition);\n\n return skeletonGradientLeft;\n}\n\nexport interface SkeletonProps\n extends HTMLAttributesWithRootRef<HTMLDivElement | HTMLSpanElement>,\n Pick<\n React.CSSProperties,\n | 'width'\n | 'height'\n | 'inlineSize'\n | 'blockSize'\n | 'maxWidth'\n | 'maxInlineSize'\n | 'borderRadius'\n | 'margin'\n > {\n /**\n * Начальный цвет анимации.\n */\n colorFrom?: string;\n\n /**\n * Финальный цвет анимации.\n */\n colorTo?: string;\n\n /**\n * Выключает анимацию, в результате чего показывается только один цвет.\n */\n noAnimation?: boolean;\n\n /**\n * Длительность анимации в секундах.\n */\n duration?: number;\n\n /**\n * Задерживает отрисовку элемента на заданное количество миллисекунд.\n */\n visibilityDelay?: number;\n}\n\n/**\n * > Старайтесь минимизировать количество заглушек на экране. Не каждый элемент\n * > на экране должен заменяться заглушкой.\n * >\n * > Текстовые блоки лучше сокращать до трёх строк. Ширина последней строки\n * > скелета вычисляется, как 75% от ширины текстового блока. Высота скелетона\n * > автоматически подстраивается под размер шрифта, поэтому идеально\n * > вписывается в слоты компонентов, которые обычно ожидают текст.\n *\n * @since 6.1.0\n *\n * @see https://vkui.io/components/skeleton\n *\n */\nexport const Skeleton = ({\n width,\n height,\n inlineSize,\n blockSize,\n maxWidth,\n maxInlineSize,\n borderRadius,\n children,\n colorFrom,\n colorTo,\n noAnimation = false,\n duration,\n margin,\n getRootRef,\n visibilityDelay,\n ...restProps\n}: SkeletonProps): React.ReactNode => {\n const rootRef = useExternRef(getRootRef);\n\n const disableAnimation = !useSkeletonSyncAnimation(noAnimation, duration);\n const skeletonGradientLeft = useSkeletonPosition(rootRef);\n\n const skeletonStyle: React.CSSProperties & CSSCustomProperties = {\n width,\n height,\n inlineSize,\n blockSize,\n maxWidth,\n maxInlineSize,\n borderRadius,\n margin,\n [CUSTOM_PROPERTY_GRADIENT_LEFT]: skeletonGradientLeft,\n };\n\n if (colorFrom) {\n skeletonStyle['--vkui_internal--skeleton_color_from'] = colorFrom;\n }\n\n if (colorTo) {\n skeletonStyle['--vkui_internal--skeleton_color_to'] = colorTo;\n }\n\n if (Number.isFinite(duration)) {\n skeletonStyle['--vkui_internal--skeleton_animation_duration'] = `${duration}s`;\n }\n\n return (\n <RootComponent\n getRootRef={rootRef}\n Component=\"span\"\n baseClassName={classNames(\n styles.host,\n disableAnimation && styles.disableAnimation,\n visibilityDelay && stylesDelay.visibilityDelay,\n )}\n baseStyle={mergeStyle(skeletonStyle, animationVisibilityDelayStyles(visibilityDelay))}\n {...restProps}\n >\n {children || <>&zwnj;</>}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","millisecondsInSecond","mergeStyle","useExternRef","useResizeObserver","useStateWithPrev","useDOM","animationVisibilityDelayStyles","RootComponent","CUSTOM_PROPERTY_GRADIENT_LEFT","useSkeletonSyncAnimation","disableAnimation","duration","isAnimationStarted","setIsAnimationStarted","useState","timer","useRef","undefined","syncAnimation","useCallback","clearTimeout","current","durationInMilliseconds","delay","performance","now","setTimeout","useEffect","useSkeletonPosition","rootRef","document","window","skeletonGradientLeft","prevSkeletonGradientLeft","setSkeletonGradientLeft","updatePosition","el","value","getBoundingClientRect","left","body","gradientValue","Skeleton","width","height","inlineSize","blockSize","maxWidth","maxInlineSize","borderRadius","children","colorFrom","colorTo","noAnimation","margin","getRootRef","visibilityDelay","restProps","skeletonStyle","Number","isFinite","Component","baseClassName","baseStyle"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,oBAAoB,QAAQ,qBAAqB;AAC1D,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,gBAAgB,QAAQ,kCAA+B;AAChE,SAASC,MAAM,QAAQ,mBAAgB;AACvC,SAASC,8BAA8B,QAAQ,2CAAwC;AAEvF,SAASC,aAAa,QAAQ,oCAAiC;AAI/D,MAAMC,gCAAgC;AAEtC;;;;;;;;;;;;;CAaC,GACD,SAASC,yBAAyBC,gBAAyB,EAAEC,WAAW,GAAG;IACzE,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGf,MAAMgB,QAAQ,CAAU;IAC5E,MAAMC,QAAQjB,MAAMkB,MAAM,CAA4CC;IAEtE,MAAMC,gBAAgBpB,MAAMqB,WAAW,CAAC;QACtCC,aAAaL,MAAMM,OAAO;QAC1BR,sBAAsB;QAEtB,MAAMS,yBAAyBX,WAAWX;QAC1C,MAAMuB,QAAQD,yBAA0BE,YAAYC,GAAG,KAAKH;QAE5DP,MAAMM,OAAO,GAAGK,WAAW,IAAMb,sBAAsB,OAAOU;QAE9D,OAAO,IAAMH,aAAaL,MAAMM,OAAO;IACzC,GAAG;QAACV;KAAS;IAEbb,MAAM6B,SAAS,CAAC;QACd,IAAIjB,kBAAkB;YACpBG,sBAAsB;YACtB;QACF;QAEA,IAAID,oBAAoB;YACtB;QACF;QAEA,OAAOM;IACT,GAAG;QAACR;QAAkBE;QAAoBM;KAAc;IAExD,OAAON;AACT;AAEA;;CAEC,GACD,SAASgB,oBAAoBC,OAA4C;IACvE,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAG1B;IAC7B,MAAM,CAAC,CAAC2B,sBAAsBC,yBAAyB,EAAEC,wBAAwB,GAC/E9B,iBAAiB;IAEnB,MAAM+B,iBAAiBrC,MAAMqB,WAAW,CAAC;QACvC,MAAMiB,KAAKP,QAAQR,OAAO;QAC1B,IAAI,CAACe,MAAM,CAACN,UAAU;YACpB;QACF;QAEA,MAAMO,QAAQ,CAAED,CAAAA,GAAGE,qBAAqB,GAAGC,IAAI,GAAGT,SAASU,IAAI,CAACF,qBAAqB,GAAGC,IAAI,AAAD;QAC3F,MAAME,gBAAgBJ,UAAU,IAAI,MAAM,GAAGA,MAAM,EAAE,CAAC;QACtD,IAAIJ,6BAA6BQ,eAAe;YAC9CP,wBAAwBO;QAC1B;IACF,GAAG;QAACX;QAAUG;QAA0BJ;QAASK;KAAwB;IAEzEpC,MAAM6B,SAAS,CAACQ,gBAAgB;QAACA;KAAe;IAChDhC,kBAAkB4B,QAAQI;IAE1B,OAAOH;AACT;AAyCA;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMU,WAAW;QAAC,EACvBC,KAAK,EACLC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,YAAY,EACZC,QAAQ,EACRC,SAAS,EACTC,OAAO,EACPC,cAAc,KAAK,EACnB1C,QAAQ,EACR2C,MAAM,EACNC,UAAU,EACVC,eAAe,EAED,WADXC;QAfHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA1C;QACA2C;QACAC;QACAC;;IAGA,MAAM3B,UAAU3B,aAAaqD;IAE7B,MAAM7C,mBAAmB,CAACD,yBAAyB4C,aAAa1C;IAChE,MAAMqB,uBAAuBJ,oBAAoBC;IAEjD,MAAM6B,gBAA2D;QAC/Df;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAK;QACA,CAAC9C,8BAA8B,EAAEwB;IACnC;IAEA,IAAImB,WAAW;QACbO,aAAa,CAAC,uCAAuC,GAAGP;IAC1D;IAEA,IAAIC,SAAS;QACXM,aAAa,CAAC,qCAAqC,GAAGN;IACxD;IAEA,IAAIO,OAAOC,QAAQ,CAACjD,WAAW;QAC7B+C,aAAa,CAAC,+CAA+C,GAAG,GAAG/C,SAAS,CAAC,CAAC;IAChF;IAEA,qBACE,KAACJ;QACCgD,YAAY1B;QACZgC,WAAU;QACVC,eAAe/D,iCAEbW,sDACA8C;QAEFO,WAAW9D,WAAWyD,eAAepD,+BAA+BkD;OAChEC;kBAEHP,0BAAY;sBAAE;;;AAGrB,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Skeleton/Skeleton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { useStateWithPrev } from '../../hooks/useStateWithPrev';\nimport { millisecondsInSecond } from '../../lib/date';\nimport { useDOM } from '../../lib/dom';\nimport { animationVisibilityDelayStyles } from '../../styles/animationVisibilityDelay';\nimport type { CSSCustomProperties, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Skeleton.module.css';\nimport stylesDelay from '../../styles/animationVisibilityDelay.module.css';\n\nconst CUSTOM_PROPERTY_GRADIENT_LEFT = '--vkui_internal--skeleton_gradient_left';\n\n/**\n * Синхронизирует анимацию скелетонов с помощью временных отрезков.\n *\n * ## visibilitychange\n *\n * В синхронизацию не заложен механизм перехода на оптимизации браузеров при\n * переходе на другую вкладку, поскольку нет уверенности в реальности таких\n * кейсов со скелетонами. Если такой кейс принесут, необходимо обработать\n * событие `visibilitychange` используя функцию `syncAnimation`.\n *\n * Смотри https://developer.chrome.com/blog/page-lifecycle-api/.\n *\n * @param duration Длительность анимации в секундах.\n */\nfunction useSkeletonSyncAnimation(disableAnimation: boolean, duration = 1.5) {\n const [isAnimationStarted, setIsAnimationStarted] = React.useState<boolean>(false);\n const timer = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const syncAnimation = React.useCallback(() => {\n clearTimeout(timer.current);\n setIsAnimationStarted(false);\n\n const durationInMilliseconds = duration * millisecondsInSecond;\n const delay = durationInMilliseconds - (performance.now() % durationInMilliseconds);\n\n timer.current = setTimeout(() => setIsAnimationStarted(true), delay);\n\n return () => clearTimeout(timer.current);\n }, [duration]);\n\n React.useEffect(() => {\n if (disableAnimation) {\n setIsAnimationStarted(false);\n return;\n }\n\n if (isAnimationStarted) {\n return;\n }\n\n return syncAnimation();\n }, [disableAnimation, isAnimationStarted, syncAnimation]);\n\n return isAnimationStarted;\n}\n\n/**\n * Вычисляет позицию скелетона.\n */\nfunction useSkeletonPosition(rootRef: React.RefObject<HTMLElement | null>) {\n const { document, window } = useDOM();\n const [[skeletonGradientLeft, prevSkeletonGradientLeft], setSkeletonGradientLeft] =\n useStateWithPrev('0');\n\n const updatePosition = React.useCallback(() => {\n const el = rootRef.current;\n if (!el || !document) {\n return;\n }\n\n const value = -(el.getBoundingClientRect().left - document.body.getBoundingClientRect().left);\n const gradientValue = value === 0 ? '0' : `${value}px`;\n if (prevSkeletonGradientLeft !== gradientValue) {\n setSkeletonGradientLeft(gradientValue);\n }\n }, [document, prevSkeletonGradientLeft, rootRef, setSkeletonGradientLeft]);\n\n React.useEffect(updatePosition, [updatePosition]);\n useResizeObserver(window, updatePosition);\n\n return skeletonGradientLeft;\n}\n\nexport interface SkeletonProps\n extends HTMLAttributesWithRootRef<HTMLDivElement | HTMLSpanElement>,\n Pick<\n React.CSSProperties,\n | 'width'\n | 'height'\n | 'inlineSize'\n | 'blockSize'\n | 'maxWidth'\n | 'maxInlineSize'\n | 'borderRadius'\n | 'margin'\n > {\n /**\n * Начальный цвет анимации.\n */\n colorFrom?: string;\n\n /**\n * Финальный цвет анимации.\n */\n colorTo?: string;\n\n /**\n * Выключает анимацию, в результате чего показывается только один цвет.\n */\n noAnimation?: boolean;\n\n /**\n * Длительность анимации в секундах.\n */\n duration?: number;\n\n /**\n * Задерживает отрисовку элемента на заданное количество миллисекунд.\n */\n visibilityDelay?: number;\n}\n\n/**\n * > Старайтесь минимизировать количество заглушек на экране. Не каждый элемент\n * > на экране должен заменяться заглушкой.\n * >\n * > Текстовые блоки лучше сокращать до трёх строк. Ширина последней строки\n * > скелета вычисляется, как 75% от ширины текстового блока. Высота скелетона\n * > автоматически подстраивается под размер шрифта, поэтому идеально\n * > вписывается в слоты компонентов, которые обычно ожидают текст.\n *\n * @since 6.1.0\n *\n * @see https://vkui.io/components/skeleton\n *\n */\nexport const Skeleton = ({\n width,\n height,\n inlineSize,\n blockSize,\n maxWidth,\n maxInlineSize,\n borderRadius,\n children,\n colorFrom,\n colorTo,\n noAnimation = false,\n duration,\n margin,\n getRootRef,\n visibilityDelay,\n ...restProps\n}: SkeletonProps): React.ReactNode => {\n const rootRef = useExternRef(getRootRef);\n\n const disableAnimation = !useSkeletonSyncAnimation(noAnimation, duration);\n const skeletonGradientLeft = useSkeletonPosition(rootRef);\n\n const skeletonStyle: React.CSSProperties & CSSCustomProperties = {\n width,\n height,\n inlineSize,\n blockSize,\n maxWidth,\n maxInlineSize,\n borderRadius,\n margin,\n [CUSTOM_PROPERTY_GRADIENT_LEFT]: skeletonGradientLeft,\n };\n\n if (colorFrom) {\n skeletonStyle['--vkui_internal--skeleton_color_from'] = colorFrom;\n }\n\n if (colorTo) {\n skeletonStyle['--vkui_internal--skeleton_color_to'] = colorTo;\n }\n\n if (Number.isFinite(duration)) {\n skeletonStyle['--vkui_internal--skeleton_animation_duration'] = `${duration}s`;\n }\n\n return (\n <RootComponent\n getRootRef={rootRef}\n Component=\"span\"\n baseClassName={classNames(\n styles.host,\n disableAnimation && styles.disableAnimation,\n visibilityDelay && stylesDelay.visibilityDelay,\n )}\n baseStyle={mergeStyle(skeletonStyle, animationVisibilityDelayStyles(visibilityDelay))}\n {...restProps}\n >\n {children || <>&zwnj;</>}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","mergeStyle","useExternRef","useResizeObserver","useStateWithPrev","millisecondsInSecond","useDOM","animationVisibilityDelayStyles","RootComponent","CUSTOM_PROPERTY_GRADIENT_LEFT","useSkeletonSyncAnimation","disableAnimation","duration","isAnimationStarted","setIsAnimationStarted","useState","timer","useRef","undefined","syncAnimation","useCallback","clearTimeout","current","durationInMilliseconds","delay","performance","now","setTimeout","useEffect","useSkeletonPosition","rootRef","document","window","skeletonGradientLeft","prevSkeletonGradientLeft","setSkeletonGradientLeft","updatePosition","el","value","getBoundingClientRect","left","body","gradientValue","Skeleton","width","height","inlineSize","blockSize","maxWidth","maxInlineSize","borderRadius","children","colorFrom","colorTo","noAnimation","margin","getRootRef","visibilityDelay","restProps","skeletonStyle","Number","isFinite","Component","baseClassName","baseStyle"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,gBAAgB,QAAQ,kCAA+B;AAChE,SAASC,oBAAoB,QAAQ,oBAAiB;AACtD,SAASC,MAAM,QAAQ,mBAAgB;AACvC,SAASC,8BAA8B,QAAQ,2CAAwC;AAEvF,SAASC,aAAa,QAAQ,oCAAiC;AAI/D,MAAMC,gCAAgC;AAEtC;;;;;;;;;;;;;CAaC,GACD,SAASC,yBAAyBC,gBAAyB,EAAEC,WAAW,GAAG;IACzE,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGf,MAAMgB,QAAQ,CAAU;IAC5E,MAAMC,QAAQjB,MAAMkB,MAAM,CAA4CC;IAEtE,MAAMC,gBAAgBpB,MAAMqB,WAAW,CAAC;QACtCC,aAAaL,MAAMM,OAAO;QAC1BR,sBAAsB;QAEtB,MAAMS,yBAAyBX,WAAWP;QAC1C,MAAMmB,QAAQD,yBAA0BE,YAAYC,GAAG,KAAKH;QAE5DP,MAAMM,OAAO,GAAGK,WAAW,IAAMb,sBAAsB,OAAOU;QAE9D,OAAO,IAAMH,aAAaL,MAAMM,OAAO;IACzC,GAAG;QAACV;KAAS;IAEbb,MAAM6B,SAAS,CAAC;QACd,IAAIjB,kBAAkB;YACpBG,sBAAsB;YACtB;QACF;QAEA,IAAID,oBAAoB;YACtB;QACF;QAEA,OAAOM;IACT,GAAG;QAACR;QAAkBE;QAAoBM;KAAc;IAExD,OAAON;AACT;AAEA;;CAEC,GACD,SAASgB,oBAAoBC,OAA4C;IACvE,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAG1B;IAC7B,MAAM,CAAC,CAAC2B,sBAAsBC,yBAAyB,EAAEC,wBAAwB,GAC/E/B,iBAAiB;IAEnB,MAAMgC,iBAAiBrC,MAAMqB,WAAW,CAAC;QACvC,MAAMiB,KAAKP,QAAQR,OAAO;QAC1B,IAAI,CAACe,MAAM,CAACN,UAAU;YACpB;QACF;QAEA,MAAMO,QAAQ,CAAED,CAAAA,GAAGE,qBAAqB,GAAGC,IAAI,GAAGT,SAASU,IAAI,CAACF,qBAAqB,GAAGC,IAAI,AAAD;QAC3F,MAAME,gBAAgBJ,UAAU,IAAI,MAAM,GAAGA,MAAM,EAAE,CAAC;QACtD,IAAIJ,6BAA6BQ,eAAe;YAC9CP,wBAAwBO;QAC1B;IACF,GAAG;QAACX;QAAUG;QAA0BJ;QAASK;KAAwB;IAEzEpC,MAAM6B,SAAS,CAACQ,gBAAgB;QAACA;KAAe;IAChDjC,kBAAkB6B,QAAQI;IAE1B,OAAOH;AACT;AAyCA;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMU,WAAW;QAAC,EACvBC,KAAK,EACLC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,YAAY,EACZC,QAAQ,EACRC,SAAS,EACTC,OAAO,EACPC,cAAc,KAAK,EACnB1C,QAAQ,EACR2C,MAAM,EACNC,UAAU,EACVC,eAAe,EAED,WADXC;QAfHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACA1C;QACA2C;QACAC;QACAC;;IAGA,MAAM3B,UAAU5B,aAAasD;IAE7B,MAAM7C,mBAAmB,CAACD,yBAAyB4C,aAAa1C;IAChE,MAAMqB,uBAAuBJ,oBAAoBC;IAEjD,MAAM6B,gBAA2D;QAC/Df;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAK;QACA,CAAC9C,8BAA8B,EAAEwB;IACnC;IAEA,IAAImB,WAAW;QACbO,aAAa,CAAC,uCAAuC,GAAGP;IAC1D;IAEA,IAAIC,SAAS;QACXM,aAAa,CAAC,qCAAqC,GAAGN;IACxD;IAEA,IAAIO,OAAOC,QAAQ,CAACjD,WAAW;QAC7B+C,aAAa,CAAC,+CAA+C,GAAG,GAAG/C,SAAS,CAAC,CAAC;IAChF;IAEA,qBACE,KAACJ;QACCgD,YAAY1B;QACZgC,WAAU;QACVC,eAAe/D,iCAEbW,sDACA8C;QAEFO,WAAW/D,WAAW0D,eAAepD,+BAA+BkD;OAChEC;kBAEHP,0BAAY;sBAAE;;;AAGrB,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAM7D,MAAM,WAAW,SAAU,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IAC1E;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACnD;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,iKAWlB,SAAS,KAAG,KAAK,CAAC,SAyCpB,CAAC"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAM7D,MAAM,WAAW,SAAU,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IAC1E;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IACnD;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,iKAWlB,SAAS,KAAG,KAAK,CAAC,SA6CpB,CAAC"}
@@ -10,6 +10,7 @@ import { usePlatform } from "../../hooks/usePlatform.js";
10
10
  import { useTabsNavigation } from "../../hooks/useTabsNavigation.js";
11
11
  import { RootComponent } from "../RootComponent/RootComponent.js";
12
12
  import { useTabsController } from "./TabsController.js";
13
+ import { TabsControllerContext } from "./TabsControllerContext.js";
13
14
  import { TabsModeContext } from "./TabsModeContext.js";
14
15
  /**
15
16
  * @see https://vkui.io/components/tabs
@@ -35,6 +36,19 @@ import { TabsModeContext } from "./TabsModeContext.js";
35
36
  const isTabFlow = role === 'tablist';
36
37
  const withGaps = mode === 'accent' || mode === 'secondary';
37
38
  const { tabsRef } = useTabsNavigation(isTabFlow, direction === 'rtl');
39
+ const tabsModeContext = React.useMemo(()=>({
40
+ mode,
41
+ withGaps,
42
+ layoutFillMode,
43
+ withScrollToSelectedTab,
44
+ scrollBehaviorToSelectedTab
45
+ }), [
46
+ mode,
47
+ withGaps,
48
+ layoutFillMode,
49
+ withScrollToSelectedTab,
50
+ scrollBehaviorToSelectedTab
51
+ ]);
38
52
  return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({}, restProps), {
39
53
  baseClassName: classNames("vkuiTabs__host", 'vkuiInternalTabs', platform === 'vkcom' && 'vkuiInternalTabs--vkcom', withGaps && classNames("vkuiTabs__withGaps", 'vkuiInternalTabs--withGaps'), mode === 'default' && "vkuiTabs__modeDefault"),
40
54
  role: role,
@@ -42,15 +56,11 @@ import { TabsModeContext } from "./TabsModeContext.js";
42
56
  className: "vkuiTabs__in",
43
57
  ref: tabsRef,
44
58
  children: /*#__PURE__*/ _jsx(TabsModeContext.Provider, {
45
- value: {
46
- mode,
47
- withGaps,
48
- layoutFillMode,
49
- withScrollToSelectedTab,
50
- scrollBehaviorToSelectedTab,
51
- controller
52
- },
53
- children: children
59
+ value: tabsModeContext,
60
+ children: /*#__PURE__*/ _jsx(TabsControllerContext.Provider, {
61
+ value: controller,
62
+ children: children
63
+ })
54
64
  })
55
65
  })
56
66
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTabsNavigation } from '../../hooks/useTabsNavigation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { useTabsController } from './TabsController';\nimport { TabsModeContext } from './TabsModeContext';\nimport styles from './Tabs.module.css';\n\nexport interface TabsProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Режим отображения компонента.\n */\n mode?: 'default' | 'accent' | 'secondary';\n /**\n * Включает прокрутку контейнера до активной (`selected`) вкладки.\n * @since 5.10.0\n */\n withScrollToSelectedTab?: boolean;\n /**\n * Отвечает за горизонтальное выравнивание при прокрутке до активной вкладки.\n * @see [scrollIntoView](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView)\n * @since 5.10.0\n */\n scrollBehaviorToSelectedTab?: ScrollIntoViewOptions['inline'];\n /**\n * При `auto` ширина вкладок определяется контекстом:\n * - равномерно занимают всю доступную ширину при вложении в `HorizontalScroll`\n * - равномерно занимают всю доступную ширину при `mode=default` и platform !== 'VKCOM'\n * При `stretched` и `shrinked` вкладки либо равномерно занимают всю ширину,\n * либо выравниваются по контенту соответственно.\n */\n layoutFillMode?: 'auto' | 'stretched' | 'shrinked';\n /**\n * Идентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n selectedId?: string;\n /**\n * Идентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n defaultSelectedId?: string;\n /**\n * Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n onSelectedIdChange?: (id: string) => void;\n}\n\n/**\n * @see https://vkui.io/components/tabs\n */\nexport const Tabs = ({\n children,\n mode = 'default',\n role = 'tablist',\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab = 'nearest',\n layoutFillMode = 'auto',\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n ...restProps\n}: TabsProps): React.ReactNode => {\n const controller = useTabsController({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n });\n const platform = usePlatform();\n const direction = useConfigDirection();\n const isTabFlow = role === 'tablist';\n const withGaps = mode === 'accent' || mode === 'secondary';\n\n const { tabsRef } = useTabsNavigation(isTabFlow, direction === 'rtl');\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalTabs',\n platform === 'vkcom' && 'vkuiInternalTabs--vkcom',\n withGaps && classNames(styles.withGaps, 'vkuiInternalTabs--withGaps'),\n mode === 'default' && styles.modeDefault,\n )}\n role={role}\n >\n <div className={styles.in} ref={tabsRef}>\n <TabsModeContext.Provider\n value={{\n mode,\n withGaps,\n layoutFillMode,\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab,\n controller,\n }}\n >\n {children}\n </TabsModeContext.Provider>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","usePlatform","useTabsNavigation","RootComponent","useTabsController","TabsModeContext","Tabs","children","mode","role","withScrollToSelectedTab","scrollBehaviorToSelectedTab","layoutFillMode","selectedId","defaultSelectedId","onSelectedIdChange","restProps","controller","platform","direction","isTabFlow","withGaps","tabsRef","baseClassName","div","className","ref","Provider","value"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,mCAAgC;AAElE,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,eAAe,QAAQ,uBAAoB;AAyCpD;;CAEC,GACD,OAAO,MAAMC,OAAO;QAAC,EACnBC,QAAQ,EACRC,OAAO,SAAS,EAChBC,OAAO,SAAS,EAChBC,uBAAuB,EACvBC,8BAA8B,SAAS,EACvCC,iBAAiB,MAAM,EACvBC,UAAU,EACVC,iBAAiB,EACjBC,kBAAkB,EAER,WADPC;QATHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,aAAab,kBAAkB;QACnCS;QACAC;QACAC;IACF;IACA,MAAMG,WAAWjB;IACjB,MAAMkB,YAAYnB;IAClB,MAAMoB,YAAYX,SAAS;IAC3B,MAAMY,WAAWb,SAAS,YAAYA,SAAS;IAE/C,MAAM,EAAEc,OAAO,EAAE,GAAGpB,kBAAkBkB,WAAWD,cAAc;IAE/D,qBACE,KAAChB,uDACKa;QACJO,eAAexB,6BAEb,oBACAmB,aAAa,WAAW,2BACxBG,YAAYtB,iCAA4B,+BACxCS,SAAS;QAEXC,MAAMA;kBAEN,cAAA,KAACe;YAAIC,SAAS;YAAaC,KAAKJ;sBAC9B,cAAA,KAACjB,gBAAgBsB,QAAQ;gBACvBC,OAAO;oBACLpB;oBACAa;oBACAT;oBACAF;oBACAC;oBACAM;gBACF;0BAECV;;;;AAKX,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTabsNavigation } from '../../hooks/useTabsNavigation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { useTabsController } from './TabsController';\nimport { TabsControllerContext } from './TabsControllerContext';\nimport { TabsModeContext } from './TabsModeContext';\nimport styles from './Tabs.module.css';\nexport interface TabsProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Режим отображения компонента.\n */\n mode?: 'default' | 'accent' | 'secondary';\n /**\n * Включает прокрутку контейнера до активной (`selected`) вкладки.\n * @since 5.10.0\n */\n withScrollToSelectedTab?: boolean;\n /**\n * Отвечает за горизонтальное выравнивание при прокрутке до активной вкладки.\n * @see [scrollIntoView](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView)\n * @since 5.10.0\n */\n scrollBehaviorToSelectedTab?: ScrollIntoViewOptions['inline'];\n /**\n * При `auto` ширина вкладок определяется контекстом:\n * - равномерно занимают всю доступную ширину при вложении в `HorizontalScroll`\n * - равномерно занимают всю доступную ширину при `mode=default` и platform !== 'VKCOM'\n * При `stretched` и `shrinked` вкладки либо равномерно занимают всю ширину,\n * либо выравниваются по контенту соответственно.\n */\n layoutFillMode?: 'auto' | 'stretched' | 'shrinked';\n /**\n * Идентификатор выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n selectedId?: string;\n /**\n * Идентификатор выбранной вкладки по умолчанию. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n defaultSelectedId?: string;\n /**\n * Обработчик изменения выбранной вкладки. Чтобы свойство работало корректно, у каждого `TabsItem` должно быть прокинуто свойство `id`.\n */\n onSelectedIdChange?: (id: string) => void;\n}\n\n/**\n * @see https://vkui.io/components/tabs\n */\nexport const Tabs = ({\n children,\n mode = 'default',\n role = 'tablist',\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab = 'nearest',\n layoutFillMode = 'auto',\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n ...restProps\n}: TabsProps): React.ReactNode => {\n const controller = useTabsController({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange,\n });\n const platform = usePlatform();\n const direction = useConfigDirection();\n const isTabFlow = role === 'tablist';\n const withGaps = mode === 'accent' || mode === 'secondary';\n\n const { tabsRef } = useTabsNavigation(isTabFlow, direction === 'rtl');\n\n const tabsModeContext = React.useMemo(\n () => ({\n mode,\n withGaps,\n layoutFillMode,\n withScrollToSelectedTab,\n scrollBehaviorToSelectedTab,\n }),\n [mode, withGaps, layoutFillMode, withScrollToSelectedTab, scrollBehaviorToSelectedTab],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalTabs',\n platform === 'vkcom' && 'vkuiInternalTabs--vkcom',\n withGaps && classNames(styles.withGaps, 'vkuiInternalTabs--withGaps'),\n mode === 'default' && styles.modeDefault,\n )}\n role={role}\n >\n <div className={styles.in} ref={tabsRef}>\n <TabsModeContext.Provider value={tabsModeContext}>\n <TabsControllerContext.Provider value={controller}>\n {children}\n </TabsControllerContext.Provider>\n </TabsModeContext.Provider>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","usePlatform","useTabsNavigation","RootComponent","useTabsController","TabsControllerContext","TabsModeContext","Tabs","children","mode","role","withScrollToSelectedTab","scrollBehaviorToSelectedTab","layoutFillMode","selectedId","defaultSelectedId","onSelectedIdChange","restProps","controller","platform","direction","isTabFlow","withGaps","tabsRef","tabsModeContext","useMemo","baseClassName","div","className","ref","Provider","value"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,iBAAiB,QAAQ,mCAAgC;AAElE,SAASC,aAAa,QAAQ,oCAAiC;AAC/D,SAASC,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,qBAAqB,QAAQ,6BAA0B;AAChE,SAASC,eAAe,QAAQ,uBAAoB;AAwCpD;;CAEC,GACD,OAAO,MAAMC,OAAO;QAAC,EACnBC,QAAQ,EACRC,OAAO,SAAS,EAChBC,OAAO,SAAS,EAChBC,uBAAuB,EACvBC,8BAA8B,SAAS,EACvCC,iBAAiB,MAAM,EACvBC,UAAU,EACVC,iBAAiB,EACjBC,kBAAkB,EAER,WADPC;QATHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,aAAad,kBAAkB;QACnCU;QACAC;QACAC;IACF;IACA,MAAMG,WAAWlB;IACjB,MAAMmB,YAAYpB;IAClB,MAAMqB,YAAYX,SAAS;IAC3B,MAAMY,WAAWb,SAAS,YAAYA,SAAS;IAE/C,MAAM,EAAEc,OAAO,EAAE,GAAGrB,kBAAkBmB,WAAWD,cAAc;IAE/D,MAAMI,kBAAkB1B,MAAM2B,OAAO,CACnC,IAAO,CAAA;YACLhB;YACAa;YACAT;YACAF;YACAC;QACF,CAAA,GACA;QAACH;QAAMa;QAAUT;QAAgBF;QAAyBC;KAA4B;IAGxF,qBACE,KAACT,uDACKc;QACJS,eAAe3B,6BAEb,oBACAoB,aAAa,WAAW,2BACxBG,YAAYvB,iCAA4B,+BACxCU,SAAS;QAEXC,MAAMA;kBAEN,cAAA,KAACiB;YAAIC,SAAS;YAAaC,KAAKN;sBAC9B,cAAA,KAACjB,gBAAgBwB,QAAQ;gBAACC,OAAOP;0BAC/B,cAAA,KAACnB,sBAAsByB,QAAQ;oBAACC,OAAOb;8BACpCV;;;;;AAMb,EAAE"}
@@ -1,7 +1,7 @@
1
1
  import { type TabsProps } from './Tabs';
2
- export type TabsController = {
2
+ export type TabsControllerProps = {
3
3
  onChange: (id: string) => void;
4
4
  selectedTab: string;
5
5
  };
6
- export declare const useTabsController: ({ selectedId, defaultSelectedId, onSelectedIdChange: onSelectedIdChangeProp, }: Pick<TabsProps, "selectedId" | "defaultSelectedId" | "onSelectedIdChange">) => TabsController | null;
6
+ export declare const useTabsController: ({ selectedId, defaultSelectedId, onSelectedIdChange: onSelectedIdChangeProp, }: Pick<TabsProps, "selectedId" | "defaultSelectedId" | "onSelectedIdChange">) => TabsControllerProps | null;
7
7
  //# sourceMappingURL=TabsController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsController.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,gFAI/B,IAAI,CACL,SAAS,EACT,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,CAC1D,KAAG,cAAc,GAAG,IAkBpB,CAAC"}
1
+ {"version":3,"file":"TabsController.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,gFAI/B,IAAI,CACL,SAAS,EACT,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,CAC1D,KAAG,mBAAmB,GAAG,IAkBzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Tabs/TabsController.ts"],"sourcesContent":["import { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { type TabsProps } from './Tabs';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport type TabsController = {\n onChange: (id: string) => void;\n selectedTab: string;\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const useTabsController = ({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange: onSelectedIdChangeProp,\n}: Pick<\n TabsProps,\n 'selectedId' | 'defaultSelectedId' | 'onSelectedIdChange'\n>): TabsController | null => {\n const onSelectedIdChange = useStableCallback(\n (id: string | undefined) => id && onSelectedIdChangeProp?.(id),\n );\n\n const [value, onChange] = useCustomEnsuredControl<string | undefined>({\n onChange: onSelectedIdChange,\n value: selectedId,\n defaultValue: defaultSelectedId,\n });\n\n if ((!selectedId && !defaultSelectedId) || !value) {\n return null;\n }\n return {\n onChange,\n selectedTab: value,\n };\n};\n"],"names":["useCustomEnsuredControl","useStableCallback","useTabsController","selectedId","defaultSelectedId","onSelectedIdChange","onSelectedIdChangeProp","id","value","onChange","defaultValue","selectedTab"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,mCAAgC;AACxE,SAASC,iBAAiB,QAAQ,mCAAgC;AAQlE,qCAAqC,GAErC,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,UAAU,EACVC,iBAAiB,EACjBC,oBAAoBC,sBAAsB,EAI3C;IACC,MAAMD,qBAAqBJ,kBACzB,CAACM,KAA2BA,OAAMD,mCAAAA,6CAAAA,uBAAyBC;IAG7D,MAAM,CAACC,OAAOC,SAAS,GAAGT,wBAA4C;QACpES,UAAUJ;QACVG,OAAOL;QACPO,cAAcN;IAChB;IAEA,IAAI,AAAC,CAACD,cAAc,CAACC,qBAAsB,CAACI,OAAO;QACjD,OAAO;IACT;IACA,OAAO;QACLC;QACAE,aAAaH;IACf;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Tabs/TabsController.ts"],"sourcesContent":["import { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { type TabsProps } from './Tabs';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport type TabsControllerProps = {\n onChange: (id: string) => void;\n selectedTab: string;\n};\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const useTabsController = ({\n selectedId,\n defaultSelectedId,\n onSelectedIdChange: onSelectedIdChangeProp,\n}: Pick<\n TabsProps,\n 'selectedId' | 'defaultSelectedId' | 'onSelectedIdChange'\n>): TabsControllerProps | null => {\n const onSelectedIdChange = useStableCallback(\n (id: string | undefined) => id && onSelectedIdChangeProp?.(id),\n );\n\n const [value, onChange] = useCustomEnsuredControl<string | undefined>({\n onChange: onSelectedIdChange,\n value: selectedId,\n defaultValue: defaultSelectedId,\n });\n\n if ((!selectedId && !defaultSelectedId) || !value) {\n return null;\n }\n return {\n onChange,\n selectedTab: value,\n };\n};\n"],"names":["useCustomEnsuredControl","useStableCallback","useTabsController","selectedId","defaultSelectedId","onSelectedIdChange","onSelectedIdChangeProp","id","value","onChange","defaultValue","selectedTab"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,mCAAgC;AACxE,SAASC,iBAAiB,QAAQ,mCAAgC;AAQlE,qCAAqC,GAErC,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,UAAU,EACVC,iBAAiB,EACjBC,oBAAoBC,sBAAsB,EAI3C;IACC,MAAMD,qBAAqBJ,kBACzB,CAACM,KAA2BA,OAAMD,mCAAAA,6CAAAA,uBAAyBC;IAG7D,MAAM,CAACC,OAAOC,SAAS,GAAGT,wBAA4C;QACpES,UAAUJ;QACVG,OAAOL;QACPO,cAAcN;IAChB;IAEA,IAAI,AAAC,CAACD,cAAc,CAACC,qBAAsB,CAACI,OAAO;QACjD,OAAO;IACT;IACA,OAAO;QACLC;QACAE,aAAaH;IACf;AACF,EAAE"}
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { type TabsControllerProps } from './TabsController';
3
+ export type TabsControllerContextProps = TabsControllerProps | null;
4
+ export declare const TabsControllerContext: React.Context<TabsControllerContextProps>;
5
+ //# sourceMappingURL=TabsControllerContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsControllerContext.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsControllerContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG,IAAI,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,0BAA0B,CACrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ export const TabsControllerContext = React.createContext(null);
3
+
4
+ //# sourceMappingURL=TabsControllerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Tabs/TabsControllerContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type TabsControllerProps } from './TabsController';\n\nexport type TabsControllerContextProps = TabsControllerProps | null;\n\nexport const TabsControllerContext: React.Context<TabsControllerContextProps> =\n React.createContext<TabsControllerContextProps>(null);\n"],"names":["React","TabsControllerContext","createContext"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAK/B,OAAO,MAAMC,wBACXD,MAAME,aAAa,CAA6B,MAAM"}
@@ -1,13 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { type TabsProps } from './Tabs';
3
- import { type TabsController } from './TabsController';
4
3
  export interface TabsContextProps {
5
4
  mode: TabsProps['mode'];
6
5
  withGaps: boolean;
7
6
  layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;
8
7
  withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];
9
8
  scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;
10
- controller: TabsController | null;
11
9
  }
12
10
  export declare const TabsModeContext: React.Context<TabsContextProps>;
13
11
  //# sourceMappingURL=TabsModeContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsModeContext.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsModeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzD,uBAAuB,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9D,2BAA2B,EAAE,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAChF,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAGD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAQxD,CAAC"}
1
+ {"version":3,"file":"TabsModeContext.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/TabsModeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzD,uBAAuB,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9D,2BAA2B,EAAE,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC;CACjF;AAGD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAOxD,CAAC"}
@@ -4,8 +4,7 @@ import * as React from "react";
4
4
  withGaps: false,
5
5
  layoutFillMode: 'auto',
6
6
  withScrollToSelectedTab: false,
7
- scrollBehaviorToSelectedTab: 'nearest',
8
- controller: null
7
+ scrollBehaviorToSelectedTab: 'nearest'
9
8
  });
10
9
 
11
10
  //# sourceMappingURL=TabsModeContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Tabs/TabsModeContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type TabsProps } from './Tabs';\nimport { type TabsController } from './TabsController';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface TabsContextProps {\n mode: TabsProps['mode'];\n withGaps: boolean;\n layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;\n withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];\n scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;\n controller: TabsController | null;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const TabsModeContext: React.Context<TabsContextProps> =\n React.createContext<TabsContextProps>({\n mode: 'default',\n withGaps: false,\n layoutFillMode: 'auto',\n withScrollToSelectedTab: false,\n scrollBehaviorToSelectedTab: 'nearest',\n controller: null,\n });\n"],"names":["React","TabsModeContext","createContext","mode","withGaps","layoutFillMode","withScrollToSelectedTab","scrollBehaviorToSelectedTab","controller"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAa/B,qCAAqC,GAErC,OAAO,MAAMC,kBACXD,MAAME,aAAa,CAAmB;IACpCC,MAAM;IACNC,UAAU;IACVC,gBAAgB;IAChBC,yBAAyB;IACzBC,6BAA6B;IAC7BC,YAAY;AACd,GAAG"}
1
+ {"version":3,"sources":["../../../src/components/Tabs/TabsModeContext.ts"],"sourcesContent":["import * as React from 'react';\nimport { type TabsProps } from './Tabs';\n\n/* eslint-disable jsdoc/require-jsdoc */\nexport interface TabsContextProps {\n mode: TabsProps['mode'];\n withGaps: boolean;\n layoutFillMode: NonNullable<TabsProps['layoutFillMode']>;\n withScrollToSelectedTab: TabsProps['withScrollToSelectedTab'];\n scrollBehaviorToSelectedTab: Required<TabsProps['scrollBehaviorToSelectedTab']>;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const TabsModeContext: React.Context<TabsContextProps> =\n React.createContext<TabsContextProps>({\n mode: 'default',\n withGaps: false,\n layoutFillMode: 'auto',\n withScrollToSelectedTab: false,\n scrollBehaviorToSelectedTab: 'nearest',\n });\n"],"names":["React","TabsModeContext","createContext","mode","withGaps","layoutFillMode","withScrollToSelectedTab","scrollBehaviorToSelectedTab"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAW/B,qCAAqC,GAErC,OAAO,MAAMC,kBACXD,MAAME,aAAa,CAAmB;IACpCC,MAAM;IACNC,UAAU;IACVC,gBAAgB;IAChBC,yBAAyB;IACzBC,6BAA6B;AAC/B,GAAG"}