@vkontakte/vkui 7.0.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (683) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts +2 -1
  2. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/ActionSheet/types.d.ts +1 -1
  5. package/dist/components/ActionSheet/types.d.ts.map +1 -1
  6. package/dist/components/ActionSheet/types.js.map +1 -1
  7. package/dist/components/Alert/Alert.d.ts +1 -1
  8. package/dist/components/Alert/Alert.js.map +1 -1
  9. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  10. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  11. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  12. package/dist/components/AppRoot/AppRootContext.d.ts +2 -2
  13. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  14. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  15. package/dist/components/AppRoot/AppRootPortal.d.ts +1 -1
  16. package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
  17. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  18. package/dist/components/AppRoot/ScrollContext.d.ts +1 -1
  19. package/dist/components/AppRoot/ScrollContext.d.ts.map +1 -1
  20. package/dist/components/AppRoot/ScrollContext.js.map +1 -1
  21. package/dist/components/AspectRatio/AspectRatio.d.ts +7 -3
  22. package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -1
  23. package/dist/components/AspectRatio/AspectRatio.js +1 -1
  24. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  25. package/dist/components/Calendar/Calendar.d.ts +3 -4
  26. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  27. package/dist/components/Calendar/Calendar.js +81 -64
  28. package/dist/components/Calendar/Calendar.js.map +1 -1
  29. package/dist/components/CalendarDay/CalendarDay.d.ts +3 -0
  30. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  31. package/dist/components/CalendarDay/CalendarDay.js +3 -1
  32. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  33. package/dist/components/CalendarDays/CalendarDays.d.ts +3 -0
  34. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  35. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  36. package/dist/components/CalendarHeader/CalendarHeader.d.ts +12 -0
  37. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  38. package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
  39. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  40. package/dist/components/CalendarRange/CalendarRange.d.ts +7 -1
  41. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  42. package/dist/components/CalendarRange/CalendarRange.js +108 -93
  43. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  44. package/dist/components/CalendarTime/CalendarTime.d.ts +20 -4
  45. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  46. package/dist/components/CalendarTime/CalendarTime.js +68 -9
  47. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  48. package/dist/components/CardScroll/CardScroll.d.ts +2 -3
  49. package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
  50. package/dist/components/CardScroll/CardScroll.js +6 -2
  51. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  52. package/dist/components/CarouselBase/Bullets.d.ts +16 -0
  53. package/dist/components/CarouselBase/Bullets.d.ts.map +1 -0
  54. package/dist/components/CarouselBase/Bullets.js +21 -0
  55. package/dist/components/CarouselBase/Bullets.js.map +1 -0
  56. package/dist/components/CarouselBase/CarouselBase.d.ts +4 -0
  57. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -0
  58. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +175 -98
  59. package/dist/components/CarouselBase/CarouselBase.js.map +1 -0
  60. package/dist/components/CarouselBase/CarouselViewPort.d.ts +14 -0
  61. package/dist/components/CarouselBase/CarouselViewPort.d.ts.map +1 -0
  62. package/dist/components/CarouselBase/CarouselViewPort.js +29 -0
  63. package/dist/components/CarouselBase/CarouselViewPort.js.map +1 -0
  64. package/dist/components/CarouselBase/ScrollArrows.d.ts +23 -0
  65. package/dist/components/CarouselBase/ScrollArrows.d.ts.map +1 -0
  66. package/dist/components/CarouselBase/ScrollArrows.js +34 -0
  67. package/dist/components/CarouselBase/ScrollArrows.js.map +1 -0
  68. package/dist/components/CarouselBase/constants.d.ts.map +1 -0
  69. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  70. package/dist/components/CarouselBase/constants.js.map +1 -0
  71. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.d.ts +13 -4
  72. package/dist/components/CarouselBase/helpers.d.ts.map +1 -0
  73. package/dist/{cssm/components/BaseGallery → components}/CarouselBase/helpers.js +41 -5
  74. package/dist/components/CarouselBase/helpers.js.map +1 -0
  75. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.d.ts +1 -1
  76. package/dist/components/CarouselBase/hooks.d.ts.map +1 -0
  77. package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  78. package/dist/components/CarouselBase/hooks.js.map +1 -0
  79. package/dist/components/CarouselBase/types.d.ts +125 -0
  80. package/dist/components/CarouselBase/types.d.ts.map +1 -0
  81. package/dist/components/CarouselBase/types.js.map +1 -0
  82. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  83. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  84. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  85. package/dist/components/ChipsInput/useChipsInput.d.ts +1 -1
  86. package/dist/components/ChipsInput/useChipsInput.d.ts.map +1 -1
  87. package/dist/components/ChipsInput/useChipsInput.js.map +1 -1
  88. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  89. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  90. package/dist/components/ChipsSelect/useChipsSelect.d.ts +1 -1
  91. package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
  92. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  93. package/dist/components/Clickable/useState.js.map +1 -1
  94. package/dist/components/Clickable/useStateWithDelay.js +1 -1
  95. package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
  96. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  97. package/dist/components/ConfigProvider/ConfigProvider.js +8 -23
  98. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  99. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +1 -0
  100. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts.map +1 -1
  101. package/dist/components/ConfigProvider/ConfigProviderContext.js +22 -0
  102. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  103. package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
  104. package/dist/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  105. package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  106. package/dist/components/CustomScrollView/CustomScrollView.d.ts +5 -1
  107. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  108. package/dist/components/CustomScrollView/CustomScrollView.js +9 -4
  109. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  110. package/dist/components/CustomSelect/CustomSelect.d.ts +6 -2
  111. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  112. package/dist/components/CustomSelect/CustomSelect.js +8 -4
  113. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  114. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  115. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  116. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  117. package/dist/components/DateInput/DateInput.d.ts +24 -2
  118. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  119. package/dist/components/DateInput/DateInput.js +41 -6
  120. package/dist/components/DateInput/DateInput.js.map +1 -1
  121. package/dist/components/DateRangeInput/DateRangeInput.d.ts +19 -1
  122. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  123. package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
  124. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  125. package/dist/components/Epic/Epic.d.ts.map +1 -1
  126. package/dist/components/Epic/Epic.js.map +1 -1
  127. package/dist/components/FixedLayout/FixedLayout.d.ts.map +1 -1
  128. package/dist/components/FixedLayout/FixedLayout.js +1 -2
  129. package/dist/components/FixedLayout/FixedLayout.js.map +1 -1
  130. package/dist/components/Gallery/Gallery.d.ts +2 -3
  131. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  132. package/dist/components/Gallery/Gallery.js +3 -6
  133. package/dist/components/Gallery/Gallery.js.map +1 -1
  134. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +9 -1
  135. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  136. package/dist/components/HorizontalScroll/HorizontalScroll.js +6 -4
  137. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  138. package/dist/components/Image/Image.d.ts +1 -0
  139. package/dist/components/Image/Image.d.ts.map +1 -1
  140. package/dist/components/Image/Image.js +2 -0
  141. package/dist/components/Image/Image.js.map +1 -1
  142. package/dist/components/ImageBase/ImageBase.d.ts +8 -1
  143. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  144. package/dist/components/ImageBase/ImageBase.js +39 -11
  145. package/dist/components/ImageBase/ImageBase.js.map +1 -1
  146. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts +29 -0
  147. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.d.ts.map +1 -0
  148. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +96 -0
  149. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  150. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts +4 -0
  151. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.d.ts.map +1 -0
  152. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  153. package/dist/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  154. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +1 -1
  155. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -1
  156. package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  157. package/dist/components/ImageBase/context.d.ts.map +1 -1
  158. package/dist/components/ImageBase/context.js +3 -1
  159. package/dist/components/ImageBase/context.js.map +1 -1
  160. package/dist/components/ImageBase/types.d.ts +2 -0
  161. package/dist/components/ImageBase/types.d.ts.map +1 -1
  162. package/dist/components/ImageBase/types.js.map +1 -1
  163. package/dist/components/ImageBase/validators.d.ts +2 -1
  164. package/dist/components/ImageBase/validators.d.ts.map +1 -1
  165. package/dist/components/ImageBase/validators.js.map +1 -1
  166. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  167. package/dist/components/ModalCard/ModalCard.js +3 -2
  168. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  169. package/dist/components/ModalCardBase/ModalCardBase.d.ts +1 -1
  170. package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
  171. package/dist/components/ModalRoot/ModalRootContext.d.ts +1 -1
  172. package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
  173. package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
  174. package/dist/components/NativeSelect/NativeSelect.d.ts +4 -2
  175. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  176. package/dist/components/NativeSelect/NativeSelect.js +4 -3
  177. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  178. package/dist/components/Pagination/Pagination.d.ts +14 -1
  179. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  180. package/dist/components/Pagination/Pagination.js +13 -4
  181. package/dist/components/Pagination/Pagination.js.map +1 -1
  182. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts +2 -0
  183. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.d.ts.map +1 -1
  184. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  185. package/dist/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  186. package/dist/components/Popover/Popover.d.ts +2 -2
  187. package/dist/components/Popover/Popover.d.ts.map +1 -1
  188. package/dist/components/Popover/Popover.js +6 -126
  189. package/dist/components/Popover/Popover.js.map +1 -1
  190. package/dist/components/Popover/usePopover.d.ts +14 -0
  191. package/dist/components/Popover/usePopover.d.ts.map +1 -0
  192. package/dist/components/Popover/usePopover.js +138 -0
  193. package/dist/components/Popover/usePopover.js.map +1 -0
  194. package/dist/components/Popper/Popper.d.ts +2 -2
  195. package/dist/components/Popper/Popper.d.ts.map +1 -1
  196. package/dist/components/Popper/Popper.js +9 -2
  197. package/dist/components/Popper/Popper.js.map +1 -1
  198. package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
  199. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  200. package/dist/components/Removable/Removable.d.ts +2 -2
  201. package/dist/components/Removable/Removable.js.map +1 -1
  202. package/dist/components/RichCell/RichCell.d.ts +11 -1
  203. package/dist/components/RichCell/RichCell.d.ts.map +1 -1
  204. package/dist/components/RichCell/RichCell.js +15 -8
  205. package/dist/components/RichCell/RichCell.js.map +1 -1
  206. package/dist/components/Root/Root.d.ts.map +1 -1
  207. package/dist/components/Root/Root.js +3 -1
  208. package/dist/components/Root/Root.js.map +1 -1
  209. package/dist/components/SegmentedControl/SegmentedControl.d.ts +2 -2
  210. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  211. package/dist/components/SegmentedControl/SegmentedControl.js +30 -10
  212. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  213. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts +5 -3
  214. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.d.ts.map +1 -1
  215. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +6 -17
  216. package/dist/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  217. package/dist/components/Select/Select.d.ts.map +1 -1
  218. package/dist/components/Select/Select.js +3 -2
  219. package/dist/components/Select/Select.js.map +1 -1
  220. package/dist/components/Skeleton/Skeleton.js +2 -2
  221. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  222. package/dist/components/Slider/Slider.d.ts +9 -1
  223. package/dist/components/Slider/Slider.d.ts.map +1 -1
  224. package/dist/components/Slider/Slider.js +5 -1
  225. package/dist/components/Slider/Slider.js.map +1 -1
  226. package/dist/components/Snackbar/Snackbar.js +1 -1
  227. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  228. package/dist/components/SplitCol/SplitColContext.d.ts +1 -1
  229. package/dist/components/SplitCol/SplitColContext.d.ts.map +1 -1
  230. package/dist/components/SplitCol/SplitColContext.js.map +1 -1
  231. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  232. package/dist/components/Tabs/Tabs.js +2 -82
  233. package/dist/components/Tabs/Tabs.js.map +1 -1
  234. package/dist/components/Textarea/Textarea.js +2 -2
  235. package/dist/components/Textarea/Textarea.js.map +1 -1
  236. package/dist/components/Textarea/useResizeTextarea.d.ts +1 -1
  237. package/dist/components/Textarea/useResizeTextarea.d.ts.map +1 -1
  238. package/dist/components/Textarea/useResizeTextarea.js +1 -1
  239. package/dist/components/Textarea/useResizeTextarea.js.map +1 -1
  240. package/dist/components/Tooltip/Tooltip.d.ts +3 -3
  241. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  242. package/dist/components/Tooltip/Tooltip.js +4 -2
  243. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  244. package/dist/components/TooltipBase/TooltipBase.d.ts.map +1 -1
  245. package/dist/components/TooltipBase/TooltipBase.js +2 -0
  246. package/dist/components/TooltipBase/TooltipBase.js.map +1 -1
  247. package/dist/components/UsersStack/UsersStack.d.ts +1 -1
  248. package/dist/components/UsersStack/UsersStack.d.ts.map +1 -1
  249. package/dist/components/UsersStack/UsersStack.js +16 -5
  250. package/dist/components/UsersStack/UsersStack.js.map +1 -1
  251. package/dist/components/View/View.d.ts.map +1 -1
  252. package/dist/components/View/View.js +3 -1
  253. package/dist/components/View/View.js.map +1 -1
  254. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  255. package/dist/components/View/ViewInfinite.js +3 -1
  256. package/dist/components/View/ViewInfinite.js.map +1 -1
  257. package/dist/components.css +1 -1
  258. package/dist/components.css.map +1 -1
  259. package/dist/context/CalendarDirectionContext.d.ts +7 -0
  260. package/dist/context/CalendarDirectionContext.d.ts.map +1 -0
  261. package/dist/context/CalendarDirectionContext.js +7 -0
  262. package/dist/context/CalendarDirectionContext.js.map +1 -0
  263. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  264. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  265. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  266. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  267. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  268. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  269. package/dist/cssm/components/AppRoot/ScrollContext.js.map +1 -1
  270. package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
  271. package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
  272. package/dist/cssm/components/Calendar/Calendar.js +79 -64
  273. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  274. package/dist/cssm/components/CalendarDay/CalendarDay.js +3 -1
  275. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  276. package/dist/cssm/components/CalendarDay/CalendarDay.module.css +4 -0
  277. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  278. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
  279. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  280. package/dist/cssm/components/CalendarRange/CalendarRange.js +108 -94
  281. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  282. package/dist/cssm/components/CalendarTime/CalendarTime.js +67 -9
  283. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  284. package/dist/cssm/components/CardScroll/CardScroll.js +3 -1
  285. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  286. package/dist/cssm/components/CarouselBase/Bullets.js +22 -0
  287. package/dist/cssm/components/CarouselBase/Bullets.js.map +1 -0
  288. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/CarouselBase.js +164 -97
  289. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -0
  290. package/dist/cssm/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +21 -1
  291. package/dist/cssm/components/CarouselBase/CarouselViewPort.js +30 -0
  292. package/dist/cssm/components/CarouselBase/CarouselViewPort.js.map +1 -0
  293. package/dist/cssm/components/CarouselBase/ScrollArrows.js +35 -0
  294. package/dist/cssm/components/CarouselBase/ScrollArrows.js.map +1 -0
  295. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/constants.js +5 -1
  296. package/dist/cssm/components/CarouselBase/constants.js.map +1 -0
  297. package/dist/{components/BaseGallery → cssm/components}/CarouselBase/helpers.js +39 -5
  298. package/dist/cssm/components/CarouselBase/helpers.js.map +1 -0
  299. package/dist/cssm/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.js +2 -2
  300. package/dist/cssm/components/CarouselBase/hooks.js.map +1 -0
  301. package/dist/cssm/components/CarouselBase/types.js.map +1 -0
  302. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  303. package/dist/cssm/components/ChipsInput/useChipsInput.js.map +1 -1
  304. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  305. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  306. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  307. package/dist/cssm/components/Clickable/useStateWithDelay.js +1 -1
  308. package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
  309. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -23
  310. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  311. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js +22 -0
  312. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  313. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +2 -3
  314. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  315. package/dist/cssm/components/ContentCard/ContentCard.module.css +1 -0
  316. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +8 -4
  317. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  318. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +6 -2
  319. package/dist/cssm/components/CustomSelect/CustomSelect.js +6 -3
  320. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  321. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  322. package/dist/cssm/components/DateInput/DateInput.js +37 -5
  323. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  324. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
  325. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  326. package/dist/cssm/components/Epic/Epic.js.map +1 -1
  327. package/dist/cssm/components/FixedLayout/FixedLayout.js +1 -2
  328. package/dist/cssm/components/FixedLayout/FixedLayout.js.map +1 -1
  329. package/dist/cssm/components/FormField/FormField.module.css +11 -11
  330. package/dist/cssm/components/Gallery/Gallery.js +3 -5
  331. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  332. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +3 -3
  333. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  334. package/dist/cssm/components/Image/Image.js +2 -0
  335. package/dist/cssm/components/Image/Image.js.map +1 -1
  336. package/dist/cssm/components/ImageBase/ImageBase.js +35 -9
  337. package/dist/cssm/components/ImageBase/ImageBase.js.map +1 -1
  338. package/dist/cssm/components/ImageBase/ImageBase.module.css +11 -2
  339. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +91 -0
  340. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -0
  341. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  342. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js +35 -0
  343. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/helpers.js.map +1 -0
  344. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -1
  345. package/dist/cssm/components/ImageBase/context.js +3 -1
  346. package/dist/cssm/components/ImageBase/context.js.map +1 -1
  347. package/dist/cssm/components/ImageBase/types.js.map +1 -1
  348. package/dist/cssm/components/ImageBase/validators.js.map +1 -1
  349. package/dist/cssm/components/ModalCard/ModalCard.js +1 -1
  350. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  351. package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
  352. package/dist/cssm/components/ModalPage/ModalPage.module.css +5 -4
  353. package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
  354. package/dist/cssm/components/NativeSelect/NativeSelect.js +4 -3
  355. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  356. package/dist/cssm/components/Pagination/Pagination.js +10 -4
  357. package/dist/cssm/components/Pagination/Pagination.js.map +1 -1
  358. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js +2 -1
  359. package/dist/cssm/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.js.map +1 -1
  360. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +5 -4
  361. package/dist/cssm/components/Popover/Popover.js +5 -93
  362. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  363. package/dist/cssm/components/Popover/usePopover.js +102 -0
  364. package/dist/cssm/components/Popover/usePopover.js.map +1 -0
  365. package/dist/cssm/components/Popper/Popper.js +6 -1
  366. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  367. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +1 -1
  368. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  369. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  370. package/dist/cssm/components/RichCell/RichCell.js +13 -8
  371. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  372. package/dist/cssm/components/RichCell/RichCell.module.css +17 -3
  373. package/dist/cssm/components/Root/Root.js +3 -1
  374. package/dist/cssm/components/Root/Root.js.map +1 -1
  375. package/dist/cssm/components/SegmentedControl/SegmentedControl.js +27 -7
  376. package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
  377. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js +5 -5
  378. package/dist/cssm/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.js.map +1 -1
  379. package/dist/cssm/components/Select/Select.js +1 -1
  380. package/dist/cssm/components/Select/Select.js.map +1 -1
  381. package/dist/cssm/components/Skeleton/Skeleton.js +2 -2
  382. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  383. package/dist/cssm/components/Slider/Slider.js +3 -1
  384. package/dist/cssm/components/Slider/Slider.js.map +1 -1
  385. package/dist/cssm/components/Snackbar/Snackbar.js +1 -1
  386. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  387. package/dist/cssm/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  388. package/dist/cssm/components/SplitCol/SplitColContext.js.map +1 -1
  389. package/dist/cssm/components/Tabs/Tabs.js +2 -82
  390. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  391. package/dist/cssm/components/Textarea/Textarea.js +2 -2
  392. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  393. package/dist/cssm/components/Textarea/useResizeTextarea.js +1 -1
  394. package/dist/cssm/components/Textarea/useResizeTextarea.js.map +1 -1
  395. package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
  396. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  397. package/dist/cssm/components/TooltipBase/TooltipBase.js +2 -0
  398. package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -1
  399. package/dist/cssm/components/TooltipBase/TooltipBase.module.css +5 -0
  400. package/dist/cssm/components/UsersStack/UsersStack.js +15 -4
  401. package/dist/cssm/components/UsersStack/UsersStack.js.map +1 -1
  402. package/dist/cssm/components/UsersStack/UsersStack.module.css +27 -17
  403. package/dist/cssm/components/View/View.js +3 -1
  404. package/dist/cssm/components/View/View.js.map +1 -1
  405. package/dist/cssm/components/View/ViewInfinite.js +3 -1
  406. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  407. package/dist/cssm/context/CalendarDirectionContext.js +7 -0
  408. package/dist/cssm/context/CalendarDirectionContext.js.map +1 -0
  409. package/dist/cssm/helpers/getMergedSameEventsByProps.js.map +1 -1
  410. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  411. package/dist/cssm/hooks/useDirection.js.map +1 -1
  412. package/dist/cssm/hooks/useDraggableWithDomApi/types.js.map +1 -1
  413. package/dist/cssm/hooks/useEnsuredControl.js +1 -1
  414. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  415. package/dist/cssm/hooks/useExternRef.js.map +1 -1
  416. package/dist/cssm/hooks/useFocusTrap.js.map +1 -1
  417. package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
  418. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  419. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  420. package/dist/cssm/hooks/useNativeFormResetListener.js.map +1 -1
  421. package/dist/cssm/hooks/usePatchChildren.js.map +1 -1
  422. package/dist/cssm/hooks/usePrevious.js +1 -1
  423. package/dist/cssm/hooks/usePrevious.js.map +1 -1
  424. package/dist/cssm/hooks/useResizeObserver.js +20 -4
  425. package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
  426. package/dist/cssm/hooks/useStateWithPrev.js.map +1 -1
  427. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  428. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
  429. package/dist/cssm/hooks/useTabsNavigation.js +90 -0
  430. package/dist/cssm/hooks/useTabsNavigation.js.map +1 -0
  431. package/dist/cssm/index.js +4 -0
  432. package/dist/cssm/index.js.map +1 -1
  433. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  434. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  435. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  436. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  437. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  438. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  439. package/dist/cssm/lib/utils.js.map +1 -1
  440. package/dist/cssm/styles/constants.css +1 -0
  441. package/dist/helpers/getMergedSameEventsByProps.d.ts +1 -1
  442. package/dist/helpers/getMergedSameEventsByProps.d.ts.map +1 -1
  443. package/dist/helpers/getMergedSameEventsByProps.js.map +1 -1
  444. package/dist/hooks/useDateInput.d.ts +3 -3
  445. package/dist/hooks/useDateInput.d.ts.map +1 -1
  446. package/dist/hooks/useDateInput.js.map +1 -1
  447. package/dist/hooks/useDirection.d.ts +2 -2
  448. package/dist/hooks/useDirection.d.ts.map +1 -1
  449. package/dist/hooks/useDirection.js.map +1 -1
  450. package/dist/hooks/useDraggableWithDomApi/types.d.ts +1 -1
  451. package/dist/hooks/useDraggableWithDomApi/types.d.ts.map +1 -1
  452. package/dist/hooks/useDraggableWithDomApi/types.js.map +1 -1
  453. package/dist/hooks/useEnsuredControl.js +1 -1
  454. package/dist/hooks/useEnsuredControl.js.map +1 -1
  455. package/dist/hooks/useExternRef.d.ts +1 -1
  456. package/dist/hooks/useExternRef.d.ts.map +1 -1
  457. package/dist/hooks/useExternRef.js.map +1 -1
  458. package/dist/hooks/useFocusTrap.d.ts +1 -1
  459. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  460. package/dist/hooks/useFocusTrap.js.map +1 -1
  461. package/dist/hooks/useGlobalOnClickOutside.d.ts +1 -1
  462. package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
  463. package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
  464. package/dist/hooks/useKeyboardInputTracker.d.ts +1 -1
  465. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  466. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  467. package/dist/hooks/useMutationObserver.d.ts +1 -1
  468. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  469. package/dist/hooks/useMutationObserver.js.map +1 -1
  470. package/dist/hooks/useNativeFormResetListener.d.ts +1 -1
  471. package/dist/hooks/useNativeFormResetListener.d.ts.map +1 -1
  472. package/dist/hooks/useNativeFormResetListener.js.map +1 -1
  473. package/dist/hooks/usePatchChildren.d.ts +2 -2
  474. package/dist/hooks/usePatchChildren.d.ts.map +1 -1
  475. package/dist/hooks/usePatchChildren.js.map +1 -1
  476. package/dist/hooks/usePrevious.js +1 -1
  477. package/dist/hooks/usePrevious.js.map +1 -1
  478. package/dist/hooks/useResizeObserver.d.ts +1 -1
  479. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  480. package/dist/hooks/useResizeObserver.js +20 -4
  481. package/dist/hooks/useResizeObserver.js.map +1 -1
  482. package/dist/hooks/useStateWithPrev.d.ts.map +1 -1
  483. package/dist/hooks/useStateWithPrev.js.map +1 -1
  484. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +1 -1
  485. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  486. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  487. package/dist/hooks/useSyncHTMLWithTokens.d.ts +1 -1
  488. package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -1
  489. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
  490. package/dist/hooks/useTabsNavigation.d.ts +5 -0
  491. package/dist/hooks/useTabsNavigation.d.ts.map +1 -0
  492. package/dist/hooks/useTabsNavigation.js +90 -0
  493. package/dist/hooks/useTabsNavigation.js.map +1 -0
  494. package/dist/index.d.ts +5 -1
  495. package/dist/index.d.ts.map +1 -1
  496. package/dist/index.js +4 -0
  497. package/dist/index.js.map +1 -1
  498. package/dist/lib/animation/useCSSTransition.d.ts +1 -1
  499. package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
  500. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  501. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +1 -1
  502. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  503. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +4 -4
  504. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  505. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +10 -1
  506. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  507. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  508. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts +1 -1
  509. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  510. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +10 -3
  511. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  512. package/dist/lib/utils.d.ts +1 -1
  513. package/dist/lib/utils.d.ts.map +1 -1
  514. package/dist/lib/utils.js.map +1 -1
  515. package/dist/vkui.css +1 -1
  516. package/dist/vkui.css.map +1 -1
  517. package/package.json +6 -6
  518. package/src/components/ActionSheet/ActionSheet.tsx +3 -4
  519. package/src/components/ActionSheet/types.ts +1 -1
  520. package/src/components/Alert/Alert.tsx +1 -1
  521. package/src/components/AppRoot/AppRoot.tsx +1 -1
  522. package/src/components/AppRoot/AppRootContext.ts +2 -2
  523. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  524. package/src/components/AppRoot/ScrollContext.tsx +1 -1
  525. package/src/components/AspectRatio/AspectRatio.tsx +11 -4
  526. package/src/components/Calendar/Calendar.tsx +90 -72
  527. package/src/components/CalendarDay/CalendarDay.module.css +4 -0
  528. package/src/components/CalendarDay/CalendarDay.tsx +10 -1
  529. package/src/components/CalendarDays/CalendarDays.tsx +3 -0
  530. package/src/components/CalendarHeader/CalendarHeader.tsx +17 -2
  531. package/src/components/CalendarRange/CalendarRange.tsx +110 -84
  532. package/src/components/CalendarTime/CalendarTime.tsx +104 -16
  533. package/src/components/CardScroll/CardScroll.tsx +8 -2
  534. package/src/components/CarouselBase/Bullets.tsx +36 -0
  535. package/src/components/{BaseGallery/BaseGallery.module.css → CarouselBase/CarouselBase.module.css} +19 -1
  536. package/src/components/CarouselBase/CarouselBase.tsx +502 -0
  537. package/src/components/CarouselBase/CarouselViewPort.tsx +54 -0
  538. package/src/components/CarouselBase/ScrollArrows.tsx +80 -0
  539. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/constants.ts +4 -0
  540. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/helpers.ts +67 -7
  541. package/src/components/{BaseGallery/CarouselBase → CarouselBase}/hooks.ts +2 -2
  542. package/src/components/CarouselBase/types.ts +135 -0
  543. package/src/components/ChipsInput/ChipsInput.tsx +1 -1
  544. package/src/components/ChipsInput/useChipsInput.ts +2 -2
  545. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  546. package/src/components/ChipsSelect/useChipsSelect.ts +1 -1
  547. package/src/components/Clickable/useState.tsx +2 -2
  548. package/src/components/Clickable/useStateWithDelay.tsx +1 -1
  549. package/src/components/ConfigProvider/ConfigProvider.tsx +8 -35
  550. package/src/components/ConfigProvider/ConfigProviderContext.tsx +36 -0
  551. package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -5
  552. package/src/components/ContentCard/ContentCard.module.css +1 -0
  553. package/src/components/CustomScrollView/CustomScrollView.module.css +6 -2
  554. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  555. package/src/components/CustomSelect/CustomSelect.tsx +12 -4
  556. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -1
  557. package/src/components/DateInput/DateInput.tsx +62 -5
  558. package/src/components/DateRangeInput/DateRangeInput.tsx +22 -2
  559. package/src/components/Epic/Epic.tsx +5 -3
  560. package/src/components/FixedLayout/FixedLayout.tsx +1 -2
  561. package/src/components/FormField/FormField.module.css +11 -11
  562. package/src/components/Gallery/Gallery.tsx +4 -10
  563. package/src/components/HorizontalScroll/HorizontalScroll.tsx +12 -2
  564. package/src/components/Image/Image.tsx +4 -0
  565. package/src/components/ImageBase/ImageBase.module.css +11 -2
  566. package/src/components/ImageBase/ImageBase.tsx +69 -10
  567. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.module.css +134 -0
  568. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +168 -0
  569. package/src/components/ImageBase/ImageBaseFloatElement/helpers.ts +44 -0
  570. package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +1 -1
  571. package/src/components/ImageBase/context.ts +2 -0
  572. package/src/components/ImageBase/types.ts +2 -0
  573. package/src/components/ImageBase/validators.ts +5 -4
  574. package/src/components/ModalCard/ModalCard.tsx +5 -1
  575. package/src/components/ModalCardBase/ModalCardBase.tsx +1 -1
  576. package/src/components/ModalPage/ModalPage.module.css +5 -4
  577. package/src/components/ModalRoot/ModalRootContext.tsx +3 -1
  578. package/src/components/NativeSelect/NativeSelect.tsx +4 -3
  579. package/src/components/Pagination/Pagination.tsx +23 -4
  580. package/src/components/Pagination/PaginationNavigationButton/PaginationNavigationButton.tsx +4 -2
  581. package/src/components/PanelHeader/PanelHeader.module.css +5 -4
  582. package/src/components/Popover/Popover.tsx +6 -166
  583. package/src/components/Popover/usePopover.tsx +183 -0
  584. package/src/components/Popper/Popper.tsx +12 -1
  585. package/src/components/PullToRefresh/PullToRefresh.tsx +1 -1
  586. package/src/components/Removable/Removable.tsx +2 -2
  587. package/src/components/RichCell/RichCell.module.css +17 -3
  588. package/src/components/RichCell/RichCell.tsx +28 -8
  589. package/src/components/Root/Root.tsx +4 -2
  590. package/src/components/SegmentedControl/SegmentedControl.tsx +46 -14
  591. package/src/components/SegmentedControl/SegmentedControlOption/SegmentedControlOption.tsx +14 -10
  592. package/src/components/Select/Select.tsx +1 -0
  593. package/src/components/Skeleton/Skeleton.tsx +3 -3
  594. package/src/components/Slider/Slider.tsx +12 -0
  595. package/src/components/Snackbar/Snackbar.tsx +1 -1
  596. package/src/components/Snackbar/subcomponents/Basic/Basic.module.css +12 -6
  597. package/src/components/SplitCol/SplitColContext.tsx +1 -1
  598. package/src/components/Tabs/Tabs.tsx +2 -99
  599. package/src/components/Textarea/Textarea.tsx +2 -2
  600. package/src/components/Textarea/useResizeTextarea.ts +3 -3
  601. package/src/components/Tooltip/Tooltip.tsx +4 -1
  602. package/src/components/TooltipBase/TooltipBase.module.css +5 -0
  603. package/src/components/TooltipBase/TooltipBase.tsx +8 -2
  604. package/src/components/UsersStack/UsersStack.module.css +27 -17
  605. package/src/components/UsersStack/UsersStack.tsx +24 -3
  606. package/src/components/View/View.tsx +9 -5
  607. package/src/components/View/ViewInfinite.tsx +5 -3
  608. package/src/context/CalendarDirectionContext.ts +12 -0
  609. package/src/helpers/getMergedSameEventsByProps.ts +1 -1
  610. package/src/hooks/useDateInput.ts +5 -5
  611. package/src/hooks/useDirection.ts +3 -3
  612. package/src/hooks/useDraggableWithDomApi/types.ts +1 -1
  613. package/src/hooks/useEnsuredControl.ts +1 -1
  614. package/src/hooks/useExternRef.ts +2 -2
  615. package/src/hooks/useFocusTrap.ts +1 -1
  616. package/src/hooks/useGlobalOnClickOutside.ts +1 -1
  617. package/src/hooks/useKeyboardInputTracker.ts +1 -1
  618. package/src/hooks/useMutationObserver.ts +1 -1
  619. package/src/hooks/useNativeFormResetListener.ts +1 -1
  620. package/src/hooks/usePatchChildren.ts +2 -9
  621. package/src/hooks/usePrevious.ts +1 -1
  622. package/src/hooks/useResizeObserver.ts +30 -6
  623. package/src/hooks/useStateWithPrev.ts +1 -5
  624. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
  625. package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
  626. package/src/hooks/useTabsNavigation.ts +104 -0
  627. package/src/index.ts +7 -0
  628. package/src/lib/animation/useCSSTransition.ts +1 -1
  629. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +9 -9
  630. package/src/lib/floating/useFloatingWithInteractions/types.ts +15 -5
  631. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +7 -2
  632. package/src/lib/utils.ts +2 -2
  633. package/src/styles/constants.css +1 -0
  634. package/dist/components/BaseGallery/BaseGallery.d.ts +0 -4
  635. package/dist/components/BaseGallery/BaseGallery.d.ts.map +0 -1
  636. package/dist/components/BaseGallery/BaseGallery.js +0 -321
  637. package/dist/components/BaseGallery/BaseGallery.js.map +0 -1
  638. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts +0 -4
  639. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +0 -1
  640. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  641. package/dist/components/BaseGallery/CarouselBase/constants.d.ts.map +0 -1
  642. package/dist/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  643. package/dist/components/BaseGallery/CarouselBase/helpers.d.ts.map +0 -1
  644. package/dist/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  645. package/dist/components/BaseGallery/CarouselBase/hooks.d.ts.map +0 -1
  646. package/dist/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  647. package/dist/components/BaseGallery/CarouselBase/types.d.ts +0 -54
  648. package/dist/components/BaseGallery/CarouselBase/types.d.ts.map +0 -1
  649. package/dist/components/BaseGallery/CarouselBase/types.js.map +0 -1
  650. package/dist/components/BaseGallery/helpers.d.ts +0 -13
  651. package/dist/components/BaseGallery/helpers.d.ts.map +0 -1
  652. package/dist/components/BaseGallery/helpers.js +0 -24
  653. package/dist/components/BaseGallery/helpers.js.map +0 -1
  654. package/dist/components/BaseGallery/types.d.ts +0 -55
  655. package/dist/components/BaseGallery/types.d.ts.map +0 -1
  656. package/dist/components/BaseGallery/types.js.map +0 -1
  657. package/dist/cssm/components/BaseGallery/BaseGallery.js +0 -293
  658. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +0 -1
  659. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +0 -1
  660. package/dist/cssm/components/BaseGallery/CarouselBase/constants.js.map +0 -1
  661. package/dist/cssm/components/BaseGallery/CarouselBase/helpers.js.map +0 -1
  662. package/dist/cssm/components/BaseGallery/CarouselBase/hooks.js.map +0 -1
  663. package/dist/cssm/components/BaseGallery/CarouselBase/types.js +0 -3
  664. package/dist/cssm/components/BaseGallery/CarouselBase/types.js.map +0 -1
  665. package/dist/cssm/components/BaseGallery/helpers.js +0 -24
  666. package/dist/cssm/components/BaseGallery/helpers.js.map +0 -1
  667. package/dist/cssm/components/BaseGallery/types.js +0 -3
  668. package/dist/cssm/components/BaseGallery/types.js.map +0 -1
  669. package/dist/cssm/hooks/useObjectMemo.js +0 -15
  670. package/dist/cssm/hooks/useObjectMemo.js.map +0 -1
  671. package/dist/hooks/useObjectMemo.d.ts +0 -5
  672. package/dist/hooks/useObjectMemo.d.ts.map +0 -1
  673. package/dist/hooks/useObjectMemo.js +0 -15
  674. package/dist/hooks/useObjectMemo.js.map +0 -1
  675. package/src/components/BaseGallery/BaseGallery.tsx +0 -380
  676. package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +0 -399
  677. package/src/components/BaseGallery/CarouselBase/types.ts +0 -56
  678. package/src/components/BaseGallery/helpers.ts +0 -46
  679. package/src/components/BaseGallery/types.ts +0 -61
  680. package/src/hooks/useObjectMemo.ts +0 -16
  681. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/constants.d.ts +0 -0
  682. /package/dist/components/{BaseGallery/CarouselBase → CarouselBase}/types.js +0 -0
  683. /package/dist/{components/BaseGallery → cssm/components/CarouselBase}/types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type MouseEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { Keys } from '../../lib/accessibility';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipsInputBase } from '../ChipsInputBase/ChipsInputBase';\nimport {\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n renderChipDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipsInputBaseProps } from '../ChipsInputBase/types';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n DEFAULT_EMPTY_TEXT,\n DEFAULT_SELECTED_BEHAVIOR,\n FOCUS_ACTION_NEXT,\n FOCUS_ACTION_PREV,\n isCreateNewOptionPreset,\n isEmptyOptionPreset,\n isNotServicePreset,\n renderOptionDefault,\n} from './constants';\nimport type { FocusActionType, OptionPreset } from './types';\nimport { useChipsSelect, type UseChipsSelectProps } from './useChipsSelect';\nimport styles from './ChipsSelect.module.css';\n\nconst findIndexAfter = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n startIndex = -1,\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex(\n (option, i) => i > startIndex && (!isNotServicePreset(option) || !option.disabled),\n );\n};\n\nconst findIndexBefore = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!isNotServicePreset(option) || !option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nexport interface ChipsSelectProps<O extends ChipOption>\n extends ChipsInputBaseProps<O>,\n UseChipsSelectProps<O>,\n Pick<FormFieldProps, 'status' | 'mode' | 'before'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'> {\n placement?: 'top' | 'bottom';\n /**\n * Отрисовка Spinner вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n /**\n * Принудительно использовать портал.\n */\n forceDropdownPortal?: boolean;\n /**\n * Передача `data-testid`.\n */\n dropdownTestId?: string;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n\n renderOption?: (props: CustomSelectOptionProps, option: O) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (event: React.MouseEvent | React.KeyboardEvent, option: O) => void;\n\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>({\n // FormFieldProps\n id: labelledbyId,\n getRootRef,\n className,\n status = 'default',\n icon: dropdownIconProp,\n onChangeStart,\n\n // CustomSelectDropdownProps\n options: optionsProp,\n placement: placementProp = 'bottom',\n closeAfterSelect = true,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n fetching = false,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight = false,\n filterFn = defaultFilterFn,\n dropdownTestId,\n onClose,\n onOpen,\n overscrollBehavior,\n renderDropdown,\n\n // ChipsInputProps\n getRef,\n value: valueProp,\n defaultValue,\n inputValue: inputValueProp,\n defaultInputValue,\n disabled,\n readOnly,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n getNewOptionData = getNewOptionDataDefault,\n renderChip = renderChipDefault,\n renderOption = renderOptionDefault,\n onChange,\n onFocus: onFocusProp,\n onInputChange: onInputChangeProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n dropdownOffsetDistance = 0,\n allowClearButton,\n clearButtonTestId,\n ...restProps\n}: ChipsSelectProps<Option>): React.ReactNode => {\n const {\n // Связано с ChipsInputProps\n // option\n value,\n addOptionFromInput,\n addOption,\n removeOption,\n clearOptions,\n // input\n inputRef: inputRefHook,\n inputValue,\n clearInput,\n onInputChange,\n\n // Связано с CustomSelectDropdownProps\n options,\n opened,\n setOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n } = useChipsSelect({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // dropdown\n options: optionsProp,\n emptyText,\n creatable,\n filterFn,\n selectedBehavior,\n onClose,\n onOpen,\n\n // other\n disabled,\n });\n\n // Связано с ChipsInputProps\n const rootRef = useExternRef(getRootRef);\n const inputRef = useExternRef(getRef, inputRefHook);\n\n // Связано с CustomSelectDropdownProps\n const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = React.useState<\n 'top' | 'bottom'\n >(placementProp);\n\n const onDropdownPlacementChange = React.useCallback((placement: Placement) => {\n if (placement.startsWith('top')) {\n setDropdownVerticalPlacement('top');\n } else if (placement.startsWith('bottom')) {\n setDropdownVerticalPlacement('bottom');\n }\n }, []);\n\n const dropdownId = React.useId();\n const dropdownCurrentItemId =\n focusedOptionIndex !== null ? `${dropdownId}-${focusedOptionIndex}` : undefined;\n const dropdownScrollBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onFocusProp) {\n onFocusProp(event);\n }\n\n if (!readOnly) {\n setOpened(true);\n setFocusedOptionIndex(null);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlurProp) {\n onBlurProp(event);\n }\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!readOnly && !event.defaultPrevented && !creatable) {\n event.preventDefault();\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = dropdownScrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n /* istanbul ignore next: нет представления как воспроизвести */\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number | null) => {\n if (index === oldIndex) {\n /* istanbul ignore next: нет представления как воспроизвести */\n return;\n }\n\n const option = options[index];\n\n if (isNotServicePreset(option) && option.disabled) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === FOCUS_ACTION_PREV) {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDownProp) {\n onKeyDownProp(event);\n }\n\n if (event.defaultPrevented || readOnly) {\n return;\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n case Keys.ARROW_DOWN:\n event.preventDefault();\n\n if (!opened) {\n setOpened(true);\n focusOption(null, FOCUS_ACTION_NEXT);\n } else {\n focusOption(\n focusedOptionIndex,\n event.key === Keys.ARROW_UP ? FOCUS_ACTION_PREV : FOCUS_ACTION_NEXT,\n );\n }\n break;\n case Keys.ENTER: {\n if (!opened) {\n break;\n }\n if (focusedOptionIndex != null) {\n const foundOption = options[focusedOptionIndex];\n if (foundOption && isNotServicePreset(foundOption)) {\n event.preventDefault();\n\n if (onChangeStart) {\n onChangeStart(event, foundOption);\n }\n\n addOption(foundOption);\n setFocusedOptionIndex(null);\n clearInput();\n if (closeAfterSelect) {\n setOpened(false);\n }\n\n break;\n }\n }\n\n if (!creatable) {\n event.preventDefault();\n }\n break;\n }\n case Keys.ESCAPE:\n case Keys.TAB:\n if (opened) {\n setOpened(false);\n }\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex === null) {\n setFocusedOption(null);\n } else {\n const foundFocusedOptionIndex = options[focusedOptionIndex];\n\n if (foundFocusedOptionIndex && isNotServicePreset(foundFocusedOptionIndex)) {\n setFocusedOption(foundFocusedOptionIndex);\n }\n }\n }, [options, focusedOptionIndex, setFocusedOption]);\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const handleClickOutside = React.useCallback(() => {\n setOpened(false);\n }, [setOpened]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n opened ? rootRef : null,\n opened ? dropdownScrollBoxRef : null,\n );\n\n const onDropdownIconClick: MouseEventHandler<SVGSVGElement> = React.useCallback(\n (e) => {\n if (opened) {\n e.preventDefault();\n setOpened(false);\n }\n },\n [opened, setOpened],\n );\n\n const dropdownContent = React.useMemo(() => {\n const defaultDropdownContent = options.map((option, index) => {\n const dropdownItemId = `${dropdownId}-${index}`;\n\n if (isEmptyOptionPreset(option)) {\n return (\n <Footnote key=\"empty-text\" className={styles.empty}>\n {option.placeholder}\n </Footnote>\n );\n }\n if (isCreateNewOptionPreset(option)) {\n return (\n <CustomSelectOption\n key=\"create-new-option\"\n id={dropdownItemId}\n hovered={focusedOptionIndex === index}\n onMouseDown={() => addOptionFromInput(inputValue)}\n onMouseEnter={() => setFocusedOptionIndex(index)}\n >\n {option.actionText}\n </CustomSelectOption>\n );\n }\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOption(\n {\n id: dropdownItemId,\n disabled: option.disabled,\n hovered: focusedOption\n ? getOptionValue(option) === getOptionValue(focusedOption)\n : false,\n children: option.label,\n selected: !!value.find(\n (selectedOption: Option) =>\n getOptionValue(selectedOption) === getOptionValue(option),\n ),\n getRootRef(node) {\n if (node) {\n chipsSelectOptions[index] = node;\n }\n },\n onMouseDown(event: React.MouseEvent<HTMLDivElement>) {\n if (option.disabled) {\n return;\n }\n if (onChangeStart) {\n onChangeStart(event, option);\n }\n\n if (!event.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter() {\n setFocusedOptionIndex(index);\n },\n },\n option,\n )}\n </React.Fragment>\n );\n });\n\n if (renderDropdown) {\n return renderDropdown({\n defaultDropdownContent,\n });\n }\n return defaultDropdownContent;\n }, [\n addOption,\n addOptionFromInput,\n chipsSelectOptions,\n clearInput,\n closeAfterSelect,\n dropdownId,\n focusedOption,\n focusedOptionIndex,\n getOptionValue,\n inputValue,\n onChangeStart,\n options,\n renderDropdown,\n renderOption,\n setFocusedOptionIndex,\n setOpened,\n value,\n ]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (dropdownVerticalPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, dropdownVerticalPlacement],\n );\n\n const clearButtonShown = allowClearButton && (!!value.length || !!inputValue.length);\n\n return (\n <>\n <ChipsInputBase\n {...restProps}\n disabled={disabled}\n readOnly={readOnly}\n clearButtonShown={clearButtonShown}\n clearButtonTestId={clearButtonTestId}\n // FormFieldProps\n id={labelledbyId}\n getRootRef={rootRef}\n className={classNames(styles.host, openedClassNames, className)}\n status={status}\n after={\n dropdownIconProp || (\n <DropdownIcon\n opened={opened}\n onClick={onDropdownIconClick}\n className={classNames(\n styles.dropdownIcon,\n clearButtonShown && styles.dropdownIconWithOffset,\n )}\n />\n )\n }\n // option\n value={value}\n onAddChipOption={addOptionFromInput}\n onRemoveChipOption={removeOption}\n renderChip={renderChip}\n onClear={clearOptions}\n // input\n getRef={inputRef}\n inputValue={inputValue}\n onInputChange={onInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n // a11y\n role=\"combobox\"\n aria-expanded={opened}\n aria-autocomplete=\"list\"\n aria-controls={opened ? dropdownId : undefined}\n aria-activedescendant={opened ? dropdownCurrentItemId : undefined}\n aria-haspopup=\"listbox\"\n />\n {opened && (\n <CustomSelectDropdown\n data-testid={dropdownTestId}\n targetRef={rootRef}\n placement={dropdownVerticalPlacement}\n scrollBoxRef={dropdownScrollBoxRef}\n onPlacementChange={onDropdownPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n offsetDistance={dropdownOffsetDistance}\n overscrollBehavior={overscrollBehavior}\n // a11y\n id={dropdownId}\n role=\"listbox\"\n aria-labelledby={labelledbyId}\n >\n {dropdownContent}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","useExternRef","useGlobalOnClickOutside","Keys","defaultFilterFn","ChipsInputBase","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","renderChipDefault","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","DEFAULT_EMPTY_TEXT","DEFAULT_SELECTED_BEHAVIOR","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","isCreateNewOptionPreset","isEmptyOptionPreset","isNotServicePreset","renderOptionDefault","useChipsSelect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","ChipsSelect","id","labelledbyId","getRootRef","className","status","icon","dropdownIconProp","onChangeStart","optionsProp","placement","placementProp","closeAfterSelect","selectedBehavior","emptyText","creatable","fetching","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","filterFn","dropdownTestId","onClose","onOpen","overscrollBehavior","renderDropdown","getRef","value","valueProp","defaultValue","inputValue","inputValueProp","defaultInputValue","readOnly","getOptionValue","getOptionLabel","getNewOptionData","renderChip","renderOption","onChange","onFocus","onFocusProp","onInputChange","onInputChangeProp","onBlur","onBlurProp","onKeyDown","onKeyDownProp","dropdownOffsetDistance","allowClearButton","clearButtonTestId","restProps","addOptionFromInput","addOption","removeOption","clearOptions","inputRef","inputRefHook","clearInput","opened","setOpened","focusedOption","focusedOptionIndex","setFocusedOption","setFocusedOptionIndex","rootRef","dropdownVerticalPlacement","setDropdownVerticalPlacement","useState","onDropdownPlacementChange","useCallback","startsWith","dropdownId","useId","dropdownCurrentItemId","undefined","dropdownScrollBoxRef","useRef","handleFocus","event","handleBlur","defaultPrevented","preventDefault","chipsSelectOptions","current","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","beforeIndex","handleKeyDown","key","ARROW_UP","ARROW_DOWN","ENTER","foundOption","ESCAPE","TAB","useEffect","foundFocusedOptionIndex","onDropdownMouseLeave","handleClickOutside","onDropdownIconClick","e","dropdownContent","useMemo","defaultDropdownContent","map","dropdownItemId","placeholder","hovered","onMouseDown","onMouseEnter","actionText","Fragment","children","label","selected","find","selectedOption","node","openedClassNames","includes","clearButtonShown","after","onClick","onAddChipOption","onRemoveChipOption","onClear","role","aria-expanded","aria-autocomplete","aria-controls","aria-activedescendant","aria-haspopup","data-testid","targetRef","scrollBoxRef","onPlacementChange","onMouseLeave","autoWidth","forcePortal","offsetDistance","aria-labelledby"],"mappings":"AAAA;;;;;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,uBAAuB,QAAQ,yCAAsC;AAC9E,SAASC,IAAI,QAAQ,6BAA0B;AAE/C,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,cAAc,QAAQ,sCAAmC;AAClE,SACEC,uBAAuB,EACvBC,qBAAqB,EACrBC,qBAAqB,EACrBC,iBAAiB,QACZ,iCAA8B;AAErC,SACEC,oBAAoB,QAEf,kDAA+C;AACtD,SACEC,kBAAkB,QAEb,8CAA2C;AAClD,SAASC,YAAY,QAAQ,kCAA+B;AAE5D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SACEC,kBAAkB,EAClBC,yBAAyB,EACzBC,iBAAiB,EACjBC,iBAAiB,EACjBC,uBAAuB,EACvBC,mBAAmB,EACnBC,kBAAkB,EAClBC,mBAAmB,QACd,iBAAc;AAErB,SAASC,cAAc,QAAkC,sBAAmB;AAG5E,MAAMC,iBAAiB,CACrBC,UAAkC,EAAE,EACpCC,aAAa,CAAC,CAAC;IAEf,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CACtB,CAACC,QAAQC,IAAMA,IAAIJ,cAAe,CAAA,CAACL,mBAAmBQ,WAAW,CAACA,OAAOE,QAAQ,AAAD;AAEpF;AAEA,MAAMC,kBAAkB,CACtBP,UAAkC,EAAE,EACpCQ,WAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACT,mBAAmBQ,WAAW,CAACA,OAAOE,QAAQ,EAAE;YACnDG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT;AAmEA;;CAEC,GACD,OAAO,MAAMC,cAAc;QAA4B,EACrD,iBAAiB;IACjBC,IAAIC,YAAY,EAChBC,UAAU,EACVC,SAAS,EACTC,SAAS,SAAS,EAClBC,MAAMC,gBAAgB,EACtBC,aAAa,EAEb,4BAA4B;IAC5BlB,SAASmB,WAAW,EACpBC,WAAWC,gBAAgB,QAAQ,EACnCC,mBAAmB,IAAI,EACvBC,mBAAmBhC,yBAAyB,EAC5CiC,YAAYlC,kBAAkB,EAC9BmC,YAAY,KAAK,EACjBC,WAAW,KAAK,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,cAAc,KAAK,EACnBC,WAAWlD,eAAe,EAC1BmD,cAAc,EACdC,OAAO,EACPC,MAAM,EACNC,kBAAkB,EAClBC,cAAc,EAEd,kBAAkB;IAClBC,MAAM,EACNC,OAAOC,SAAS,EAChBC,YAAY,EACZC,YAAYC,cAAc,EAC1BC,iBAAiB,EACjBpC,QAAQ,EACRqC,QAAQ,EACRC,iBAAiB5D,qBAAqB,EACtC6D,iBAAiB9D,qBAAqB,EACtC+D,mBAAmBhE,uBAAuB,EAC1CiE,aAAa9D,iBAAiB,EAC9B+D,eAAenD,mBAAmB,EAClCoD,QAAQ,EACRC,SAASC,WAAW,EACpBC,eAAeC,iBAAiB,EAChCC,QAAQC,UAAU,EAClBC,WAAWC,aAAa,EACxBC,yBAAyB,CAAC,EAC1BC,gBAAgB,EAChBC,iBAAiB,EAEQ,WADtBC;QA9CHlD;QACAE;QACAC;QACAC;QACAC;QACAE;QAGAlB;QACAoB;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAGAC;QACAC;QACAE;QACAC;QACAE;QACApC;QACAqC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAE;QACAE;QACAE;QACAC;QACAC;;IAGA,MAAM,EACJ,4BAA4B;IAC5B,SAAS;IACTvB,KAAK,EACLyB,kBAAkB,EAClBC,SAAS,EACTC,YAAY,EACZC,YAAY,EACZ,QAAQ;IACRC,UAAUC,YAAY,EACtB3B,UAAU,EACV4B,UAAU,EACVhB,aAAa,EAEb,sCAAsC;IACtCpD,OAAO,EACPqE,MAAM,EACNC,SAAS,EACTC,aAAa,EACbC,kBAAkB,EAClBC,gBAAgB,EAChBC,qBAAqB,EACtB,GAAG5E,eAAe;QACjB,SAAS;QACTuC,OAAOC;QACPC;QACAU;QACAL;QACAC;QACAC;QAEA,QAAQ;QACRN,YAAYC;QACZC;QACAU,eAAeC;QAEf,WAAW;QACXrD,SAASmB;QACTK;QACAC;QACAK;QACAP;QACAS;QACAC;QAEA,QAAQ;QACR3B;IACF;IAEA,4BAA4B;IAC5B,MAAMqE,UAAUlG,aAAaoC;IAC7B,MAAMqD,WAAWzF,aAAa2D,QAAQ+B;IAEtC,sCAAsC;IACtC,MAAM,CAACS,2BAA2BC,6BAA6B,GAAGtG,MAAMuG,QAAQ,CAE9EzD;IAEF,MAAM0D,4BAA4BxG,MAAMyG,WAAW,CAAC,CAAC5D;QACnD,IAAIA,UAAU6D,UAAU,CAAC,QAAQ;YAC/BJ,6BAA6B;QAC/B,OAAO,IAAIzD,UAAU6D,UAAU,CAAC,WAAW;YACzCJ,6BAA6B;QAC/B;IACF,GAAG,EAAE;IAEL,MAAMK,aAAa3G,MAAM4G,KAAK;IAC9B,MAAMC,wBACJZ,uBAAuB,OAAO,GAAGU,WAAW,CAAC,EAAEV,oBAAoB,GAAGa;IACxE,MAAMC,uBAAuB/G,MAAMgH,MAAM,CAAiB;IAE1D,MAAMC,cAAc,CAACC;QACnB,IAAItC,aAAa;YACfA,YAAYsC;QACd;QAEA,IAAI,CAAC9C,UAAU;YACb2B,UAAU;YACVI,sBAAsB;QACxB;IACF;IAEA,MAAMgB,aAAa,CAACD;QAClB,IAAIlC,YAAY;YACdA,WAAWkC;QACb;QAEA,iEAAiE;QACjE,IAAI,CAAC9C,YAAY,CAAC8C,MAAME,gBAAgB,IAAI,CAAClE,WAAW;YACtDgE,MAAMG,cAAc;QACtB;IACF;IAEA,MAAMC,qBAAqBtH,MAAMgH,MAAM,CAAgB,EAAE,EAAEO,OAAO;IAElE,MAAMC,kBAAkB,CAACC,OAAeC,SAAS,KAAK;QACpD,MAAMC,WAAWZ,qBAAqBQ,OAAO;QAC7C,MAAMK,OAAON,kBAAkB,CAACG,MAAM;QAEtC,6EAA6E,GAC7E,IAAI,CAACG,QAAQ,CAACD,UAAU;YACtB;QACF;QAEA,MAAME,iBAAiBF,SAASG,YAAY;QAC5C,MAAMC,YAAYJ,SAASI,SAAS;QACpC,MAAMC,UAAUJ,KAAKK,SAAS;QAC9B,MAAMC,aAAaN,KAAKE,YAAY;QAEpC,6DAA6D,GAC7D,IAAIJ,QAAQ;YACVC,SAASI,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DJ,SAASI,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BJ,SAASI,SAAS,GAAGC;QACvB;IACF;IAEA,MAAMG,qBAAqB,CAACV,OAAeW;QACzC,IAAIX,UAAUW,UAAU;YACtB,6DAA6D,GAC7D;QACF;QAEA,MAAMvG,SAASJ,OAAO,CAACgG,MAAM;QAE7B,IAAIpG,mBAAmBQ,WAAWA,OAAOE,QAAQ,EAAE;YACjD;QACF;QAEAyF,gBAAgBC;QAChBtB,sBAAsBsB;IACxB;IAEA,MAAMY,cAAc,CAACC,WAA0BC;QAC7C,IAAId,QAAQa,cAAc,OAAO,CAAC,IAAIA;QAEtC,IAAIC,SAAStH,mBAAmB;YAC9B,MAAMqH,YAAY9G,eAAeC,SAASgG;YAC1CA,QAAQa,cAAc,CAAC,IAAI9G,eAAeC,WAAW6G,WAAW,kDAAkD;QACpH,OAAO,IAAIC,SAASrH,mBAAmB;YACrC,MAAMsH,cAAcxG,gBAAgBP,SAASgG;YAC7CA,QAAQe,gBAAgB,CAAC,IAAIxG,gBAAgBP,WAAW+G,aAAa,0DAA0D;QACjI;QAEAL,mBAAmBV,OAAOxB;IAC5B;IAEA,MAAMwC,gBAAgB,CAACvB;QACrB,IAAIhC,eAAe;YACjBA,cAAcgC;QAChB;QAEA,IAAIA,MAAME,gBAAgB,IAAIhD,UAAU;YACtC;QACF;QAEA,OAAQ8C,MAAMwB,GAAG;YACf,KAAKtI,KAAKuI,QAAQ;YAClB,KAAKvI,KAAKwI,UAAU;gBAClB1B,MAAMG,cAAc;gBAEpB,IAAI,CAACvB,QAAQ;oBACXC,UAAU;oBACVsC,YAAY,MAAMpH;gBACpB,OAAO;oBACLoH,YACEpC,oBACAiB,MAAMwB,GAAG,KAAKtI,KAAKuI,QAAQ,GAAGzH,oBAAoBD;gBAEtD;gBACA;YACF,KAAKb,KAAKyI,KAAK;gBAAE;oBACf,IAAI,CAAC/C,QAAQ;wBACX;oBACF;oBACA,IAAIG,sBAAsB,MAAM;wBAC9B,MAAM6C,cAAcrH,OAAO,CAACwE,mBAAmB;wBAC/C,IAAI6C,eAAezH,mBAAmByH,cAAc;4BAClD5B,MAAMG,cAAc;4BAEpB,IAAI1E,eAAe;gCACjBA,cAAcuE,OAAO4B;4BACvB;4BAEAtD,UAAUsD;4BACV3C,sBAAsB;4BACtBN;4BACA,IAAI9C,kBAAkB;gCACpBgD,UAAU;4BACZ;4BAEA;wBACF;oBACF;oBAEA,IAAI,CAAC7C,WAAW;wBACdgE,MAAMG,cAAc;oBACtB;oBACA;gBACF;YACA,KAAKjH,KAAK2I,MAAM;YAChB,KAAK3I,KAAK4I,GAAG;gBACX,IAAIlD,QAAQ;oBACVC,UAAU;gBACZ;QACJ;IACF;IAEA/F,MAAMiJ,SAAS,CAAC;QACd,IAAIhD,uBAAuB,MAAM;YAC/BC,iBAAiB;QACnB,OAAO;YACL,MAAMgD,0BAA0BzH,OAAO,CAACwE,mBAAmB;YAE3D,IAAIiD,2BAA2B7H,mBAAmB6H,0BAA0B;gBAC1EhD,iBAAiBgD;YACnB;QACF;IACF,GAAG;QAACzH;QAASwE;QAAoBC;KAAiB;IAElD,MAAMiD,uBAAuBnJ,MAAMyG,WAAW,CAAC;QAC7CN,sBAAsB;IACxB,GAAG;QAACA;KAAsB;IAE1B,MAAMiD,qBAAqBpJ,MAAMyG,WAAW,CAAC;QAC3CV,UAAU;IACZ,GAAG;QAACA;KAAU;IAEd5F,wBACEiJ,oBACAtD,SAASM,UAAU,MACnBN,SAASiB,uBAAuB;IAGlC,MAAMsC,sBAAwDrJ,MAAMyG,WAAW,CAC7E,CAAC6C;QACC,IAAIxD,QAAQ;YACVwD,EAAEjC,cAAc;YAChBtB,UAAU;QACZ;IACF,GACA;QAACD;QAAQC;KAAU;IAGrB,MAAMwD,kBAAkBvJ,MAAMwJ,OAAO,CAAC;QACpC,MAAMC,yBAAyBhI,QAAQiI,GAAG,CAAC,CAAC7H,QAAQ4F;YAClD,MAAMkC,iBAAiB,GAAGhD,WAAW,CAAC,EAAEc,OAAO;YAE/C,IAAIrG,oBAAoBS,SAAS;gBAC/B,qBACE,KAACf;oBAA0ByB,SAAS;8BACjCV,OAAO+H,WAAW;mBADP;YAIlB;YACA,IAAIzI,wBAAwBU,SAAS;gBACnC,qBACE,KAACjB;oBAECwB,IAAIuH;oBACJE,SAAS5D,uBAAuBwB;oBAChCqC,aAAa,IAAMvE,mBAAmBtB;oBACtC8F,cAAc,IAAM5D,sBAAsBsB;8BAEzC5F,OAAOmI,UAAU;mBANd;YASV;YACA,qBACE,KAAChK,MAAMiK,QAAQ;0BACZxF,aACC;oBACErC,IAAIuH;oBACJ5H,UAAUF,OAAOE,QAAQ;oBACzB8H,SAAS7D,gBACL3B,eAAexC,YAAYwC,eAAe2B,iBAC1C;oBACJkE,UAAUrI,OAAOsI,KAAK;oBACtBC,UAAU,CAAC,CAACtG,MAAMuG,IAAI,CACpB,CAACC,iBACCjG,eAAeiG,oBAAoBjG,eAAexC;oBAEtDS,YAAWiI,IAAI;wBACb,IAAIA,MAAM;4BACRjD,kBAAkB,CAACG,MAAM,GAAG8C;wBAC9B;oBACF;oBACAT,aAAY5C,KAAuC;wBACjD,IAAIrF,OAAOE,QAAQ,EAAE;4BACnB;wBACF;wBACA,IAAIY,eAAe;4BACjBA,cAAcuE,OAAOrF;wBACvB;wBAEA,IAAI,CAACqF,MAAME,gBAAgB,EAAE;4BAC3BrE,oBAAoBgD,UAAU;4BAC9BP,UAAU3D;4BACVgE;wBACF;oBACF;oBACAkE;wBACE5D,sBAAsBsB;oBACxB;gBACF,GACA5F;eApCiB,GAAG,OAAOA,OAAOiC,KAAK,CAAC,CAAC,EAAEjC,OAAOiC,KAAK,EAAE;QAwCjE;QAEA,IAAIF,gBAAgB;YAClB,OAAOA,eAAe;gBACpB6F;YACF;QACF;QACA,OAAOA;IACT,GAAG;QACDjE;QACAD;QACA+B;QACAzB;QACA9C;QACA4D;QACAX;QACAC;QACA5B;QACAJ;QACAtB;QACAlB;QACAmC;QACAa;QACA0B;QACAJ;QACAjC;KACD;IAED,MAAM0G,mBAAmBxK,MAAMwJ,OAAO,CACpC,IACE,AAAC1D,UACCX,2BAA2B,KAC1BkB,CAAAA,0BAA0BoE,QAAQ,CAAC,8DAAqC,KAC3E3D,WACF;QAAC3B;QAAwBW;QAAQO;KAA0B;IAG7D,MAAMqE,mBAAmBtF,oBAAqB,CAAA,CAAC,CAACtB,MAAMnC,MAAM,IAAI,CAAC,CAACsC,WAAWtC,MAAM,AAAD;IAElF,qBACE;;0BACE,KAACrB,wDACKgF;gBACJvD,UAAUA;gBACVqC,UAAUA;gBACVsG,kBAAkBA;gBAClBrF,mBAAmBA;gBACnB,iBAAiB;gBACjBjD,IAAIC;gBACJC,YAAY8D;gBACZ7D,WAAWtC,oCAAwBuK,kBAAkBjI;gBACrDC,QAAQA;gBACRmI,OACEjI,kCACE,KAAC7B;oBACCiF,QAAQA;oBACR8E,SAASvB;oBACT9G,WAAWtC,4CAETyK;;gBAKR,SAAS;gBACT5G,OAAOA;gBACP+G,iBAAiBtF;gBACjBuF,oBAAoBrF;gBACpBjB,YAAYA;gBACZuG,SAASrF;gBACT,QAAQ;gBACR7B,QAAQ8B;gBACR1B,YAAYA;gBACZY,eAAeA;gBACfF,SAASsC;gBACTlC,QAAQoC;gBACRlC,WAAWwD;gBACX,OAAO;gBACPuC,MAAK;gBACLC,iBAAenF;gBACfoF,qBAAkB;gBAClBC,iBAAerF,SAASa,aAAaG;gBACrCsE,yBAAuBtF,SAASe,wBAAwBC;gBACxDuE,iBAAc;;YAEfvF,wBACC,KAACnF;gBACC2K,eAAa9H;gBACb+H,WAAWnF;gBACXvD,WAAWwD;gBACXmF,cAAczE;gBACd0E,mBAAmBjF;gBACnBkF,cAAcvC;gBACdhG,UAAUA;gBACVwI,WAAWvI;gBACXwI,aAAavI;gBACbC,aAAaA;gBACbuI,gBAAgB1G;gBAChBxB,oBAAoBA;gBACpB,OAAO;gBACPvB,IAAIuE;gBACJqE,MAAK;gBACLc,mBAAiBzJ;0BAEhBkH;;;;AAKX,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type MouseEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { Keys } from '../../lib/accessibility';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn } from '../../lib/select';\nimport { ChipsInputBase } from '../ChipsInputBase/ChipsInputBase';\nimport {\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n renderChipDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipsInputBaseProps } from '../ChipsInputBase/types';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n DEFAULT_EMPTY_TEXT,\n DEFAULT_SELECTED_BEHAVIOR,\n FOCUS_ACTION_NEXT,\n FOCUS_ACTION_PREV,\n isCreateNewOptionPreset,\n isEmptyOptionPreset,\n isNotServicePreset,\n renderOptionDefault,\n} from './constants';\nimport type { FocusActionType, OptionPreset } from './types';\nimport { useChipsSelect, type UseChipsSelectProps } from './useChipsSelect';\nimport styles from './ChipsSelect.module.css';\n\nconst findIndexAfter = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n startIndex = -1,\n) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex(\n (option, i) => i > startIndex && (!isNotServicePreset(option) || !option.disabled),\n );\n};\n\nconst findIndexBefore = <O extends ChipOption>(\n options: Array<OptionPreset<O>> = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!isNotServicePreset(option) || !option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nexport interface ChipsSelectProps<O extends ChipOption>\n extends ChipsInputBaseProps<O>,\n UseChipsSelectProps<O>,\n Pick<FormFieldProps, 'status' | 'mode' | 'before'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'> {\n placement?: 'top' | 'bottom';\n /**\n * Отрисовка Spinner вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n /**\n * Принудительно использовать портал.\n */\n forceDropdownPortal?: boolean;\n /**\n * Передает атрибут `data-testid` для дропдауна.\n */\n dropdownTestId?: string;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Добавляет значение в список на событие `onBlur` (использовать вместе с `creatable`)\n */\n addOnBlur?: boolean;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n\n renderOption?: (props: CustomSelectOptionProps, option: O) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (event: React.MouseEvent | React.KeyboardEvent, option: O) => void;\n\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>({\n // FormFieldProps\n id: labelledbyId,\n getRootRef,\n className,\n status = 'default',\n icon: dropdownIconProp,\n onChangeStart,\n\n // CustomSelectDropdownProps\n options: optionsProp,\n placement: placementProp = 'bottom',\n closeAfterSelect = true,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n fetching = false,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight = false,\n filterFn = defaultFilterFn,\n dropdownTestId,\n onClose,\n onOpen,\n overscrollBehavior,\n renderDropdown,\n\n // ChipsInputProps\n getRef,\n value: valueProp,\n defaultValue,\n inputValue: inputValueProp,\n defaultInputValue,\n disabled,\n readOnly,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n getNewOptionData = getNewOptionDataDefault,\n renderChip = renderChipDefault,\n renderOption = renderOptionDefault,\n onChange,\n onFocus: onFocusProp,\n onInputChange: onInputChangeProp,\n onBlur: onBlurProp,\n onKeyDown: onKeyDownProp,\n dropdownOffsetDistance = 0,\n allowClearButton,\n clearButtonTestId,\n ...restProps\n}: ChipsSelectProps<Option>): React.ReactNode => {\n const {\n // Связано с ChipsInputProps\n // option\n value,\n addOptionFromInput,\n addOption,\n removeOption,\n clearOptions,\n // input\n inputRef: inputRefHook,\n inputValue,\n clearInput,\n onInputChange,\n\n // Связано с CustomSelectDropdownProps\n options,\n opened,\n setOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n } = useChipsSelect({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // dropdown\n options: optionsProp,\n emptyText,\n creatable,\n filterFn,\n selectedBehavior,\n onClose,\n onOpen,\n\n // other\n disabled,\n });\n\n // Связано с ChipsInputProps\n const rootRef = useExternRef(getRootRef);\n const inputRef = useExternRef(getRef, inputRefHook);\n\n // Связано с CustomSelectDropdownProps\n const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = React.useState<\n 'top' | 'bottom'\n >(placementProp);\n\n const onDropdownPlacementChange = React.useCallback((placement: Placement) => {\n if (placement.startsWith('top')) {\n setDropdownVerticalPlacement('top');\n } else if (placement.startsWith('bottom')) {\n setDropdownVerticalPlacement('bottom');\n }\n }, []);\n\n const dropdownId = React.useId();\n const dropdownCurrentItemId =\n focusedOptionIndex !== null ? `${dropdownId}-${focusedOptionIndex}` : undefined;\n const dropdownScrollBoxRef = React.useRef<HTMLDivElement>(null);\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onFocusProp) {\n onFocusProp(event);\n }\n\n if (!readOnly) {\n setOpened(true);\n setFocusedOptionIndex(null);\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlurProp) {\n onBlurProp(event);\n }\n\n // Не добавляем значение, если его нужно выбрать строго из списка\n if (!readOnly && !event.defaultPrevented && !creatable) {\n event.preventDefault();\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = dropdownScrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n /* istanbul ignore next: нет представления как воспроизвести */\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number | null) => {\n if (index === oldIndex) {\n /* istanbul ignore next: нет представления как воспроизвести */\n return;\n }\n\n const option = options[index];\n\n if (isNotServicePreset(option) && option.disabled) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = nextIndex === null ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === FOCUS_ACTION_PREV) {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDownProp) {\n onKeyDownProp(event);\n }\n\n if (event.defaultPrevented || readOnly) {\n return;\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n case Keys.ARROW_DOWN:\n event.preventDefault();\n\n if (!opened) {\n setOpened(true);\n focusOption(null, FOCUS_ACTION_NEXT);\n } else {\n focusOption(\n focusedOptionIndex,\n event.key === Keys.ARROW_UP ? FOCUS_ACTION_PREV : FOCUS_ACTION_NEXT,\n );\n }\n break;\n case Keys.ENTER: {\n if (!opened) {\n break;\n }\n if (focusedOptionIndex != null) {\n const foundOption = options[focusedOptionIndex];\n if (foundOption && isNotServicePreset(foundOption)) {\n event.preventDefault();\n\n if (onChangeStart) {\n onChangeStart(event, foundOption);\n }\n\n addOption(foundOption);\n setFocusedOptionIndex(null);\n clearInput();\n if (closeAfterSelect) {\n setOpened(false);\n }\n\n break;\n }\n }\n\n if (!creatable) {\n event.preventDefault();\n }\n break;\n }\n case Keys.ESCAPE:\n case Keys.TAB:\n if (opened) {\n setOpened(false);\n }\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex === null) {\n setFocusedOption(null);\n } else {\n const foundFocusedOptionIndex = options[focusedOptionIndex];\n\n if (foundFocusedOptionIndex && isNotServicePreset(foundFocusedOptionIndex)) {\n setFocusedOption(foundFocusedOptionIndex);\n }\n }\n }, [options, focusedOptionIndex, setFocusedOption]);\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const handleClickOutside = React.useCallback(() => {\n setOpened(false);\n }, [setOpened]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n opened ? rootRef : null,\n opened ? dropdownScrollBoxRef : null,\n );\n\n const onDropdownIconClick: MouseEventHandler<SVGSVGElement> = React.useCallback(\n (e) => {\n if (opened) {\n e.preventDefault();\n setOpened(false);\n }\n },\n [opened, setOpened],\n );\n\n const dropdownContent = React.useMemo(() => {\n const defaultDropdownContent = options.map((option, index) => {\n const dropdownItemId = `${dropdownId}-${index}`;\n\n if (isEmptyOptionPreset(option)) {\n return (\n <Footnote key=\"empty-text\" className={styles.empty}>\n {option.placeholder}\n </Footnote>\n );\n }\n if (isCreateNewOptionPreset(option)) {\n return (\n <CustomSelectOption\n key=\"create-new-option\"\n id={dropdownItemId}\n hovered={focusedOptionIndex === index}\n onMouseDown={() => addOptionFromInput(inputValue)}\n onMouseEnter={() => setFocusedOptionIndex(index)}\n >\n {option.actionText}\n </CustomSelectOption>\n );\n }\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOption(\n {\n id: dropdownItemId,\n disabled: option.disabled,\n hovered: focusedOption\n ? getOptionValue(option) === getOptionValue(focusedOption)\n : false,\n children: option.label,\n selected: !!value.find(\n (selectedOption: Option) =>\n getOptionValue(selectedOption) === getOptionValue(option),\n ),\n getRootRef(node) {\n if (node) {\n chipsSelectOptions[index] = node;\n }\n },\n onMouseDown(event: React.MouseEvent<HTMLDivElement>) {\n if (option.disabled) {\n return;\n }\n if (onChangeStart) {\n onChangeStart(event, option);\n }\n\n if (!event.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter() {\n setFocusedOptionIndex(index);\n },\n },\n option,\n )}\n </React.Fragment>\n );\n });\n\n if (renderDropdown) {\n return renderDropdown({\n defaultDropdownContent,\n });\n }\n return defaultDropdownContent;\n }, [\n addOption,\n addOptionFromInput,\n chipsSelectOptions,\n clearInput,\n closeAfterSelect,\n dropdownId,\n focusedOption,\n focusedOptionIndex,\n getOptionValue,\n inputValue,\n onChangeStart,\n options,\n renderDropdown,\n renderOption,\n setFocusedOptionIndex,\n setOpened,\n value,\n ]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (dropdownVerticalPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, dropdownVerticalPlacement],\n );\n\n const clearButtonShown = allowClearButton && (!!value.length || !!inputValue.length);\n\n return (\n <>\n <ChipsInputBase\n {...restProps}\n disabled={disabled}\n readOnly={readOnly}\n clearButtonShown={clearButtonShown}\n clearButtonTestId={clearButtonTestId}\n // FormFieldProps\n id={labelledbyId}\n getRootRef={rootRef}\n className={classNames(styles.host, openedClassNames, className)}\n status={status}\n after={\n dropdownIconProp || (\n <DropdownIcon\n opened={opened}\n onClick={onDropdownIconClick}\n className={classNames(\n styles.dropdownIcon,\n clearButtonShown && styles.dropdownIconWithOffset,\n )}\n />\n )\n }\n // option\n value={value}\n onAddChipOption={addOptionFromInput}\n onRemoveChipOption={removeOption}\n renderChip={renderChip}\n onClear={clearOptions}\n // input\n getRef={inputRef}\n inputValue={inputValue}\n onInputChange={onInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n // a11y\n role=\"combobox\"\n aria-expanded={opened}\n aria-autocomplete=\"list\"\n aria-controls={opened ? dropdownId : undefined}\n aria-activedescendant={opened ? dropdownCurrentItemId : undefined}\n aria-haspopup=\"listbox\"\n />\n {opened && (\n <CustomSelectDropdown\n data-testid={dropdownTestId}\n targetRef={rootRef}\n placement={dropdownVerticalPlacement}\n scrollBoxRef={dropdownScrollBoxRef}\n onPlacementChange={onDropdownPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n offsetDistance={dropdownOffsetDistance}\n overscrollBehavior={overscrollBehavior}\n // a11y\n id={dropdownId}\n role=\"listbox\"\n aria-labelledby={labelledbyId}\n >\n {dropdownContent}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"names":["React","classNames","useExternRef","useGlobalOnClickOutside","Keys","defaultFilterFn","ChipsInputBase","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","renderChipDefault","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","DEFAULT_EMPTY_TEXT","DEFAULT_SELECTED_BEHAVIOR","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","isCreateNewOptionPreset","isEmptyOptionPreset","isNotServicePreset","renderOptionDefault","useChipsSelect","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","ChipsSelect","id","labelledbyId","getRootRef","className","status","icon","dropdownIconProp","onChangeStart","optionsProp","placement","placementProp","closeAfterSelect","selectedBehavior","emptyText","creatable","fetching","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","filterFn","dropdownTestId","onClose","onOpen","overscrollBehavior","renderDropdown","getRef","value","valueProp","defaultValue","inputValue","inputValueProp","defaultInputValue","readOnly","getOptionValue","getOptionLabel","getNewOptionData","renderChip","renderOption","onChange","onFocus","onFocusProp","onInputChange","onInputChangeProp","onBlur","onBlurProp","onKeyDown","onKeyDownProp","dropdownOffsetDistance","allowClearButton","clearButtonTestId","restProps","addOptionFromInput","addOption","removeOption","clearOptions","inputRef","inputRefHook","clearInput","opened","setOpened","focusedOption","focusedOptionIndex","setFocusedOption","setFocusedOptionIndex","rootRef","dropdownVerticalPlacement","setDropdownVerticalPlacement","useState","onDropdownPlacementChange","useCallback","startsWith","dropdownId","useId","dropdownCurrentItemId","undefined","dropdownScrollBoxRef","useRef","handleFocus","event","handleBlur","defaultPrevented","preventDefault","chipsSelectOptions","current","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","beforeIndex","handleKeyDown","key","ARROW_UP","ARROW_DOWN","ENTER","foundOption","ESCAPE","TAB","useEffect","foundFocusedOptionIndex","onDropdownMouseLeave","handleClickOutside","onDropdownIconClick","e","dropdownContent","useMemo","defaultDropdownContent","map","dropdownItemId","placeholder","hovered","onMouseDown","onMouseEnter","actionText","Fragment","children","label","selected","find","selectedOption","node","openedClassNames","includes","clearButtonShown","after","onClick","onAddChipOption","onRemoveChipOption","onClear","role","aria-expanded","aria-autocomplete","aria-controls","aria-activedescendant","aria-haspopup","data-testid","targetRef","scrollBoxRef","onPlacementChange","onMouseLeave","autoWidth","forcePortal","offsetDistance","aria-labelledby"],"mappings":"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"}
@@ -50,7 +50,7 @@ export declare const useChipsSelect: <O extends ChipOption>({ disabled, value: v
50
50
  addOptionFromInput: (inputValue: string) => void;
51
51
  removeOption: (newValue: ChipOptionValue | O) => void;
52
52
  clearOptions: () => void;
53
- inputRef: React.RefObject<HTMLInputElement & SimulateReactInputTargetState>;
53
+ inputRef: React.RefObject<(HTMLInputElement & SimulateReactInputTargetState) | null>;
54
54
  clearInput: () => void;
55
55
  };
56
56
  //# sourceMappingURL=useChipsSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useChipsSelect.d.ts","sourceRoot":"","sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CACpE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,uRAyBhD,mBAAmB,CAAC,CAAC,CAAC,KAAG;IAE1B,KAAK,EAAE,KAAK,CACV,CAAC,GAAG;QACF,KAAK,EAAE,eAAe,CAAC;QACvB,KAAK,EAAE,eAAe,CAAC;KACxB,CACF,CAAC;IAEF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAEpE,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,YAAY,EAAE,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,6BAA6B,CAAC,CAAC;IAC5E,UAAU,EAAE,MAAM,IAAI,CAAC;CAsHxB,CAAC"}
1
+ {"version":3,"file":"useChipsSelect.d.ts","sourceRoot":"","sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CACpE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACxC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,uRAyBhD,mBAAmB,CAAC,CAAC,CAAC,KAAG;IAE1B,KAAK,EAAE,KAAK,CACV,CAAC,GAAG;QACF,KAAK,EAAE,eAAe,CAAC;QACvB,KAAK,EAAE,eAAe,CAAC;KACxB,CACF,CAAC;IAEF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAEpE,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACjE,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3E,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,YAAY,EAAE,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,gBAAgB,GAAG,6BAA6B,CAAC,GAAG,IAAI,CAAC,CAAC;IACrF,UAAU,EAAE,MAAM,IAAI,CAAC;CAsHxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"sourcesContent":["import * as React from 'react';\nimport { isEqual } from '@vkontakte/vkjs';\nimport { type SimulateReactInputTargetState } from '../../lib/react';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport {\n transformValue,\n useChipsInput,\n type UseChipsInputProps,\n} from '../ChipsInput/useChipsInput';\nimport {\n DEFAULT_INPUT_VALUE,\n DEFAULT_VALUE,\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipOptionLabel, ChipOptionValue } from '../ChipsInputBase/types';\nimport { DEFAULT_EMPTY_TEXT, DEFAULT_SELECTED_BEHAVIOR, isNotServicePreset } from './constants';\nimport type { OptionPreset } from './types';\n\nexport interface UseChipsSelectProps<O extends ChipOption = ChipOption>\n extends UseChipsInputProps<O> {\n options?: O[];\n /**\n * Возможность создавать чипы которых нет в списке:\n * - `true` – добавление по кнопке Enter;\n * - `<текст>` – помимо возможности добавления через Enter, в пункте меню появится кнопка с текстом.\n * Текст для пункта, создающего чипы при клике, также отвечает за то, будет ли показан этот пункт\n * (показывается после того как в списке не останется опций).\n */\n creatable?: boolean | string;\n /**\n * Текст, который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Показывать или скрывать уже выбранные опции.\n */\n selectedBehavior?: 'hide' | 'highlight';\n filterFn?: false | FilterFn<O>;\n /**\n * Будет вызвано в момент скрытия выпадающего списка\n */\n onClose?: VoidFunction;\n /**\n * Будет вызвано в момент открытия выпадающего списка\n */\n onOpen?: VoidFunction;\n}\n\nexport const useChipsSelect = <O extends ChipOption>({\n // common\n disabled,\n\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionLabel = getOptionLabelDefault,\n getOptionValue = getOptionValueDefault,\n getNewOptionData = getNewOptionDataDefault,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue = DEFAULT_INPUT_VALUE,\n onInputChange: onInputChangeProp,\n\n // dropdown\n creatable = false,\n emptyText = DEFAULT_EMPTY_TEXT,\n filterFn = defaultFilterFn,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n options: optionsProp = DEFAULT_VALUE,\n onClose,\n onOpen,\n}: UseChipsSelectProps<O>): {\n // options\n value: Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n >;\n // input\n inputValue: string;\n onInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n // dropdown states\n options: Array<OptionPreset<O>>;\n opened: boolean;\n setOpened: (isOpened: boolean) => void;\n focusedOption: O | null;\n focusedOptionIndex: number | null;\n setFocusedOption: React.Dispatch<React.SetStateAction<O | null>>;\n setFocusedOptionIndex: React.Dispatch<React.SetStateAction<number | null>>;\n addOption: (newValue: string | O) => void;\n addOptionFromInput: (inputValue: string) => void;\n removeOption: (newValue: ChipOptionValue | O) => void;\n clearOptions: () => void;\n inputRef: React.RefObject<HTMLInputElement & SimulateReactInputTargetState>;\n clearInput: () => void;\n} => {\n const { value, inputValue, onInputChange, ...restChipsInputProps } = useChipsInput({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // other\n disabled,\n });\n\n // dropdown\n const [opened, setOpened] = React.useState(false);\n const [options, setOptions] = React.useState<Array<OptionPreset<O>>>(() =>\n opened\n ? transformOptions({\n value,\n getOptionValue,\n getOptionLabel,\n inputValue,\n emptyText,\n creatable,\n filterFn,\n options: optionsProp,\n selectedBehavior,\n })\n : [],\n );\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | null>(0);\n const [focusedOption, setFocusedOption] = React.useState<O | null>(null);\n\n const handleOpened = React.useCallback(\n (isOpened: boolean) => {\n isOpened ? onOpen?.() : onClose?.();\n setOpened(isOpened);\n },\n [onOpen, onClose],\n );\n\n const handleInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onInputChange(event);\n\n if (!opened) {\n handleOpened(true);\n setFocusedOptionIndex(0);\n }\n },\n [onInputChange, opened, handleOpened],\n );\n\n useIsomorphicLayoutEffect(\n function handleDropdownOpen() {\n if (!opened) {\n return;\n }\n\n setOptions((prevOptions) => {\n const nextOptions = transformOptions({\n value,\n getOptionValue,\n getOptionLabel,\n inputValue,\n emptyText,\n creatable,\n filterFn,\n options: optionsProp,\n selectedBehavior,\n });\n\n if (isEqual(prevOptions, nextOptions)) {\n return prevOptions;\n }\n\n return nextOptions;\n });\n },\n [\n opened,\n value,\n getOptionLabel,\n getOptionValue,\n inputValue,\n optionsProp,\n creatable,\n selectedBehavior,\n filterFn,\n ],\n );\n\n return {\n ...restChipsInputProps,\n\n // options\n value,\n\n // input\n inputValue,\n onInputChange: handleInputChange,\n\n // dropdown states\n options,\n opened,\n setOpened: handleOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n };\n};\n\nfunction transformOptions<O extends ChipOption>({\n value,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n inputValue = DEFAULT_INPUT_VALUE,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n filterFn = defaultFilterFn,\n options: optionsProp = DEFAULT_VALUE,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n}: Required<Pick<UseChipsSelectProps<O>, 'value'>> &\n Pick<\n UseChipsSelectProps<O>,\n | 'getOptionValue'\n | 'getOptionLabel'\n | 'inputValue'\n | 'emptyText'\n | 'creatable'\n | 'filterFn'\n | 'options'\n | 'selectedBehavior'\n >) {\n const filteredOptionsProp = filterFn\n ? optionsProp.filter((option) => filterFn(inputValue, option, getOptionLabel))\n : optionsProp;\n\n if (filteredOptionsProp.length === 0) {\n if (inputValue !== DEFAULT_INPUT_VALUE && typeof creatable === 'string') {\n return [{ actionText: creatable }];\n }\n return [{ placeholder: emptyText }];\n }\n\n const parsedOptions = transformValue(filteredOptionsProp, getOptionValue, getOptionLabel);\n\n if (selectedBehavior === 'hide') {\n const selected = value.map((item) => item.value);\n return parsedOptions.filter((item) =>\n isNotServicePreset(item) ? !selected.includes(item.value) : false,\n );\n }\n return parsedOptions;\n}\n"],"names":["React","isEqual","defaultFilterFn","useIsomorphicLayoutEffect","transformValue","useChipsInput","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","DEFAULT_EMPTY_TEXT","DEFAULT_SELECTED_BEHAVIOR","isNotServicePreset","useChipsSelect","disabled","value","valueProp","defaultValue","onChange","getOptionLabel","getOptionValue","getNewOptionData","inputValue","inputValueProp","defaultInputValue","onInputChange","onInputChangeProp","creatable","emptyText","filterFn","selectedBehavior","options","optionsProp","onClose","onOpen","restChipsInputProps","opened","setOpened","useState","setOptions","transformOptions","focusedOptionIndex","setFocusedOptionIndex","focusedOption","setFocusedOption","handleOpened","useCallback","isOpened","handleInputChange","event","handleDropdownOpen","prevOptions","nextOptions","filteredOptionsProp","filter","option","length","actionText","placeholder","parsedOptions","selected","map","item","includes"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ChipsSelect/useChipsSelect.ts"],"sourcesContent":["import * as React from 'react';\nimport { isEqual } from '@vkontakte/vkjs';\nimport { type SimulateReactInputTargetState } from '../../lib/react';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport {\n transformValue,\n useChipsInput,\n type UseChipsInputProps,\n} from '../ChipsInput/useChipsInput';\nimport {\n DEFAULT_INPUT_VALUE,\n DEFAULT_VALUE,\n getNewOptionDataDefault,\n getOptionLabelDefault,\n getOptionValueDefault,\n} from '../ChipsInputBase/constants';\nimport type { ChipOption, ChipOptionLabel, ChipOptionValue } from '../ChipsInputBase/types';\nimport { DEFAULT_EMPTY_TEXT, DEFAULT_SELECTED_BEHAVIOR, isNotServicePreset } from './constants';\nimport type { OptionPreset } from './types';\n\nexport interface UseChipsSelectProps<O extends ChipOption = ChipOption>\n extends UseChipsInputProps<O> {\n options?: O[];\n /**\n * Возможность создавать чипы которых нет в списке:\n * - `true` – добавление по кнопке Enter;\n * - `<текст>` – помимо возможности добавления через Enter, в пункте меню появится кнопка с текстом.\n * Текст для пункта, создающего чипы при клике, также отвечает за то, будет ли показан этот пункт\n * (показывается после того как в списке не останется опций).\n */\n creatable?: boolean | string;\n /**\n * Текст, который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Показывать или скрывать уже выбранные опции.\n */\n selectedBehavior?: 'hide' | 'highlight';\n filterFn?: false | FilterFn<O>;\n /**\n * Будет вызвано в момент скрытия выпадающего списка\n */\n onClose?: VoidFunction;\n /**\n * Будет вызвано в момент открытия выпадающего списка\n */\n onOpen?: VoidFunction;\n}\n\nexport const useChipsSelect = <O extends ChipOption>({\n // common\n disabled,\n\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionLabel = getOptionLabelDefault,\n getOptionValue = getOptionValueDefault,\n getNewOptionData = getNewOptionDataDefault,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue = DEFAULT_INPUT_VALUE,\n onInputChange: onInputChangeProp,\n\n // dropdown\n creatable = false,\n emptyText = DEFAULT_EMPTY_TEXT,\n filterFn = defaultFilterFn,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n options: optionsProp = DEFAULT_VALUE,\n onClose,\n onOpen,\n}: UseChipsSelectProps<O>): {\n // options\n value: Array<\n O & {\n label: ChipOptionLabel;\n value: ChipOptionValue;\n }\n >;\n // input\n inputValue: string;\n onInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n // dropdown states\n options: Array<OptionPreset<O>>;\n opened: boolean;\n setOpened: (isOpened: boolean) => void;\n focusedOption: O | null;\n focusedOptionIndex: number | null;\n setFocusedOption: React.Dispatch<React.SetStateAction<O | null>>;\n setFocusedOptionIndex: React.Dispatch<React.SetStateAction<number | null>>;\n addOption: (newValue: string | O) => void;\n addOptionFromInput: (inputValue: string) => void;\n removeOption: (newValue: ChipOptionValue | O) => void;\n clearOptions: () => void;\n inputRef: React.RefObject<(HTMLInputElement & SimulateReactInputTargetState) | null>;\n clearInput: () => void;\n} => {\n const { value, inputValue, onInputChange, ...restChipsInputProps } = useChipsInput({\n // option\n value: valueProp,\n defaultValue,\n onChange,\n getOptionValue,\n getOptionLabel,\n getNewOptionData,\n\n // input\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange: onInputChangeProp,\n\n // other\n disabled,\n });\n\n // dropdown\n const [opened, setOpened] = React.useState(false);\n const [options, setOptions] = React.useState<Array<OptionPreset<O>>>(() =>\n opened\n ? transformOptions({\n value,\n getOptionValue,\n getOptionLabel,\n inputValue,\n emptyText,\n creatable,\n filterFn,\n options: optionsProp,\n selectedBehavior,\n })\n : [],\n );\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | null>(0);\n const [focusedOption, setFocusedOption] = React.useState<O | null>(null);\n\n const handleOpened = React.useCallback(\n (isOpened: boolean) => {\n isOpened ? onOpen?.() : onClose?.();\n setOpened(isOpened);\n },\n [onOpen, onClose],\n );\n\n const handleInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onInputChange(event);\n\n if (!opened) {\n handleOpened(true);\n setFocusedOptionIndex(0);\n }\n },\n [onInputChange, opened, handleOpened],\n );\n\n useIsomorphicLayoutEffect(\n function handleDropdownOpen() {\n if (!opened) {\n return;\n }\n\n setOptions((prevOptions) => {\n const nextOptions = transformOptions({\n value,\n getOptionValue,\n getOptionLabel,\n inputValue,\n emptyText,\n creatable,\n filterFn,\n options: optionsProp,\n selectedBehavior,\n });\n\n if (isEqual(prevOptions, nextOptions)) {\n return prevOptions;\n }\n\n return nextOptions;\n });\n },\n [\n opened,\n value,\n getOptionLabel,\n getOptionValue,\n inputValue,\n optionsProp,\n creatable,\n selectedBehavior,\n filterFn,\n ],\n );\n\n return {\n ...restChipsInputProps,\n\n // options\n value,\n\n // input\n inputValue,\n onInputChange: handleInputChange,\n\n // dropdown states\n options,\n opened,\n setOpened: handleOpened,\n focusedOption,\n focusedOptionIndex,\n setFocusedOption,\n setFocusedOptionIndex,\n };\n};\n\nfunction transformOptions<O extends ChipOption>({\n value,\n getOptionValue = getOptionValueDefault,\n getOptionLabel = getOptionLabelDefault,\n inputValue = DEFAULT_INPUT_VALUE,\n emptyText = DEFAULT_EMPTY_TEXT,\n creatable = false,\n filterFn = defaultFilterFn,\n options: optionsProp = DEFAULT_VALUE,\n selectedBehavior = DEFAULT_SELECTED_BEHAVIOR,\n}: Required<Pick<UseChipsSelectProps<O>, 'value'>> &\n Pick<\n UseChipsSelectProps<O>,\n | 'getOptionValue'\n | 'getOptionLabel'\n | 'inputValue'\n | 'emptyText'\n | 'creatable'\n | 'filterFn'\n | 'options'\n | 'selectedBehavior'\n >) {\n const filteredOptionsProp = filterFn\n ? optionsProp.filter((option) => filterFn(inputValue, option, getOptionLabel))\n : optionsProp;\n\n if (filteredOptionsProp.length === 0) {\n if (inputValue !== DEFAULT_INPUT_VALUE && typeof creatable === 'string') {\n return [{ actionText: creatable }];\n }\n return [{ placeholder: emptyText }];\n }\n\n const parsedOptions = transformValue(filteredOptionsProp, getOptionValue, getOptionLabel);\n\n if (selectedBehavior === 'hide') {\n const selected = value.map((item) => item.value);\n return parsedOptions.filter((item) =>\n isNotServicePreset(item) ? !selected.includes(item.value) : false,\n );\n }\n return parsedOptions;\n}\n"],"names":["React","isEqual","defaultFilterFn","useIsomorphicLayoutEffect","transformValue","useChipsInput","DEFAULT_INPUT_VALUE","DEFAULT_VALUE","getNewOptionDataDefault","getOptionLabelDefault","getOptionValueDefault","DEFAULT_EMPTY_TEXT","DEFAULT_SELECTED_BEHAVIOR","isNotServicePreset","useChipsSelect","disabled","value","valueProp","defaultValue","onChange","getOptionLabel","getOptionValue","getNewOptionData","inputValue","inputValueProp","defaultInputValue","onInputChange","onInputChangeProp","creatable","emptyText","filterFn","selectedBehavior","options","optionsProp","onClose","onOpen","restChipsInputProps","opened","setOpened","useState","setOptions","transformOptions","focusedOptionIndex","setFocusedOptionIndex","focusedOption","setFocusedOption","handleOpened","useCallback","isOpened","handleInputChange","event","handleDropdownOpen","prevOptions","nextOptions","filteredOptionsProp","filter","option","length","actionText","placeholder","parsedOptions","selected","map","item","includes"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,OAAO,QAAQ,kBAAkB;AAE1C,SAASC,eAAe,QAAuB,sBAAmB;AAClE,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SACEC,cAAc,EACdC,aAAa,QAER,iCAA8B;AACrC,SACEC,mBAAmB,EACnBC,aAAa,EACbC,uBAAuB,EACvBC,qBAAqB,EACrBC,qBAAqB,QAChB,iCAA8B;AAErC,SAASC,kBAAkB,EAAEC,yBAAyB,EAAEC,kBAAkB,QAAQ,iBAAc;AAiChG,OAAO,MAAMC,iBAAiB,CAAuB,EACnD,SAAS;AACTC,QAAQ,EAER,SAAS;AACTC,OAAOC,SAAS,EAChBC,YAAY,EACZC,QAAQ,EACRC,iBAAiBX,qBAAqB,EACtCY,iBAAiBX,qBAAqB,EACtCY,mBAAmBd,uBAAuB,EAE1C,QAAQ;AACRe,YAAYC,cAAc,EAC1BC,oBAAoBnB,mBAAmB,EACvCoB,eAAeC,iBAAiB,EAEhC,WAAW;AACXC,YAAY,KAAK,EACjBC,YAAYlB,kBAAkB,EAC9BmB,WAAW5B,eAAe,EAC1B6B,mBAAmBnB,yBAAyB,EAC5CoB,SAASC,cAAc1B,aAAa,EACpC2B,OAAO,EACPC,MAAM,EACiB;IA0BvB,MAAqE9B,iBAAAA,cAAc;QACjF,SAAS;QACTW,OAAOC;QACPC;QACAC;QACAE;QACAD;QACAE;QAEA,QAAQ;QACRC,YAAYC;QACZC;QACAC,eAAeC;QAEf,QAAQ;QACRZ;IACF,IAhBM,EAAEC,KAAK,EAAEO,UAAU,EAAEG,aAAa,EAA0B,GAAGrB,gBAAxB+B,iDAAwB/B;QAA7DW;QAAOO;QAAYG;;IAkB3B,WAAW;IACX,MAAM,CAACW,QAAQC,UAAU,GAAGtC,MAAMuC,QAAQ,CAAC;IAC3C,MAAM,CAACP,SAASQ,WAAW,GAAGxC,MAAMuC,QAAQ,CAAyB,IACnEF,SACII,iBAAiB;YACfzB;YACAK;YACAD;YACAG;YACAM;YACAD;YACAE;YACAE,SAASC;YACTF;QACF,KACA,EAAE;IAER,MAAM,CAACW,oBAAoBC,sBAAsB,GAAG3C,MAAMuC,QAAQ,CAAgB;IAClF,MAAM,CAACK,eAAeC,iBAAiB,GAAG7C,MAAMuC,QAAQ,CAAW;IAEnE,MAAMO,eAAe9C,MAAM+C,WAAW,CACpC,CAACC;QACCA,WAAWb,mBAAAA,6BAAAA,WAAaD,oBAAAA,8BAAAA;QACxBI,UAAUU;IACZ,GACA;QAACb;QAAQD;KAAQ;IAGnB,MAAMe,oBAAoBjD,MAAM+C,WAAW,CACzC,CAACG;QACCxB,cAAcwB;QAEd,IAAI,CAACb,QAAQ;YACXS,aAAa;YACbH,sBAAsB;QACxB;IACF,GACA;QAACjB;QAAeW;QAAQS;KAAa;IAGvC3C,0BACE,SAASgD;QACP,IAAI,CAACd,QAAQ;YACX;QACF;QAEAG,WAAW,CAACY;YACV,MAAMC,cAAcZ,iBAAiB;gBACnCzB;gBACAK;gBACAD;gBACAG;gBACAM;gBACAD;gBACAE;gBACAE,SAASC;gBACTF;YACF;YAEA,IAAI9B,QAAQmD,aAAaC,cAAc;gBACrC,OAAOD;YACT;YAEA,OAAOC;QACT;IACF,GACA;QACEhB;QACArB;QACAI;QACAC;QACAE;QACAU;QACAL;QACAG;QACAD;KACD;IAGH,OAAO,wCACFM;QAEH,UAAU;QACVpB;QAEA,QAAQ;QACRO;QACAG,eAAeuB;QAEf,kBAAkB;QAClBjB;QACAK;QACAC,WAAWQ;QACXF;QACAF;QACAG;QACAF;;AAEJ,EAAE;AAEF,SAASF,iBAAuC,EAC9CzB,KAAK,EACLK,iBAAiBX,qBAAqB,EACtCU,iBAAiBX,qBAAqB,EACtCc,aAAajB,mBAAmB,EAChCuB,YAAYlB,kBAAkB,EAC9BiB,YAAY,KAAK,EACjBE,WAAW5B,eAAe,EAC1B8B,SAASC,cAAc1B,aAAa,EACpCwB,mBAAmBnB,yBAAyB,EAY3C;IACD,MAAM0C,sBAAsBxB,WACxBG,YAAYsB,MAAM,CAAC,CAACC,SAAW1B,SAASP,YAAYiC,QAAQpC,mBAC5Da;IAEJ,IAAIqB,oBAAoBG,MAAM,KAAK,GAAG;QACpC,IAAIlC,eAAejB,uBAAuB,OAAOsB,cAAc,UAAU;YACvE,OAAO;gBAAC;oBAAE8B,YAAY9B;gBAAU;aAAE;QACpC;QACA,OAAO;YAAC;gBAAE+B,aAAa9B;YAAU;SAAE;IACrC;IAEA,MAAM+B,gBAAgBxD,eAAekD,qBAAqBjC,gBAAgBD;IAE1E,IAAIW,qBAAqB,QAAQ;QAC/B,MAAM8B,WAAW7C,MAAM8C,GAAG,CAAC,CAACC,OAASA,KAAK/C,KAAK;QAC/C,OAAO4C,cAAcL,MAAM,CAAC,CAACQ,OAC3BlD,mBAAmBkD,QAAQ,CAACF,SAASG,QAAQ,CAACD,KAAK/C,KAAK,IAAI;IAEhE;IACA,OAAO4C;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять hovered-состоянием извне\n */\n hovered?: boolean;\n /**\n * Позволяет управлять activated-состоянием извне\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь hovered-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `activated`-состояния\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки active-состояния\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки hover-состояния\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний\n */\n lockState: boolean;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события\n */\nfunction useHover({ hovered, hasHover = true, lockState, setParentStateLock }: UseHoverProps) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний\n */\n lockStateRef: React.MutableRefObject<boolean>;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockStateRef,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUp = React.useMemo(() => new Set<number>(), []);\n\n const onPointerDown = () => {\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовится отложенно\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUp.has(e.pointerId)) {\n pointersUp.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUp.add(e.pointerId);\n\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockStateRef.current,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\nfunction useLockRef(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [React.MutableRefObject<boolean>, (v: boolean) => void, (...args: any[]) => void] {\n const lockStateRef = React.useRef(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n lockStateRef.current = isLock;\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockStateRef, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveStateRef, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockRef(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockStateRef: lockActiveStateRef,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","current","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","lockStateRef","activatedState","setActivated","pointersUp","useMemo","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","useLockRef","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveStateRef","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять hovered-состоянием извне\n */\n hovered?: boolean;\n /**\n * Позволяет управлять activated-состоянием извне\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь hovered-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `activated`-состояния\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки active-состояния\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки hover-состояния\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний\n */\n lockState: boolean;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события\n */\nfunction useHover({ hovered, hasHover = true, lockState, setParentStateLock }: UseHoverProps) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний\n */\n lockStateRef: React.RefObject<boolean>;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockStateRef,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUp = React.useMemo(() => new Set<number>(), []);\n\n const onPointerDown = () => {\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовится отложенно\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUp.has(e.pointerId)) {\n pointersUp.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUp.add(e.pointerId);\n\n if (lockStateRef.current) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockStateRef.current,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\nfunction useLockRef(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [React.RefObject<boolean>, (v: boolean) => void, (...args: any[]) => void] {\n const lockStateRef = React.useRef(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n lockStateRef.current = isLock;\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockStateRef, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveStateRef, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockRef(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockStateRef: lockActiveStateRef,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","current","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","lockStateRef","activatedState","setActivated","pointersUp","useMemo","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","useLockRef","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveStateRef","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"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"}
@@ -33,7 +33,7 @@ import { isFunction, noop } from "@vkontakte/vkjs";
33
33
  * ```
34
34
  */ export function useStateWithDelay(initialState, defaultDelay = 0, onStateChange = noop) {
35
35
  const [value, setValue] = React.useState(initialState);
36
- const timeout = React.useRef();
36
+ const timeout = React.useRef(undefined);
37
37
  const handleSetValue = React.useCallback((nextValue)=>{
38
38
  if (isFunction(nextValue)) {
39
39
  setValue((prevValue)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Clickable/useStateWithDelay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\n\ntype DispatchWithDelay<S> = (value: S, delay?: number) => void;\n\n/**\n * Возвращает значение с состоянием и функции на обновление состояния\n * без и с задержкой.\n *\n * # Пример\n *\n * ```ts\n * const [count, setCount] = useStateWithDelay(initialState);\n *\n * const click = () => {\n * setCount(count + 1, 500)\n * }\n * ```\n *\n * Есть возможность передать функцию-коллбэк, которая будет\n * вызвана сразу после вызова setState с новым значением стейта\n * в качестве аргумента.\n *\n * ```ts\n * const onCountChange = React.useCallback((count) => {\n * // обработчик нового значения count\n * // будет вызван через 500мс\n * }, []);\n *\n *\n * const [count, setCount] = useStateWithDelay(initialState, 0, onCountChange);\n *\n * const click = () => {\n * setCount(count + 1, 500)\n * }\n * ```\n */\nexport function useStateWithDelay<S>(\n initialState: S | (() => S),\n defaultDelay = 0,\n onStateChange: (v: S) => void = noop,\n): [S, DispatchWithDelay<React.SetStateAction<S>>] {\n const [value, setValue] = React.useState(initialState);\n const timeout = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleSetValue = React.useCallback(\n (nextValue: React.SetStateAction<S>) => {\n if (isFunction(nextValue)) {\n setValue((prevValue) => {\n const value = nextValue(prevValue);\n onStateChange(value);\n\n return value;\n });\n } else {\n setValue(nextValue);\n onStateChange(nextValue);\n }\n },\n [onStateChange],\n );\n\n const setValueWithDelay = React.useCallback(\n (newValue: React.SetStateAction<S>, delay: number = defaultDelay) => {\n clearTimeout(timeout.current);\n if (delay === 0) {\n handleSetValue(newValue);\n return;\n }\n\n timeout.current = setTimeout(() => handleSetValue(newValue), delay);\n },\n [defaultDelay, handleSetValue],\n );\n\n return [value, setValueWithDelay];\n}\n"],"names":["React","isFunction","noop","useStateWithDelay","initialState","defaultDelay","onStateChange","value","setValue","useState","timeout","useRef","handleSetValue","useCallback","nextValue","prevValue","setValueWithDelay","newValue","delay","clearTimeout","current","setTimeout"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BC,GACD,OAAO,SAASC,kBACdC,YAA2B,EAC3BC,eAAe,CAAC,EAChBC,gBAAgCJ,IAAI;IAEpC,MAAM,CAACK,OAAOC,SAAS,GAAGR,MAAMS,QAAQ,CAACL;IACzC,MAAMM,UAAUV,MAAMW,MAAM;IAE5B,MAAMC,iBAAiBZ,MAAMa,WAAW,CACtC,CAACC;QACC,IAAIb,WAAWa,YAAY;YACzBN,SAAS,CAACO;gBACR,MAAMR,QAAQO,UAAUC;gBACxBT,cAAcC;gBAEd,OAAOA;YACT;QACF,OAAO;YACLC,SAASM;YACTR,cAAcQ;QAChB;IACF,GACA;QAACR;KAAc;IAGjB,MAAMU,oBAAoBhB,MAAMa,WAAW,CACzC,CAACI,UAAmCC,QAAgBb,YAAY;QAC9Dc,aAAaT,QAAQU,OAAO;QAC5B,IAAIF,UAAU,GAAG;YACfN,eAAeK;YACf;QACF;QAEAP,QAAQU,OAAO,GAAGC,WAAW,IAAMT,eAAeK,WAAWC;IAC/D,GACA;QAACb;QAAcO;KAAe;IAGhC,OAAO;QAACL;QAAOS;KAAkB;AACnC"}
1
+ {"version":3,"sources":["../../../src/components/Clickable/useStateWithDelay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { isFunction, noop } from '@vkontakte/vkjs';\n\ntype DispatchWithDelay<S> = (value: S, delay?: number) => void;\n\n/**\n * Возвращает значение с состоянием и функции на обновление состояния\n * без и с задержкой.\n *\n * # Пример\n *\n * ```ts\n * const [count, setCount] = useStateWithDelay(initialState);\n *\n * const click = () => {\n * setCount(count + 1, 500)\n * }\n * ```\n *\n * Есть возможность передать функцию-коллбэк, которая будет\n * вызвана сразу после вызова setState с новым значением стейта\n * в качестве аргумента.\n *\n * ```ts\n * const onCountChange = React.useCallback((count) => {\n * // обработчик нового значения count\n * // будет вызван через 500мс\n * }, []);\n *\n *\n * const [count, setCount] = useStateWithDelay(initialState, 0, onCountChange);\n *\n * const click = () => {\n * setCount(count + 1, 500)\n * }\n * ```\n */\nexport function useStateWithDelay<S>(\n initialState: S | (() => S),\n defaultDelay = 0,\n onStateChange: (v: S) => void = noop,\n): [S, DispatchWithDelay<React.SetStateAction<S>>] {\n const [value, setValue] = React.useState(initialState);\n const timeout = React.useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const handleSetValue = React.useCallback(\n (nextValue: React.SetStateAction<S>) => {\n if (isFunction(nextValue)) {\n setValue((prevValue) => {\n const value = nextValue(prevValue);\n onStateChange(value);\n\n return value;\n });\n } else {\n setValue(nextValue);\n onStateChange(nextValue);\n }\n },\n [onStateChange],\n );\n\n const setValueWithDelay = React.useCallback(\n (newValue: React.SetStateAction<S>, delay: number = defaultDelay) => {\n clearTimeout(timeout.current);\n if (delay === 0) {\n handleSetValue(newValue);\n return;\n }\n\n timeout.current = setTimeout(() => handleSetValue(newValue), delay);\n },\n [defaultDelay, handleSetValue],\n );\n\n return [value, setValueWithDelay];\n}\n"],"names":["React","isFunction","noop","useStateWithDelay","initialState","defaultDelay","onStateChange","value","setValue","useState","timeout","useRef","undefined","handleSetValue","useCallback","nextValue","prevValue","setValueWithDelay","newValue","delay","clearTimeout","current","setTimeout"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BC,GACD,OAAO,SAASC,kBACdC,YAA2B,EAC3BC,eAAe,CAAC,EAChBC,gBAAgCJ,IAAI;IAEpC,MAAM,CAACK,OAAOC,SAAS,GAAGR,MAAMS,QAAQ,CAACL;IACzC,MAAMM,UAAUV,MAAMW,MAAM,CAAgCC;IAE5D,MAAMC,iBAAiBb,MAAMc,WAAW,CACtC,CAACC;QACC,IAAId,WAAWc,YAAY;YACzBP,SAAS,CAACQ;gBACR,MAAMT,QAAQQ,UAAUC;gBACxBV,cAAcC;gBAEd,OAAOA;YACT;QACF,OAAO;YACLC,SAASO;YACTT,cAAcS;QAChB;IACF,GACA;QAACT;KAAc;IAGjB,MAAMW,oBAAoBjB,MAAMc,WAAW,CACzC,CAACI,UAAmCC,QAAgBd,YAAY;QAC9De,aAAaV,QAAQW,OAAO;QAC5B,IAAIF,UAAU,GAAG;YACfN,eAAeK;YACf;QACF;QAEAR,QAAQW,OAAO,GAAGC,WAAW,IAAMT,eAAeK,WAAWC;IAC/D,GACA;QAACd;QAAcQ;KAAe;IAGhC,OAAO;QAACN;QAAOU;KAAkB;AACnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigProvider.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAEL,KAAK,8BAA8B,EAEpC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAoB,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAClF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,aAAc,mBAAmB,KAAG,KAAK,CAAC,SAmDpE,CAAC"}
1
+ {"version":3,"file":"ConfigProvider.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAEL,KAAK,8BAA8B,EAGpC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAoB,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAClF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,aAAc,mBAAmB,KAAG,KAAK,CAAC,SAuBpE,CAAC"}
@@ -1,44 +1,29 @@
1
1
  'use client';
2
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
+ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
5
  import * as React from "react";
5
6
  import { IconAppearanceProvider } from "@vkontakte/icons";
6
7
  import { useAutoDetectColorScheme } from "../../hooks/useAutoDetectColorScheme.js";
7
8
  import { TokensClassProvider } from "../../lib/tokens/index.js";
8
9
  import { excludeKeysWithUndefined } from "../../lib/utils.js";
9
- import { ConfigProviderContext, useConfigProvider } from "./ConfigProviderContext.js";
10
+ import { ConfigProviderContext, useConfigProvider, useConfigProviderContextMemo } from "./ConfigProviderContext.js";
10
11
  /**
11
12
  * @see https://vkcom.github.io/VKUI/#/ConfigProvider
12
13
  */ export const ConfigProvider = (propsRaw)=>{
13
14
  const props = excludeKeysWithUndefined(propsRaw);
14
15
  const parentConfig = useConfigProvider();
15
- const { children, hasCustomPanelHeaderAfter, customPanelHeaderAfterMinWidth, isWebView, transitionMotionEnabled, platform, locale, colorScheme: colorSchemeProp, tokensClassNames } = _object_spread({}, parentConfig, props);
16
- const colorScheme = useAutoDetectColorScheme(colorSchemeProp);
17
- const configContext = React.useMemo(()=>({
18
- hasCustomPanelHeaderAfter,
19
- customPanelHeaderAfterMinWidth,
20
- isWebView,
21
- transitionMotionEnabled,
22
- platform,
23
- locale,
24
- tokensClassNames,
25
- colorScheme
26
- }), [
27
- colorScheme,
28
- customPanelHeaderAfterMinWidth,
29
- hasCustomPanelHeaderAfter,
30
- isWebView,
31
- locale,
32
- platform,
33
- tokensClassNames,
34
- transitionMotionEnabled
35
- ]);
16
+ const mergeProps = _object_spread({}, parentConfig, props);
17
+ const colorScheme = useAutoDetectColorScheme(mergeProps.colorScheme);
18
+ const configContext = useConfigProviderContextMemo(_object_spread_props(_object_spread({}, mergeProps), {
19
+ colorScheme
20
+ }));
36
21
  return /*#__PURE__*/ _jsx(ConfigProviderContext.Provider, {
37
22
  value: configContext,
38
23
  children: /*#__PURE__*/ _jsx(IconAppearanceProvider, {
39
24
  value: colorScheme,
40
25
  children: /*#__PURE__*/ _jsx(TokensClassProvider, {
41
- children: children
26
+ children: mergeProps.children
42
27
  })
43
28
  })
44
29
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { IconAppearanceProvider } from '@vkontakte/icons';\nimport { useAutoDetectColorScheme } from '../../hooks/useAutoDetectColorScheme';\nimport { TokensClassProvider } from '../../lib/tokens';\nimport { excludeKeysWithUndefined } from '../../lib/utils';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n useConfigProvider,\n} from './ConfigProviderContext';\n\nexport interface ConfigProviderProps extends Partial<ConfigProviderContextInterface> {\n children: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ConfigProvider\n */\nexport const ConfigProvider = (propsRaw: ConfigProviderProps): React.ReactNode => {\n const props = excludeKeysWithUndefined(propsRaw);\n const parentConfig = useConfigProvider();\n\n const {\n children,\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n isWebView,\n transitionMotionEnabled,\n platform,\n locale,\n colorScheme: colorSchemeProp,\n tokensClassNames,\n } = {\n ...parentConfig,\n ...props,\n };\n\n const colorScheme = useAutoDetectColorScheme(colorSchemeProp);\n\n const configContext = React.useMemo(\n () => ({\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n isWebView,\n transitionMotionEnabled,\n platform,\n locale,\n tokensClassNames,\n colorScheme,\n }),\n [\n colorScheme,\n customPanelHeaderAfterMinWidth,\n hasCustomPanelHeaderAfter,\n isWebView,\n locale,\n platform,\n tokensClassNames,\n transitionMotionEnabled,\n ],\n );\n\n return (\n <ConfigProviderContext.Provider value={configContext}>\n <IconAppearanceProvider value={colorScheme}>\n <TokensClassProvider>{children}</TokensClassProvider>\n </IconAppearanceProvider>\n </ConfigProviderContext.Provider>\n );\n};\n"],"names":["React","IconAppearanceProvider","useAutoDetectColorScheme","TokensClassProvider","excludeKeysWithUndefined","ConfigProviderContext","useConfigProvider","ConfigProvider","propsRaw","props","parentConfig","children","hasCustomPanelHeaderAfter","customPanelHeaderAfterMinWidth","isWebView","transitionMotionEnabled","platform","locale","colorScheme","colorSchemeProp","tokensClassNames","configContext","useMemo","Provider","value"],"mappings":"AAAA;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,sBAAsB,QAAQ,mBAAmB;AAC1D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,mBAAmB,QAAQ,4BAAmB;AACvD,SAASC,wBAAwB,QAAQ,qBAAkB;AAC3D,SACEC,qBAAqB,EAErBC,iBAAiB,QACZ,6BAA0B;AAMjC;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAACC;IAC7B,MAAMC,QAAQL,yBAAyBI;IACvC,MAAME,eAAeJ;IAErB,MAAM,EACJK,QAAQ,EACRC,yBAAyB,EACzBC,8BAA8B,EAC9BC,SAAS,EACTC,uBAAuB,EACvBC,QAAQ,EACRC,MAAM,EACNC,aAAaC,eAAe,EAC5BC,gBAAgB,EACjB,GAAG,mBACCV,cACAD;IAGL,MAAMS,cAAchB,yBAAyBiB;IAE7C,MAAME,gBAAgBrB,MAAMsB,OAAO,CACjC,IAAO,CAAA;YACLV;YACAC;YACAC;YACAC;YACAC;YACAC;YACAG;YACAF;QACF,CAAA,GACA;QACEA;QACAL;QACAD;QACAE;QACAG;QACAD;QACAI;QACAL;KACD;IAGH,qBACE,KAACV,sBAAsBkB,QAAQ;QAACC,OAAOH;kBACrC,cAAA,KAACpB;YAAuBuB,OAAON;sBAC7B,cAAA,KAACf;0BAAqBQ;;;;AAI9B,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { IconAppearanceProvider } from '@vkontakte/icons';\nimport { useAutoDetectColorScheme } from '../../hooks/useAutoDetectColorScheme';\nimport { TokensClassProvider } from '../../lib/tokens';\nimport { excludeKeysWithUndefined } from '../../lib/utils';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n useConfigProvider,\n useConfigProviderContextMemo,\n} from './ConfigProviderContext';\n\nexport interface ConfigProviderProps extends Partial<ConfigProviderContextInterface> {\n children: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ConfigProvider\n */\nexport const ConfigProvider = (propsRaw: ConfigProviderProps): React.ReactNode => {\n const props = excludeKeysWithUndefined(propsRaw);\n const parentConfig = useConfigProvider();\n\n const mergeProps = {\n ...parentConfig,\n ...props,\n };\n\n const colorScheme = useAutoDetectColorScheme(mergeProps.colorScheme);\n\n const configContext = useConfigProviderContextMemo({\n ...mergeProps,\n colorScheme,\n });\n\n return (\n <ConfigProviderContext.Provider value={configContext}>\n <IconAppearanceProvider value={colorScheme}>\n <TokensClassProvider>{mergeProps.children}</TokensClassProvider>\n </IconAppearanceProvider>\n </ConfigProviderContext.Provider>\n );\n};\n"],"names":["React","IconAppearanceProvider","useAutoDetectColorScheme","TokensClassProvider","excludeKeysWithUndefined","ConfigProviderContext","useConfigProvider","useConfigProviderContextMemo","ConfigProvider","propsRaw","props","parentConfig","mergeProps","colorScheme","configContext","Provider","value","children"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,sBAAsB,QAAQ,mBAAmB;AAC1D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,mBAAmB,QAAQ,4BAAmB;AACvD,SAASC,wBAAwB,QAAQ,qBAAkB;AAC3D,SACEC,qBAAqB,EAErBC,iBAAiB,EACjBC,4BAA4B,QACvB,6BAA0B;AAMjC;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAACC;IAC7B,MAAMC,QAAQN,yBAAyBK;IACvC,MAAME,eAAeL;IAErB,MAAMM,aAAa,mBACdD,cACAD;IAGL,MAAMG,cAAcX,yBAAyBU,WAAWC,WAAW;IAEnE,MAAMC,gBAAgBP,6BAA6B,wCAC9CK;QACHC;;IAGF,qBACE,KAACR,sBAAsBU,QAAQ;QAACC,OAAOF;kBACrC,cAAA,KAACb;YAAuBe,OAAOH;sBAC7B,cAAA,KAACV;0BAAqBS,WAAWK,QAAQ;;;;AAIjD,EAAE"}
@@ -72,4 +72,5 @@ export interface ConfigProviderContextInterface {
72
72
  }
73
73
  export declare const ConfigProviderContext: React.Context<ConfigProviderContextInterface>;
74
74
  export declare const useConfigProvider: () => ConfigProviderContextInterface;
75
+ export declare function useConfigProviderContextMemo(config: ConfigProviderContextInterface): ConfigProviderContextInterface;
75
76
  //# sourceMappingURL=ConfigProviderContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigProviderContext.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProviderContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;OAQG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,yBAAyB,EAAE,OAAO,CAAC;IACnC;;;;;;;OAOG;IACH,8BAA8B,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD;;OAEG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC;;OAEG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAU5E,CAAC;AAEL,eAAO,MAAM,iBAAiB,QAAO,8BACI,CAAC"}
1
+ {"version":3,"file":"ConfigProviderContext.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProviderContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAA8B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;OAQG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,yBAAyB,EAAE,OAAO,CAAC;IACnC;;;;;;;OAOG;IACH,8BAA8B,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD;;OAEG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC;;OAEG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAU5E,CAAC;AAEL,eAAO,MAAM,iBAAiB,QAAO,8BACI,CAAC;AAE1C,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,8BAA8B,kCAkClF"}
@@ -13,5 +13,27 @@ export const ConfigProviderContext = /*#__PURE__*/ React.createContext({
13
13
  locale: 'ru'
14
14
  });
15
15
  export const useConfigProvider = ()=>React.useContext(ConfigProviderContext);
16
+ export function useConfigProviderContextMemo(config) {
17
+ const { isWebView, hasCustomPanelHeaderAfter, customPanelHeaderAfterMinWidth, colorScheme, transitionMotionEnabled, platform, tokensClassNames, locale } = config;
18
+ return React.useMemo(()=>({
19
+ isWebView,
20
+ hasCustomPanelHeaderAfter,
21
+ customPanelHeaderAfterMinWidth,
22
+ colorScheme,
23
+ transitionMotionEnabled,
24
+ platform,
25
+ tokensClassNames,
26
+ locale
27
+ }), [
28
+ isWebView,
29
+ hasCustomPanelHeaderAfter,
30
+ customPanelHeaderAfterMinWidth,
31
+ colorScheme,
32
+ transitionMotionEnabled,
33
+ platform,
34
+ tokensClassNames,
35
+ locale
36
+ ]);
37
+ }
16
38
 
17
39
  //# sourceMappingURL=ConfigProviderContext.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProviderContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { ColorSchemeType } from '../../lib/colorScheme';\nimport { platform, type PlatformType } from '../../lib/platform';\nimport { DEFAULT_TOKENS_CLASS_NAMES, type TokensClassNames } from '../../lib/tokens';\n\nexport interface ConfigProviderContextInterface {\n /**\n * Подсказывает приложению, обёрнутому в `ConfigProvider`, где открыто приложение: внутри webview или в мобильном браузере.\n *\n * В условиях когда:\n * - `isWebView={true}`\n * - platform=\"ios\"\n *\n * для компонента `View` включается возможность навигации через смахивание.\n */\n isWebView: boolean;\n /**\n * При `true` слот `after` у `PanelHeader` игнорируется под размещение пользовательского\n * \"плавающего\" элемента (например, панель управления webview).\n *\n * > Note: Правило не распространяется на `PanelHeader` внутри модальных окон, предоставляемых\n * > библиотекой.\n */\n hasCustomPanelHeaderAfter: boolean;\n /**\n * Задаёт необходимый минимальную ширину слота `after` в `PanelHeader` под пользовательский\n * \"плавающий\" элемент (например, ширина панели управления webview).\n *\n * Учитывается только при `hasCustomPanelHeaderAfter={true}` (см. документацию `hasCustomPanelHeaderAfter`).\n *\n * @default 90\n */\n customPanelHeaderAfterMinWidth: number | string;\n /**\n * Тип цветовой схемы – `light` или `dark`\n */\n colorScheme: ColorSchemeType | undefined;\n /**\n * Включена ли анимация переходов между экранами в `Root` и `View`\n */\n transitionMotionEnabled: boolean;\n /**\n * Платформа\n */\n platform: PlatformType;\n /**\n * CSS классы, определяющие набор токенов.\n *\n * - Используйте `{ light?: '<css_class>', dark?: '<css_class>' }`, чтобы задать для всех платформ одинаковый набор токенов для светлой и/или тёмной тем.\n * - Используйте `{ [key in 'android' | 'ios' | 'vkcom']?: '<css_class>' }`, чтобы задать для одной или нескольких платформ свой набор токенов.\n *\n * @default\n * {\n * android: {\n * light: 'vkui--vkBase--light',\n * dark: 'vkui--vkBase--dark',\n * },\n * ios: {\n * light: 'vkui--vkIOS--light',\n * dark: 'vkui--vkIOS--dark',\n * },\n * vkcom: {\n * light: 'vkui--vkCom--light',\n * dark: 'vkui--vkCom--dark',\n * }\n * }\n */\n tokensClassNames: TokensClassNames;\n /**\n * Строка с языковой меткой BCP 47\n */\n locale: string;\n}\n\nexport const ConfigProviderContext: React.Context<ConfigProviderContextInterface> =\n React.createContext<ConfigProviderContextInterface>({\n hasCustomPanelHeaderAfter: false,\n customPanelHeaderAfterMinWidth: 90,\n isWebView: false,\n transitionMotionEnabled: true,\n platform: platform(),\n colorScheme: undefined, // undefined обозначает что тема должна определиться автоматически\n tokensClassNames: DEFAULT_TOKENS_CLASS_NAMES,\n locale: 'ru',\n });\n\nexport const useConfigProvider = (): ConfigProviderContextInterface =>\n React.useContext(ConfigProviderContext);\n"],"names":["React","platform","DEFAULT_TOKENS_CLASS_NAMES","ConfigProviderContext","createContext","hasCustomPanelHeaderAfter","customPanelHeaderAfterMinWidth","isWebView","transitionMotionEnabled","colorScheme","undefined","tokensClassNames","locale","useConfigProvider","useContext"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,QAAQ,QAA2B,wBAAqB;AACjE,SAASC,0BAA0B,QAA+B,4BAAmB;AAuErF,OAAO,MAAMC,sCACXH,MAAMI,aAAa,CAAiC;IAClDC,2BAA2B;IAC3BC,gCAAgC;IAChCC,WAAW;IACXC,yBAAyB;IACzBP,UAAUA;IACVQ,aAAaC;IACbC,kBAAkBT;IAClBU,QAAQ;AACV,GAAG;AAEL,OAAO,MAAMC,oBAAoB,IAC/Bb,MAAMc,UAAU,CAACX,uBAAuB"}
1
+ {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProviderContext.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { ColorSchemeType } from '../../lib/colorScheme';\nimport { platform, type PlatformType } from '../../lib/platform';\nimport { DEFAULT_TOKENS_CLASS_NAMES, type TokensClassNames } from '../../lib/tokens';\n\nexport interface ConfigProviderContextInterface {\n /**\n * Подсказывает приложению, обёрнутому в `ConfigProvider`, где открыто приложение: внутри webview или в мобильном браузере.\n *\n * В условиях когда:\n * - `isWebView={true}`\n * - platform=\"ios\"\n *\n * для компонента `View` включается возможность навигации через смахивание.\n */\n isWebView: boolean;\n /**\n * При `true` слот `after` у `PanelHeader` игнорируется под размещение пользовательского\n * \"плавающего\" элемента (например, панель управления webview).\n *\n * > Note: Правило не распространяется на `PanelHeader` внутри модальных окон, предоставляемых\n * > библиотекой.\n */\n hasCustomPanelHeaderAfter: boolean;\n /**\n * Задаёт необходимый минимальную ширину слота `after` в `PanelHeader` под пользовательский\n * \"плавающий\" элемент (например, ширина панели управления webview).\n *\n * Учитывается только при `hasCustomPanelHeaderAfter={true}` (см. документацию `hasCustomPanelHeaderAfter`).\n *\n * @default 90\n */\n customPanelHeaderAfterMinWidth: number | string;\n /**\n * Тип цветовой схемы – `light` или `dark`\n */\n colorScheme: ColorSchemeType | undefined;\n /**\n * Включена ли анимация переходов между экранами в `Root` и `View`\n */\n transitionMotionEnabled: boolean;\n /**\n * Платформа\n */\n platform: PlatformType;\n /**\n * CSS классы, определяющие набор токенов.\n *\n * - Используйте `{ light?: '<css_class>', dark?: '<css_class>' }`, чтобы задать для всех платформ одинаковый набор токенов для светлой и/или тёмной тем.\n * - Используйте `{ [key in 'android' | 'ios' | 'vkcom']?: '<css_class>' }`, чтобы задать для одной или нескольких платформ свой набор токенов.\n *\n * @default\n * {\n * android: {\n * light: 'vkui--vkBase--light',\n * dark: 'vkui--vkBase--dark',\n * },\n * ios: {\n * light: 'vkui--vkIOS--light',\n * dark: 'vkui--vkIOS--dark',\n * },\n * vkcom: {\n * light: 'vkui--vkCom--light',\n * dark: 'vkui--vkCom--dark',\n * }\n * }\n */\n tokensClassNames: TokensClassNames;\n /**\n * Строка с языковой меткой BCP 47\n */\n locale: string;\n}\n\nexport const ConfigProviderContext: React.Context<ConfigProviderContextInterface> =\n React.createContext<ConfigProviderContextInterface>({\n hasCustomPanelHeaderAfter: false,\n customPanelHeaderAfterMinWidth: 90,\n isWebView: false,\n transitionMotionEnabled: true,\n platform: platform(),\n colorScheme: undefined, // undefined обозначает что тема должна определиться автоматически\n tokensClassNames: DEFAULT_TOKENS_CLASS_NAMES,\n locale: 'ru',\n });\n\nexport const useConfigProvider = (): ConfigProviderContextInterface =>\n React.useContext(ConfigProviderContext);\n\nexport function useConfigProviderContextMemo(config: ConfigProviderContextInterface) {\n const {\n isWebView,\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n colorScheme,\n transitionMotionEnabled,\n platform,\n tokensClassNames,\n locale,\n } = config;\n\n return React.useMemo<ConfigProviderContextInterface>(\n () => ({\n isWebView,\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n colorScheme,\n transitionMotionEnabled,\n platform,\n tokensClassNames,\n locale,\n }),\n [\n isWebView,\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n colorScheme,\n transitionMotionEnabled,\n platform,\n tokensClassNames,\n locale,\n ],\n );\n}\n"],"names":["React","platform","DEFAULT_TOKENS_CLASS_NAMES","ConfigProviderContext","createContext","hasCustomPanelHeaderAfter","customPanelHeaderAfterMinWidth","isWebView","transitionMotionEnabled","colorScheme","undefined","tokensClassNames","locale","useConfigProvider","useContext","useConfigProviderContextMemo","config","useMemo"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,QAAQ,QAA2B,wBAAqB;AACjE,SAASC,0BAA0B,QAA+B,4BAAmB;AAuErF,OAAO,MAAMC,sCACXH,MAAMI,aAAa,CAAiC;IAClDC,2BAA2B;IAC3BC,gCAAgC;IAChCC,WAAW;IACXC,yBAAyB;IACzBP,UAAUA;IACVQ,aAAaC;IACbC,kBAAkBT;IAClBU,QAAQ;AACV,GAAG;AAEL,OAAO,MAAMC,oBAAoB,IAC/Bb,MAAMc,UAAU,CAACX,uBAAuB;AAE1C,OAAO,SAASY,6BAA6BC,MAAsC;IACjF,MAAM,EACJT,SAAS,EACTF,yBAAyB,EACzBC,8BAA8B,EAC9BG,WAAW,EACXD,uBAAuB,EACvBP,QAAQ,EACRU,gBAAgB,EAChBC,MAAM,EACP,GAAGI;IAEJ,OAAOhB,MAAMiB,OAAO,CAClB,IAAO,CAAA;YACLV;YACAF;YACAC;YACAG;YACAD;YACAP;YACAU;YACAC;QACF,CAAA,GACA;QACEL;QACAF;QACAC;QACAG;QACAD;QACAP;QACAU;QACAC;KACD;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigProviderOverride.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProviderOverride.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAEL,KAAK,8BAA8B,EAEpC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,2BAA4B,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAC1F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,GAAG,YAAY,EAChB,EAAE,2BAA2B,GAAG,KAAK,CAAC,SAAS,CAa/C"}
1
+ {"version":3,"file":"ConfigProviderOverride.d.ts","sourceRoot":"","sources":["../../../src/components/ConfigProvider/ConfigProviderOverride.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAEL,KAAK,8BAA8B,EAGpC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,2BAA4B,SAAQ,OAAO,CAAC,8BAA8B,CAAC;IAC1F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,GAAG,YAAY,EAChB,EAAE,2BAA2B,GAAG,KAAK,CAAC,SAAS,CAU/C"}
@@ -3,8 +3,7 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
3
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import * as React from "react";
6
- import { useObjectMemo } from "../../hooks/useObjectMemo.js";
7
- import { ConfigProviderContext, useConfigProvider } from "./ConfigProviderContext.js";
6
+ import { ConfigProviderContext, useConfigProvider, useConfigProviderContextMemo } from "./ConfigProviderContext.js";
8
7
  /**
9
8
  * Компонент предназначен для перебивания одного из значений контекста
10
9
  */ export function ConfigProviderOverride(_param) {
@@ -12,7 +11,7 @@ import { ConfigProviderContext, useConfigProvider } from "./ConfigProviderContex
12
11
  "children"
13
12
  ]);
14
13
  const parentConfig = useConfigProvider();
15
- const configContext = useObjectMemo(_object_spread({}, parentConfig, contextValue));
14
+ const configContext = useConfigProviderContextMemo(_object_spread({}, parentConfig, contextValue));
16
15
  return /*#__PURE__*/ _jsx(ConfigProviderContext.Provider, {
17
16
  value: configContext,
18
17
  children: children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProviderOverride.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n useConfigProvider,\n} from './ConfigProviderContext';\n\nexport interface ConfigProviderOverrideProps extends Partial<ConfigProviderContextInterface> {\n children: React.ReactNode;\n}\n\n/**\n * Компонент предназначен для перебивания одного из значений контекста\n */\nexport function ConfigProviderOverride({\n children,\n ...contextValue\n}: ConfigProviderOverrideProps): React.ReactNode {\n const parentConfig = useConfigProvider();\n\n const configContext = useObjectMemo({\n ...parentConfig,\n ...contextValue,\n });\n\n return (\n <ConfigProviderContext.Provider value={configContext}>\n {children}\n </ConfigProviderContext.Provider>\n );\n}\n"],"names":["React","useObjectMemo","ConfigProviderContext","useConfigProvider","ConfigProviderOverride","children","contextValue","parentConfig","configContext","Provider","value"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SACEC,qBAAqB,EAErBC,iBAAiB,QACZ,6BAA0B;AAMjC;;CAEC,GACD,OAAO,SAASC,uBAAuB;QAAA,EACrCC,QAAQ,EAEoB,GAHS,QAElCC,0CAFkC;QACrCD;;IAGA,MAAME,eAAeJ;IAErB,MAAMK,gBAAgBP,cAAc,mBAC/BM,cACAD;IAGL,qBACE,KAACJ,sBAAsBO,QAAQ;QAACC,OAAOF;kBACpCH;;AAGP"}
1
+ {"version":3,"sources":["../../../src/components/ConfigProvider/ConfigProviderOverride.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n useConfigProvider,\n useConfigProviderContextMemo,\n} from './ConfigProviderContext';\n\nexport interface ConfigProviderOverrideProps extends Partial<ConfigProviderContextInterface> {\n children: React.ReactNode;\n}\n\n/**\n * Компонент предназначен для перебивания одного из значений контекста\n */\nexport function ConfigProviderOverride({\n children,\n ...contextValue\n}: ConfigProviderOverrideProps): React.ReactNode {\n const parentConfig = useConfigProvider();\n\n const configContext = useConfigProviderContextMemo({ ...parentConfig, ...contextValue });\n\n return (\n <ConfigProviderContext.Provider value={configContext}>\n {children}\n </ConfigProviderContext.Provider>\n );\n}\n"],"names":["React","ConfigProviderContext","useConfigProvider","useConfigProviderContextMemo","ConfigProviderOverride","children","contextValue","parentConfig","configContext","Provider","value"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SACEC,qBAAqB,EAErBC,iBAAiB,EACjBC,4BAA4B,QACvB,6BAA0B;AAMjC;;CAEC,GACD,OAAO,SAASC,uBAAuB;QAAA,EACrCC,QAAQ,EAEoB,GAHS,QAElCC,0CAFkC;QACrCD;;IAGA,MAAME,eAAeL;IAErB,MAAMM,gBAAgBL,6BAA6B,mBAAKI,cAAiBD;IAEzE,qBACE,KAACL,sBAAsBQ,QAAQ;QAACC,OAAOF;kBACpCH;;AAGP"}
@@ -8,6 +8,10 @@ export interface CustomScrollViewProps extends React.AllHTMLAttributes<HTMLDivEl
8
8
  * Поведение overscroll, подробнее можно почитать в [документации](https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior)
9
9
  */
10
10
  overscrollBehavior?: 'auto' | 'contain' | 'none';
11
+ /**
12
+ * Поведение scroll-behavior, подробнее можно почитать в [документации](https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)
13
+ */
14
+ scrollBehavior?: 'auto' | 'smooth';
11
15
  /**
12
16
  * Включение отображения горизонтального скролла
13
17
  */
@@ -22,5 +26,5 @@ export interface CustomScrollViewProps extends React.AllHTMLAttributes<HTMLDivEl
22
26
  /**
23
27
  * @see https://vkcom.github.io/VKUI/#/CustomScrollView
24
28
  */
25
- export declare const CustomScrollView: ({ className, children, enableHorizontalScroll, onScroll, getRootRef, overscrollBehavior, scrollbarHidden, ...restProps }: CustomScrollViewProps) => React.ReactNode;
29
+ export declare const CustomScrollView: ({ className, children, enableHorizontalScroll, onScroll, getRootRef, overscrollBehavior, scrollBehavior, scrollbarHidden, ...restProps }: CustomScrollViewProps) => React.ReactNode;
26
30
  //# sourceMappingURL=CustomScrollView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomScrollView.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAC7C,UAAU,CAAC,cAAc,CAAC;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,6HAS1B,qBAAqB,KAAG,KAAK,CAAC,SAiBhC,CAAC"}
1
+ {"version":3,"file":"CustomScrollView.d.ts","sourceRoot":"","sources":["../../../src/components/CustomScrollView/CustomScrollView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAc9C,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAC7C,UAAU,CAAC,cAAc,CAAC;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,6IAU1B,qBAAqB,KAAG,KAAK,CAAC,SAkBhC,CAAC"}