@vkontakte/vkui 8.1.2 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts +5 -4
  2. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  3. package/dist/components/ActionSheet/ActionSheet.js +2 -1
  4. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  5. package/dist/components/AdaptivityProvider/AdaptivityContext.d.ts +3 -3
  6. package/dist/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  7. package/dist/components/AdaptivityProvider/AdaptivityProvider.js +2 -2
  8. package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  9. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  10. package/dist/components/AppRoot/AppRoot.js +0 -6
  11. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  12. package/dist/components/AppRoot/AppRootContext.d.ts +0 -1
  13. package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
  14. package/dist/components/AppRoot/AppRootContext.js +0 -1
  15. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  16. package/dist/components/Calendar/Calendar.d.ts +1 -1
  17. package/dist/components/Calendar/Calendar.js +2 -1
  18. package/dist/components/Calendar/Calendar.js.map +1 -1
  19. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  20. package/dist/components/CalendarDay/CalendarDay.js +4 -2
  21. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  22. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  23. package/dist/components/CalendarDays/CalendarDays.js +2 -2
  24. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  25. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  26. package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
  27. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  28. package/dist/components/CalendarRange/CalendarRange.d.ts +2 -2
  29. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  30. package/dist/components/CalendarTime/CalendarTime.d.ts +1 -1
  31. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  32. package/dist/components/CalendarTime/CalendarTime.js +61 -50
  33. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  34. package/dist/components/CalendarTime/CalendarTimePicker.d.ts +11 -7
  35. package/dist/components/CalendarTime/CalendarTimePicker.d.ts.map +1 -1
  36. package/dist/components/CalendarTime/CalendarTimePicker.js +108 -48
  37. package/dist/components/CalendarTime/CalendarTimePicker.js.map +1 -1
  38. package/dist/components/CalendarTime/ComboBox.d.ts +25 -0
  39. package/dist/components/CalendarTime/ComboBox.d.ts.map +1 -0
  40. package/dist/components/CalendarTime/ComboBox.js +112 -0
  41. package/dist/components/CalendarTime/ComboBox.js.map +1 -0
  42. package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
  43. package/dist/components/CardScroll/CardScroll.js +2 -2
  44. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  45. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  46. package/dist/components/CarouselBase/CarouselBase.js +3 -1
  47. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  48. package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
  49. package/dist/components/ChipsSelect/useChipsSelect.js +2 -1
  50. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  51. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  52. package/dist/components/ConfigProvider/ConfigProvider.js +8 -4
  53. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  54. package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
  55. package/dist/components/ConfigProvider/ConfigProviderOverride.js +5 -1
  56. package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  57. package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts +15 -0
  58. package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts.map +1 -0
  59. package/dist/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
  60. package/dist/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
  61. package/dist/components/ContentBadge/ContentBadge.d.ts +14 -1
  62. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  63. package/dist/components/ContentBadge/ContentBadge.js +39 -1
  64. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  65. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  66. package/dist/components/CustomSelect/CustomSelect.js +16 -10
  67. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  68. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  69. package/dist/components/DateInput/DateInput.js +4 -3
  70. package/dist/components/DateInput/DateInput.js.map +1 -1
  71. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  72. package/dist/components/DateRangeInput/DateRangeInput.js +2 -2
  73. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  74. package/dist/components/Epic/ScrollSaver.d.ts.map +1 -1
  75. package/dist/components/Epic/ScrollSaver.js +1 -0
  76. package/dist/components/Epic/ScrollSaver.js.map +1 -1
  77. package/dist/components/FixedLayout/ParentWidthWrapper.d.ts +6 -0
  78. package/dist/components/FixedLayout/ParentWidthWrapper.d.ts.map +1 -0
  79. package/dist/components/FixedLayout/ParentWidthWrapper.js +43 -0
  80. package/dist/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
  81. package/dist/components/Flex/Flex.d.ts +7 -4
  82. package/dist/components/Flex/Flex.d.ts.map +1 -1
  83. package/dist/components/Flex/Flex.js +5 -2
  84. package/dist/components/Flex/Flex.js.map +1 -1
  85. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
  86. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
  87. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  88. package/dist/components/NativeSelect/NativeSelect.js +6 -2
  89. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  90. package/dist/components/NavTransitionContext/NavTransitionContext.d.ts +2 -1
  91. package/dist/components/NavTransitionContext/NavTransitionContext.d.ts.map +1 -1
  92. package/dist/components/NavTransitionContext/NavTransitionContext.js +8 -4
  93. package/dist/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
  94. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  95. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -5
  96. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  97. package/dist/components/PanelHeader/PanelHeader.d.ts +1 -1
  98. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  99. package/dist/components/Popper/Popper.d.ts.map +1 -1
  100. package/dist/components/Popper/Popper.js +7 -4
  101. package/dist/components/Popper/Popper.js.map +1 -1
  102. package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  103. package/dist/components/PullToRefresh/PullToRefresh.js +8 -4
  104. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  105. package/dist/components/Root/Root.d.ts +1 -1
  106. package/dist/components/Root/Root.d.ts.map +1 -1
  107. package/dist/components/Root/Root.js +43 -37
  108. package/dist/components/Root/Root.js.map +1 -1
  109. package/dist/components/SimpleGrid/SimpleGrid.d.ts +9 -8
  110. package/dist/components/SimpleGrid/SimpleGrid.d.ts.map +1 -1
  111. package/dist/components/SimpleGrid/SimpleGrid.js +9 -2
  112. package/dist/components/SimpleGrid/SimpleGrid.js.map +1 -1
  113. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  114. package/dist/components/Skeleton/Skeleton.js +3 -4
  115. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  116. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  117. package/dist/components/Snackbar/Snackbar.js +6 -3
  118. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  119. package/dist/components/Spacing/Spacing.d.ts +1 -1
  120. package/dist/components/Spacing/Spacing.js.map +1 -1
  121. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts +10 -0
  122. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts.map +1 -0
  123. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +54 -0
  124. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
  125. package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts +18 -0
  126. package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts.map +1 -0
  127. package/dist/components/Spinner/ExpressiveSpinner/icons.js +79 -0
  128. package/dist/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
  129. package/dist/components/Spinner/SvgIcon.d.ts +14 -0
  130. package/dist/components/Spinner/SvgIcon.d.ts.map +1 -0
  131. package/dist/components/Spinner/SvgIcon.js +20 -0
  132. package/dist/components/Spinner/SvgIcon.js.map +1 -0
  133. package/dist/components/Spinner/icons.d.ts +1 -1
  134. package/dist/components/Spinner/icons.d.ts.map +1 -1
  135. package/dist/components/Spinner/icons.js +10 -23
  136. package/dist/components/Spinner/icons.js.map +1 -1
  137. package/dist/components/SplitLayout/SplitLayout.d.ts +3 -3
  138. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  139. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  140. package/dist/components/TabsItem/TabsItem.js +2 -5
  141. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  142. package/dist/components/Tappable/Tappable.d.ts +2 -2
  143. package/dist/components/Tappable/Tappable.js.map +1 -1
  144. package/dist/components/View/View.d.ts.map +1 -1
  145. package/dist/components/View/View.js +50 -53
  146. package/dist/components/View/View.js.map +1 -1
  147. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  148. package/dist/components/View/ViewInfinite.js +34 -37
  149. package/dist/components/View/ViewInfinite.js.map +1 -1
  150. package/dist/components/WriteBar/WriteBar.d.ts +15 -1
  151. package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
  152. package/dist/components/WriteBar/WriteBar.js +35 -63
  153. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  154. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts +5 -0
  155. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts.map +1 -0
  156. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +15 -0
  157. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
  158. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts +8 -0
  159. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts.map +1 -0
  160. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js +16 -0
  161. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
  162. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts +5 -0
  163. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts.map +1 -0
  164. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +15 -0
  165. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
  166. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts +10 -0
  167. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts.map +1 -0
  168. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js +16 -0
  169. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
  170. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts +10 -0
  171. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts.map +1 -0
  172. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +39 -0
  173. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
  174. package/dist/components.css +1 -1
  175. package/dist/components.css.map +1 -1
  176. package/dist/cssm/components/ActionSheet/ActionSheet.js +2 -1
  177. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  178. package/dist/cssm/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  179. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +2 -2
  180. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  181. package/dist/cssm/components/AppRoot/AppRoot.js +0 -6
  182. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  183. package/dist/cssm/components/AppRoot/AppRootContext.js +0 -1
  184. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  185. package/dist/cssm/components/Calendar/Calendar.js +2 -1
  186. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  187. package/dist/cssm/components/CalendarDay/CalendarDay.js +4 -2
  188. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  189. package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -2
  190. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  191. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
  192. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  193. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  194. package/dist/cssm/components/CalendarTime/CalendarTime.js +61 -50
  195. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  196. package/dist/cssm/components/CalendarTime/CalendarTime.module.css +38 -0
  197. package/dist/cssm/components/CalendarTime/CalendarTimePicker.js +108 -48
  198. package/dist/cssm/components/CalendarTime/CalendarTimePicker.js.map +1 -1
  199. package/dist/cssm/components/CalendarTime/ComboBox.js +113 -0
  200. package/dist/cssm/components/CalendarTime/ComboBox.js.map +1 -0
  201. package/dist/cssm/components/CardScroll/CardScroll.js +2 -2
  202. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  203. package/dist/cssm/components/CarouselBase/CarouselBase.js +3 -1
  204. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  205. package/dist/cssm/components/ChipsSelect/useChipsSelect.js +2 -1
  206. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  207. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -4
  208. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  209. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +5 -1
  210. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  211. package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
  212. package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
  213. package/dist/cssm/components/ContentBadge/ContentBadge.js +39 -1
  214. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  215. package/dist/cssm/components/ContentBadge/ContentBadge.module.css +88 -90
  216. package/dist/cssm/components/CustomSelect/CustomSelect.js +16 -10
  217. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  218. package/dist/cssm/components/DateInput/DateInput.js +4 -3
  219. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  220. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +2 -2
  221. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  222. package/dist/cssm/components/Epic/ScrollSaver.js +1 -0
  223. package/dist/cssm/components/Epic/ScrollSaver.js.map +1 -1
  224. package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js +43 -0
  225. package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
  226. package/dist/cssm/components/Flex/Flex.js +5 -2
  227. package/dist/cssm/components/Flex/Flex.js.map +1 -1
  228. package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
  229. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
  230. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
  231. package/dist/cssm/components/NativeSelect/NativeSelect.js +6 -2
  232. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  233. package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js +8 -4
  234. package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
  235. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +4 -5
  236. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  237. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  238. package/dist/cssm/components/Popper/Popper.js +7 -4
  239. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  240. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +8 -4
  241. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  242. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +1 -1
  243. package/dist/cssm/components/Root/Root.js +43 -37
  244. package/dist/cssm/components/Root/Root.js.map +1 -1
  245. package/dist/cssm/components/SimpleGrid/SimpleGrid.js +9 -2
  246. package/dist/cssm/components/SimpleGrid/SimpleGrid.js.map +1 -1
  247. package/dist/cssm/components/Skeleton/Skeleton.js +3 -4
  248. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  249. package/dist/cssm/components/Snackbar/Snackbar.js +6 -3
  250. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  251. package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
  252. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +56 -0
  253. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
  254. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
  255. package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js +79 -0
  256. package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
  257. package/dist/cssm/components/Spinner/SvgIcon.js +20 -0
  258. package/dist/cssm/components/Spinner/SvgIcon.js.map +1 -0
  259. package/dist/cssm/components/Spinner/icons.js +10 -23
  260. package/dist/cssm/components/Spinner/icons.js.map +1 -1
  261. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  262. package/dist/cssm/components/TabsItem/TabsItem.js +2 -5
  263. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  264. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  265. package/dist/cssm/components/View/View.js +50 -53
  266. package/dist/cssm/components/View/View.js.map +1 -1
  267. package/dist/cssm/components/View/ViewInfinite.js +34 -37
  268. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  269. package/dist/cssm/components/WriteBar/WriteBar.js +35 -64
  270. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  271. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +16 -0
  272. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
  273. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
  274. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js +17 -0
  275. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
  276. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
  277. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +16 -0
  278. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
  279. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
  280. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js +17 -0
  281. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
  282. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +15 -0
  283. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +40 -0
  284. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
  285. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +43 -0
  286. package/dist/cssm/helpers/math.js +6 -0
  287. package/dist/cssm/helpers/math.js.map +1 -1
  288. package/dist/cssm/hoc/withPlatform.js +3 -2
  289. package/dist/cssm/hoc/withPlatform.js.map +1 -1
  290. package/dist/cssm/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
  291. package/dist/cssm/hooks/useAnimationFrame.js +40 -0
  292. package/dist/cssm/hooks/useAnimationFrame.js.map +1 -0
  293. package/dist/cssm/hooks/useAutoFocus.js +4 -1
  294. package/dist/cssm/hooks/useAutoFocus.js.map +1 -1
  295. package/dist/cssm/hooks/useColorScheme.js +3 -3
  296. package/dist/cssm/hooks/useColorScheme.js.map +1 -1
  297. package/dist/cssm/hooks/useConfigDirection.js +3 -3
  298. package/dist/cssm/hooks/useConfigDirection.js.map +1 -1
  299. package/dist/cssm/hooks/useDateInput.js +1 -2
  300. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  301. package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js +1 -0
  302. package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
  303. package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js +2 -0
  304. package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  305. package/dist/cssm/hooks/useFocusVisible.js +8 -13
  306. package/dist/cssm/hooks/useFocusVisible.js.map +1 -1
  307. package/dist/cssm/hooks/useFocusWithin.js +5 -4
  308. package/dist/cssm/hooks/useFocusWithin.js.map +1 -1
  309. package/dist/cssm/hooks/useGlobalEscKeyDown.js +17 -15
  310. package/dist/cssm/hooks/useGlobalEscKeyDown.js.map +1 -1
  311. package/dist/cssm/hooks/useGlobalOnClickOutside.js +6 -2
  312. package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
  313. package/dist/cssm/hooks/useKeyboardInputTracker.js +48 -41
  314. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  315. package/dist/cssm/hooks/useLatestRef.js +13 -0
  316. package/dist/cssm/hooks/useLatestRef.js.map +1 -0
  317. package/dist/cssm/hooks/useLocale.js +3 -3
  318. package/dist/cssm/hooks/useLocale.js.map +1 -1
  319. package/dist/cssm/hooks/useMediaQueryMatch.js +1 -0
  320. package/dist/cssm/hooks/useMediaQueryMatch.js.map +1 -1
  321. package/dist/cssm/hooks/useMutationObserver.js +3 -3
  322. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  323. package/dist/cssm/hooks/usePlatform.js +3 -3
  324. package/dist/cssm/hooks/usePlatform.js.map +1 -1
  325. package/dist/cssm/hooks/useResizeObserver.js +4 -6
  326. package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
  327. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
  328. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  329. package/dist/cssm/hooks/useSyncHTMLWithTokens.js +3 -1
  330. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
  331. package/dist/cssm/hooks/useWaitTransitionFinish.js +13 -15
  332. package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
  333. package/dist/cssm/index.js +1 -0
  334. package/dist/cssm/index.js.map +1 -1
  335. package/dist/cssm/lib/array.js +18 -0
  336. package/dist/cssm/lib/array.js.map +1 -0
  337. package/dist/cssm/lib/curve.js +21 -0
  338. package/dist/cssm/lib/curve.js.map +1 -0
  339. package/dist/cssm/lib/dom.js +5 -2
  340. package/dist/cssm/lib/dom.js.map +1 -1
  341. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
  342. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  343. package/dist/cssm/lib/fx.js +4 -55
  344. package/dist/cssm/lib/fx.js.map +1 -1
  345. package/dist/cssm/lib/layouts/index.js.map +1 -1
  346. package/dist/cssm/lib/layouts/layoutProps.js +11 -0
  347. package/dist/cssm/lib/layouts/layoutProps.js.map +1 -1
  348. package/dist/cssm/lib/layouts/resolveLayoutProps.js +13 -11
  349. package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -1
  350. package/dist/cssm/lib/layouts/types.js.map +1 -1
  351. package/dist/cssm/lib/material/shapes/Shape.js +18 -0
  352. package/dist/cssm/lib/material/shapes/Shape.js.map +1 -0
  353. package/dist/cssm/lib/material/shapes/shapes.js +2250 -0
  354. package/dist/cssm/lib/material/shapes/shapes.js.map +1 -0
  355. package/dist/cssm/lib/math.js +31 -0
  356. package/dist/cssm/lib/math.js.map +1 -0
  357. package/dist/cssm/lib/svg/path/approximate.js +57 -0
  358. package/dist/cssm/lib/svg/path/approximate.js.map +1 -0
  359. package/dist/cssm/lib/svg/path/interpolate.js +121 -0
  360. package/dist/cssm/lib/svg/path/interpolate.js.map +1 -0
  361. package/dist/cssm/lib/svg/path/path.js +50 -0
  362. package/dist/cssm/lib/svg/path/path.js.map +1 -0
  363. package/dist/cssm/lib/svg/path/point.js +3 -0
  364. package/dist/cssm/lib/svg/path/point.js.map +1 -0
  365. package/dist/cssm/lib/svg/path/transform.js +110 -0
  366. package/dist/cssm/lib/svg/path/transform.js.map +1 -0
  367. package/dist/cssm/lib/tokens/useTokenClassName.js +4 -1
  368. package/dist/cssm/lib/tokens/useTokenClassName.js.map +1 -1
  369. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  370. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  371. package/dist/cssm/styles/layout.css +273 -0
  372. package/dist/cssm/types.js +1 -4
  373. package/dist/cssm/types.js.map +1 -1
  374. package/dist/helpers/math.d.ts +4 -0
  375. package/dist/helpers/math.d.ts.map +1 -1
  376. package/dist/helpers/math.js +6 -0
  377. package/dist/helpers/math.js.map +1 -1
  378. package/dist/hoc/withPlatform.d.ts +1 -1
  379. package/dist/hoc/withPlatform.d.ts.map +1 -1
  380. package/dist/hoc/withPlatform.js +3 -2
  381. package/dist/hoc/withPlatform.js.map +1 -1
  382. package/dist/hooks/useAdaptivityConditionalRender/types.d.ts +2 -2
  383. package/dist/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
  384. package/dist/hooks/useAnimationFrame.d.ts +16 -0
  385. package/dist/hooks/useAnimationFrame.d.ts.map +1 -0
  386. package/dist/hooks/useAnimationFrame.js +40 -0
  387. package/dist/hooks/useAnimationFrame.js.map +1 -0
  388. package/dist/hooks/useAutoFocus.js +4 -1
  389. package/dist/hooks/useAutoFocus.js.map +1 -1
  390. package/dist/hooks/useColorScheme.d.ts.map +1 -1
  391. package/dist/hooks/useColorScheme.js +3 -3
  392. package/dist/hooks/useColorScheme.js.map +1 -1
  393. package/dist/hooks/useConfigDirection.d.ts.map +1 -1
  394. package/dist/hooks/useConfigDirection.js +3 -3
  395. package/dist/hooks/useConfigDirection.js.map +1 -1
  396. package/dist/hooks/useDateInput.d.ts.map +1 -1
  397. package/dist/hooks/useDateInput.js +1 -2
  398. package/dist/hooks/useDateInput.js.map +1 -1
  399. package/dist/hooks/useFocusTrap/useAutoFocus.js +1 -0
  400. package/dist/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
  401. package/dist/hooks/useFocusTrap/useFocusTrap.d.ts.map +1 -1
  402. package/dist/hooks/useFocusTrap/useFocusTrap.js +2 -0
  403. package/dist/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  404. package/dist/hooks/useFocusVisible.d.ts.map +1 -1
  405. package/dist/hooks/useFocusVisible.js +8 -13
  406. package/dist/hooks/useFocusVisible.js.map +1 -1
  407. package/dist/hooks/useFocusWithin.d.ts.map +1 -1
  408. package/dist/hooks/useFocusWithin.js +5 -4
  409. package/dist/hooks/useFocusWithin.js.map +1 -1
  410. package/dist/hooks/useGlobalEscKeyDown.d.ts.map +1 -1
  411. package/dist/hooks/useGlobalEscKeyDown.js +17 -15
  412. package/dist/hooks/useGlobalEscKeyDown.js.map +1 -1
  413. package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
  414. package/dist/hooks/useGlobalOnClickOutside.js +6 -2
  415. package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
  416. package/dist/hooks/useKeyboardInputTracker.d.ts +1 -19
  417. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  418. package/dist/hooks/useKeyboardInputTracker.js +48 -41
  419. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  420. package/dist/hooks/useLatestRef.d.ts +3 -0
  421. package/dist/hooks/useLatestRef.d.ts.map +1 -0
  422. package/dist/hooks/useLatestRef.js +13 -0
  423. package/dist/hooks/useLatestRef.js.map +1 -0
  424. package/dist/hooks/useLocale.d.ts.map +1 -1
  425. package/dist/hooks/useLocale.js +3 -3
  426. package/dist/hooks/useLocale.js.map +1 -1
  427. package/dist/hooks/useMediaQueryMatch.js +1 -0
  428. package/dist/hooks/useMediaQueryMatch.js.map +1 -1
  429. package/dist/hooks/useMutationObserver.d.ts +1 -2
  430. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  431. package/dist/hooks/useMutationObserver.js +3 -3
  432. package/dist/hooks/useMutationObserver.js.map +1 -1
  433. package/dist/hooks/usePlatform.d.ts.map +1 -1
  434. package/dist/hooks/usePlatform.js +3 -3
  435. package/dist/hooks/usePlatform.js.map +1 -1
  436. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  437. package/dist/hooks/useResizeObserver.js +4 -6
  438. package/dist/hooks/useResizeObserver.js.map +1 -1
  439. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
  440. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  441. package/dist/hooks/useSyncHTMLWithTokens.js +3 -1
  442. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
  443. package/dist/hooks/useWaitTransitionFinish.d.ts.map +1 -1
  444. package/dist/hooks/useWaitTransitionFinish.js +13 -15
  445. package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
  446. package/dist/index.d.ts +1 -0
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +1 -0
  449. package/dist/index.js.map +1 -1
  450. package/dist/lib/array.d.ts +17 -0
  451. package/dist/lib/array.d.ts.map +1 -0
  452. package/dist/lib/array.js +18 -0
  453. package/dist/lib/array.js.map +1 -0
  454. package/dist/lib/curve.d.ts +9 -0
  455. package/dist/lib/curve.d.ts.map +1 -0
  456. package/dist/lib/curve.js +21 -0
  457. package/dist/lib/curve.js.map +1 -0
  458. package/dist/lib/dom.d.ts +2 -1
  459. package/dist/lib/dom.d.ts.map +1 -1
  460. package/dist/lib/dom.js +5 -2
  461. package/dist/lib/dom.js.map +1 -1
  462. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  463. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +4 -4
  464. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  465. package/dist/lib/fx.d.ts +1 -8
  466. package/dist/lib/fx.d.ts.map +1 -1
  467. package/dist/lib/fx.js +4 -55
  468. package/dist/lib/fx.js.map +1 -1
  469. package/dist/lib/layouts/index.d.ts +1 -1
  470. package/dist/lib/layouts/index.d.ts.map +1 -1
  471. package/dist/lib/layouts/index.js.map +1 -1
  472. package/dist/lib/layouts/layoutProps.d.ts +7 -0
  473. package/dist/lib/layouts/layoutProps.d.ts.map +1 -1
  474. package/dist/lib/layouts/layoutProps.js +11 -0
  475. package/dist/lib/layouts/layoutProps.js.map +1 -1
  476. package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -1
  477. package/dist/lib/layouts/resolveLayoutProps.js +13 -11
  478. package/dist/lib/layouts/resolveLayoutProps.js.map +1 -1
  479. package/dist/lib/layouts/types.d.ts +29 -0
  480. package/dist/lib/layouts/types.d.ts.map +1 -1
  481. package/dist/lib/layouts/types.js.map +1 -1
  482. package/dist/lib/material/shapes/Shape.d.ts +8 -0
  483. package/dist/lib/material/shapes/Shape.d.ts.map +1 -0
  484. package/dist/lib/material/shapes/Shape.js +18 -0
  485. package/dist/lib/material/shapes/Shape.js.map +1 -0
  486. package/dist/lib/material/shapes/shapes.d.ts +43 -0
  487. package/dist/lib/material/shapes/shapes.d.ts.map +1 -0
  488. package/dist/lib/material/shapes/shapes.js +2250 -0
  489. package/dist/lib/material/shapes/shapes.js.map +1 -0
  490. package/dist/lib/math.d.ts +23 -0
  491. package/dist/lib/math.d.ts.map +1 -0
  492. package/dist/lib/math.js +31 -0
  493. package/dist/lib/math.js.map +1 -0
  494. package/dist/lib/svg/path/approximate.d.ts +21 -0
  495. package/dist/lib/svg/path/approximate.d.ts.map +1 -0
  496. package/dist/lib/svg/path/approximate.js +57 -0
  497. package/dist/lib/svg/path/approximate.js.map +1 -0
  498. package/dist/lib/svg/path/interpolate.d.ts +5 -0
  499. package/dist/lib/svg/path/interpolate.d.ts.map +1 -0
  500. package/dist/lib/svg/path/interpolate.js +121 -0
  501. package/dist/lib/svg/path/interpolate.js.map +1 -0
  502. package/dist/lib/svg/path/path.d.ts +48 -0
  503. package/dist/lib/svg/path/path.d.ts.map +1 -0
  504. package/dist/lib/svg/path/path.js +50 -0
  505. package/dist/lib/svg/path/path.js.map +1 -0
  506. package/dist/lib/svg/path/point.d.ts +3 -0
  507. package/dist/lib/svg/path/point.d.ts.map +1 -0
  508. package/dist/lib/svg/path/point.js +3 -0
  509. package/dist/lib/svg/path/point.js.map +1 -0
  510. package/dist/lib/svg/path/transform.d.ts +64 -0
  511. package/dist/lib/svg/path/transform.d.ts.map +1 -0
  512. package/dist/lib/svg/path/transform.js +110 -0
  513. package/dist/lib/svg/path/transform.js.map +1 -0
  514. package/dist/lib/tokens/useTokenClassName.d.ts.map +1 -1
  515. package/dist/lib/tokens/useTokenClassName.js +4 -1
  516. package/dist/lib/tokens/useTokenClassName.js.map +1 -1
  517. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  518. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  519. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  520. package/dist/types.d.ts +9 -0
  521. package/dist/types.d.ts.map +1 -1
  522. package/dist/types.js +1 -4
  523. package/dist/types.js.map +1 -1
  524. package/dist/vkui.css +1 -1
  525. package/dist/vkui.css.map +1 -1
  526. package/package.json +7 -6
  527. package/src/components/ActionSheet/ActionSheet.tsx +6 -3
  528. package/src/components/AdaptivityProvider/AdaptivityContext.tsx +3 -3
  529. package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +2 -2
  530. package/src/components/AppRoot/AppRoot.tsx +1 -14
  531. package/src/components/AppRoot/AppRootContext.ts +0 -2
  532. package/src/components/Calendar/Calendar.tsx +2 -2
  533. package/src/components/CalendarDay/CalendarDay.tsx +4 -2
  534. package/src/components/CalendarDays/CalendarDays.tsx +2 -2
  535. package/src/components/CalendarHeader/CalendarHeader.tsx +4 -2
  536. package/src/components/CalendarRange/CalendarRange.tsx +2 -2
  537. package/src/components/CalendarTime/CalendarTime.module.css +38 -0
  538. package/src/components/CalendarTime/CalendarTime.module.css.d.ts.map +1 -1
  539. package/src/components/CalendarTime/CalendarTime.tsx +68 -55
  540. package/src/components/CalendarTime/CalendarTimePicker.tsx +148 -62
  541. package/src/components/CalendarTime/ComboBox.tsx +189 -0
  542. package/src/components/CardScroll/CardScroll.tsx +6 -5
  543. package/src/components/CarouselBase/CarouselBase.tsx +2 -1
  544. package/src/components/ChipsSelect/useChipsSelect.ts +1 -0
  545. package/src/components/ConfigProvider/ConfigProvider.tsx +6 -3
  546. package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -1
  547. package/src/components/ConfigProvider/ConfigProviderSubContexts.tsx +43 -0
  548. package/src/components/ContentBadge/ContentBadge.module.css +84 -91
  549. package/src/components/ContentBadge/ContentBadge.module.css.d.ts.map +1 -1
  550. package/src/components/ContentBadge/ContentBadge.tsx +73 -5
  551. package/src/components/CustomSelect/CustomSelect.tsx +19 -10
  552. package/src/components/DateInput/DateInput.tsx +3 -3
  553. package/src/components/DateRangeInput/DateRangeInput.tsx +2 -2
  554. package/src/components/Epic/ScrollSaver.tsx +1 -0
  555. package/src/components/FixedLayout/ParentWidthWrapper.tsx +48 -0
  556. package/src/components/Flex/Flex.tsx +11 -6
  557. package/src/components/GridAvatar/GridAvatar.module.css +1 -1
  558. package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
  559. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +1 -1
  560. package/src/components/NativeSelect/NativeSelect.tsx +4 -2
  561. package/src/components/NavTransitionContext/NavTransitionContext.tsx +5 -1
  562. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -6
  563. package/src/components/PanelHeader/PanelHeader.tsx +1 -1
  564. package/src/components/Popper/Popper.tsx +8 -5
  565. package/src/components/PullToRefresh/PullToRefresh.module.css +1 -1
  566. package/src/components/PullToRefresh/PullToRefresh.tsx +10 -3
  567. package/src/components/Root/Root.tsx +60 -59
  568. package/src/components/SimpleGrid/SimpleGrid.tsx +25 -11
  569. package/src/components/Skeleton/Skeleton.tsx +6 -4
  570. package/src/components/Snackbar/Snackbar.tsx +6 -3
  571. package/src/components/Spacing/Spacing.tsx +1 -1
  572. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
  573. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css.d.ts.map +1 -0
  574. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.tsx +73 -0
  575. package/src/components/Spinner/ExpressiveSpinner/icons.tsx +104 -0
  576. package/src/components/Spinner/SvgIcon.tsx +31 -0
  577. package/src/components/Spinner/icons.tsx +10 -13
  578. package/src/components/SplitLayout/SplitLayout.tsx +3 -3
  579. package/src/components/TabsItem/TabsItem.tsx +4 -5
  580. package/src/components/Tappable/Tappable.tsx +2 -2
  581. package/src/components/View/View.tsx +83 -89
  582. package/src/components/View/ViewInfinite.tsx +65 -69
  583. package/src/components/WriteBar/WriteBar.tsx +25 -59
  584. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
  585. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css.d.ts.map +1 -0
  586. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.tsx +20 -0
  587. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
  588. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css.d.ts.map +1 -0
  589. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.tsx +22 -0
  590. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
  591. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css.d.ts.map +1 -0
  592. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.tsx +23 -0
  593. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +14 -0
  594. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css.d.ts.map +1 -0
  595. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.tsx +31 -0
  596. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +42 -0
  597. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css.d.ts.map +1 -0
  598. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.tsx +48 -0
  599. package/src/helpers/math.ts +8 -0
  600. package/src/hoc/withPlatform.tsx +3 -3
  601. package/src/hooks/useAdaptivityConditionalRender/types.ts +2 -2
  602. package/src/hooks/useAnimationFrame.tsx +42 -0
  603. package/src/hooks/useAutoFocus.ts +1 -1
  604. package/src/hooks/useColorScheme.ts +3 -4
  605. package/src/hooks/useConfigDirection.ts +3 -4
  606. package/src/hooks/useDateInput.ts +1 -2
  607. package/src/hooks/useFocusTrap/useAutoFocus.ts +1 -1
  608. package/src/hooks/useFocusTrap/useFocusTrap.tsx +2 -0
  609. package/src/hooks/useFocusVisible.ts +10 -18
  610. package/src/hooks/useFocusWithin.ts +26 -23
  611. package/src/hooks/useGlobalEscKeyDown.ts +12 -15
  612. package/src/hooks/useGlobalOnClickOutside.ts +5 -2
  613. package/src/hooks/useKeyboardInputTracker.ts +68 -55
  614. package/src/hooks/useLatestRef.ts +12 -0
  615. package/src/hooks/useLocale.ts +3 -4
  616. package/src/hooks/useMediaQueryMatch.ts +1 -1
  617. package/src/hooks/useMutationObserver.ts +2 -3
  618. package/src/hooks/usePlatform.ts +3 -4
  619. package/src/hooks/useResizeObserver.ts +4 -5
  620. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
  621. package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
  622. package/src/hooks/useWaitTransitionFinish.ts +15 -15
  623. package/src/index.ts +1 -0
  624. package/src/lib/array.ts +19 -0
  625. package/src/lib/curve.ts +36 -0
  626. package/src/lib/dom.tsx +10 -4
  627. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +4 -5
  628. package/src/lib/fx.ts +5 -63
  629. package/src/lib/layouts/index.ts +1 -0
  630. package/src/lib/layouts/layoutProps.ts +8 -0
  631. package/src/lib/layouts/resolveLayoutProps.ts +19 -17
  632. package/src/lib/layouts/types.ts +29 -0
  633. package/src/lib/material/shapes/Shape.tsx +17 -0
  634. package/src/lib/material/shapes/shapes.ts +329 -0
  635. package/src/lib/math.ts +37 -0
  636. package/src/lib/svg/path/approximate.ts +81 -0
  637. package/src/lib/svg/path/interpolate.ts +151 -0
  638. package/src/lib/svg/path/path.ts +102 -0
  639. package/src/lib/svg/path/point.ts +2 -0
  640. package/src/lib/svg/path/transform.ts +147 -0
  641. package/src/lib/tokens/useTokenClassName.ts +7 -5
  642. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  643. package/src/types.ts +16 -0
  644. package/dist/cssm/components/WriteBar/WriteBar.module.css +0 -118
  645. package/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
  646. package/dist/cssm/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
  647. package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts +0 -6
  648. package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.d.ts.map +0 -1
  649. package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js +0 -6
  650. package/dist/lib/floating/LockFloatingPosition/LockFloatingPosition.js.map +0 -1
  651. package/src/components/WriteBar/WriteBar.module.css +0 -116
  652. package/src/components/WriteBar/WriteBar.module.css.d.ts.map +0 -1
  653. package/src/lib/floating/LockFloatingPosition/LockFloatingPosition.tsx +0 -6
@@ -1,61 +1,121 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useState } from "react";
4
3
  import * as React from "react";
5
- import { AdaptivityProvider } from "../AdaptivityProvider/AdaptivityProvider.js";
6
- import { CustomSelect } from "../CustomSelect/CustomSelect.js";
7
- import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption.js";
4
+ import { clamp, overflow } from "../../helpers/math.js";
5
+ import { useBooleanState } from "../../hooks/useBooleanState.js";
6
+ import { useExternRef } from "../../hooks/useExternRef.js";
7
+ import { Keys } from "../../lib/accessibility.js";
8
+ import { isActiveElement } from "../../lib/dom.js";
9
+ import { ComboBox } from "./ComboBox.js";
8
10
  import styles from "./CalendarTime.module.css";
9
- const selectFilterFn = ()=>true;
10
- const validateValue = (value, validValues)=>{
11
- const numValue = Number(value);
12
- return !isNaN(numValue) && validValues.some((v)=>v.value === numValue);
13
- };
14
- /* eslint-enable jsdoc/require-jsdoc */ export const CalendarTimePicker = ({ value, getNumericValue, options, onChange, setTime, inputRef, inputLabel, inputTestId, onInputKeyDown })=>{
15
- const [inputValue, setInputValue] = useState(undefined);
16
- const onBlur = React.useCallback(()=>{
17
- setInputValue(undefined);
11
+ function validateValueInput(event, maxValue) {
12
+ if (event.target.value === '') {
13
+ return event.target.value;
14
+ }
15
+ const inputValue = /\d\d?/.exec(event.target.value)?.[0] || '';
16
+ if (event.target.value !== inputValue) {
17
+ return inputValue;
18
+ }
19
+ const inputValueNumber = Number(inputValue);
20
+ if (isNaN(inputValueNumber)) {
21
+ return '';
22
+ }
23
+ const resultValueNumber = clamp(inputValueNumber, 0, maxValue);
24
+ if (inputValueNumber === resultValueNumber) {
25
+ return inputValue;
26
+ }
27
+ return resultValueNumber.toString();
28
+ }
29
+ export function padStartTimeValue(value) {
30
+ return value.toString().padStart(2, '0');
31
+ }
32
+ function newValueOnInputKeyDown(event, maxValue) {
33
+ if (!(event.target instanceof HTMLInputElement)) {
34
+ return '';
35
+ }
36
+ switch(event.key){
37
+ case Keys.ARROW_UP:
38
+ return padStartTimeValue(overflow(Number(event.target.value) + 1, 0, maxValue));
39
+ case Keys.ARROW_DOWN:
40
+ return padStartTimeValue(overflow(Number(event.target.value) - 1, 0, maxValue));
41
+ }
42
+ return event.target.value;
43
+ }
44
+ /* eslint-enable jsdoc/require-jsdoc */ export const CalendarTimePicker = ({ valueDate, value, options, onChange, setTime, inputRef, inputLabel, inputTestId, maxValue, onInputEnd, onKeyDown: onKeyDownProp, isDayDisabled })=>{
45
+ const ref = useExternRef(inputRef);
46
+ const [isInputFocused, onFocus, setInputBlur] = useBooleanState(false);
47
+ const [editableValue, setEditableValue] = React.useState(padStartTimeValue(value));
48
+ const updateValue = (newValue)=>{
49
+ const newDate = setTime(valueDate, Number(newValue));
50
+ if (isDayDisabled?.(newDate, true)) {
51
+ return;
52
+ }
53
+ setEditableValue(newValue);
54
+ onChange?.(newDate);
55
+ };
56
+ // Обработка ввода
57
+ const onInput = (event)=>{
58
+ const validateValue = validateValueInput(event, maxValue);
59
+ updateValue(validateValue);
60
+ if (validateValue.length > 1 && event.target.selectionStart) {
61
+ onInputEnd?.();
62
+ }
63
+ };
64
+ // Управление числом с клавиатуры стрелками вниз/вверх.
65
+ const onKeyDown = (event)=>{
66
+ const validateValue = newValueOnInputKeyDown(event, maxValue);
67
+ updateValue(validateValue);
68
+ };
69
+ // Обработка каретки если время уже задано
70
+ const onSelectionChange = React.useCallback((event)=>{
71
+ if (event.target instanceof HTMLInputElement) {
72
+ if (event.target.value.length > 1 && isActiveElement(event.target)) {
73
+ event.target.select();
74
+ }
75
+ }
18
76
  }, []);
19
- const _onChange = React.useCallback((_, newValue)=>onChange?.(setTime(value, Number(newValue))), [
20
- onChange,
21
- setTime,
22
- value
77
+ React.useEffect(()=>{
78
+ const el = ref.current;
79
+ el?.addEventListener('selectionchange', onSelectionChange);
80
+ return ()=>{
81
+ el?.removeEventListener('selectionchange', onSelectionChange);
82
+ };
83
+ }, [
84
+ onSelectionChange,
85
+ ref
23
86
  ]);
24
- const onPickerValueChange = (e)=>{
25
- const numericValue = e.target.value.replace(/\D/g, '');
26
- setInputValue(numericValue);
27
- if (validateValue(numericValue, options)) {
28
- onChange?.(setTime(value, Number(numericValue)));
29
- }
87
+ // Обработка ухода с поля ввода
88
+ const onBlur = ()=>{
89
+ setInputBlur();
90
+ setEditableValue((value)=>{
91
+ const newValue = padStartTimeValue(value);
92
+ return newValue;
93
+ });
94
+ };
95
+ // Обработка значения при нажатии в барабане
96
+ const onClickOption = (newValue)=>{
97
+ updateValue(newValue);
30
98
  };
99
+ const valueAsString = padStartTimeValue(value);
100
+ const viewValue = isInputFocused || padStartTimeValue(editableValue) !== valueAsString ? editableValue : valueAsString;
31
101
  return /*#__PURE__*/ _jsx("div", {
32
102
  className: styles.picker,
33
- children: /*#__PURE__*/ _jsx(AdaptivityProvider, {
34
- density: "compact",
35
- children: /*#__PURE__*/ _jsx(CustomSelect, {
36
- value: getNumericValue(value),
37
- options: options,
38
- onChange: _onChange,
39
- forceDropdownPortal: false,
40
- searchable: true,
41
- filterFn: selectFilterFn,
42
- onInputChange: onPickerValueChange,
43
- onInputKeyDown: onInputKeyDown,
44
- renderOption: ({ children: optionChildren, ...optionProps })=>/*#__PURE__*/ _jsx(CustomSelectOption, {
45
- ...optionProps,
46
- textNoWrap: true,
47
- children: optionChildren
48
- }),
49
- slotProps: {
50
- input: {
51
- 'aria-label': inputLabel,
52
- 'data-testid': inputTestId,
53
- 'value': inputValue,
54
- 'getRootRef': inputRef,
55
- onBlur
56
- }
103
+ children: /*#__PURE__*/ _jsx(ComboBox, {
104
+ value: viewValue,
105
+ slotProps: {
106
+ input: {
107
+ 'getRootRef': ref,
108
+ 'aria-label': inputLabel,
109
+ 'data-testid': inputTestId,
110
+ 'onKeyDown': onKeyDownProp
57
111
  }
58
- })
112
+ },
113
+ labels: options,
114
+ onChange: onInput,
115
+ onKeyDown: onKeyDown,
116
+ onClickOption: onClickOption,
117
+ onFocus: onFocus,
118
+ onBlur: onBlur
59
119
  })
60
120
  });
61
121
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent, useState } from 'react';\nimport * as React from 'react';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport styles from './CalendarTime.module.css';\n\nconst selectFilterFn = () => true;\n\nconst validateValue = (\n value: string,\n validValues: Array<{\n value: number;\n label: string;\n }>,\n): boolean => {\n const numValue = Number(value);\n return !isNaN(numValue) && validValues.some((v) => v.value === numValue);\n};\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface CalendarTimePickerProps extends Pick<SelectProps, 'onInputKeyDown'> {\n value: Date;\n getNumericValue: (date: Date) => number;\n options: Array<{\n value: number;\n label: string;\n }>;\n onChange?: ((value: Date) => void) | undefined;\n setTime: (value: Date, time: number) => Date;\n inputRef: React.Ref<HTMLInputElement>;\n inputLabel?: string | undefined;\n inputTestId?: string | undefined;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const CalendarTimePicker = ({\n value,\n getNumericValue,\n options,\n onChange,\n setTime,\n inputRef,\n inputLabel,\n inputTestId,\n onInputKeyDown,\n}: CalendarTimePickerProps) => {\n const [inputValue, setInputValue] = useState<string | undefined>(undefined);\n\n const onBlur = React.useCallback(() => {\n setInputValue(undefined);\n }, []);\n\n const _onChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange?.(setTime(value, Number(newValue))),\n [onChange, setTime, value],\n );\n\n const onPickerValueChange = (e: ChangeEvent<HTMLInputElement>) => {\n const numericValue = e.target.value.replace(/\\D/g, '');\n setInputValue(numericValue);\n if (validateValue(numericValue, options)) {\n onChange?.(setTime(value, Number(numericValue)));\n }\n };\n\n return (\n <div className={styles.picker}>\n <AdaptivityProvider density=\"compact\">\n <CustomSelect\n value={getNumericValue(value)}\n options={options}\n onChange={_onChange}\n forceDropdownPortal={false}\n searchable\n filterFn={selectFilterFn}\n onInputChange={onPickerValueChange}\n onInputKeyDown={onInputKeyDown}\n renderOption={({ children: optionChildren, ...optionProps }) => (\n <CustomSelectOption {...optionProps} textNoWrap>\n {optionChildren}\n </CustomSelectOption>\n )}\n slotProps={{\n input: {\n 'aria-label': inputLabel,\n 'data-testid': inputTestId,\n 'value': inputValue,\n 'getRootRef': inputRef,\n onBlur,\n },\n }}\n />\n </AdaptivityProvider>\n </div>\n );\n};\n"],"names":["useState","React","AdaptivityProvider","CustomSelect","CustomSelectOption","styles","selectFilterFn","validateValue","value","validValues","numValue","Number","isNaN","some","v","CalendarTimePicker","getNumericValue","options","onChange","setTime","inputRef","inputLabel","inputTestId","onInputKeyDown","inputValue","setInputValue","undefined","onBlur","useCallback","_onChange","_","newValue","onPickerValueChange","e","numericValue","target","replace","div","className","picker","density","forceDropdownPortal","searchable","filterFn","onInputChange","renderOption","children","optionChildren","optionProps","textNoWrap","slotProps","input"],"mappings":"AAAA;;AAEA,SAA2BA,QAAQ,QAAQ,QAAQ;AACnD,YAAYC,WAAW,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,YAAY,QAA0B,kCAA+B;AAC9E,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,iBAAiB,IAAM;AAE7B,MAAMC,gBAAgB,CACpBC,OACAC;IAKA,MAAMC,WAAWC,OAAOH;IACxB,OAAO,CAACI,MAAMF,aAAaD,YAAYI,IAAI,CAAC,CAACC,IAAMA,EAAEN,KAAK,KAAKE;AACjE;AAgBA,qCAAqC,GAErC,OAAO,MAAMK,qBAAqB,CAAC,EACjCP,KAAK,EACLQ,eAAe,EACfC,OAAO,EACPC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,UAAU,EACVC,WAAW,EACXC,cAAc,EACU;IACxB,MAAM,CAACC,YAAYC,cAAc,GAAGzB,SAA6B0B;IAEjE,MAAMC,SAAS1B,MAAM2B,WAAW,CAAC;QAC/BH,cAAcC;IAChB,GAAG,EAAE;IAEL,MAAMG,YAAY5B,MAAM2B,WAAW,CACjC,CAACE,GAAmCC,WAClCb,WAAWC,QAAQX,OAAOG,OAAOoB,aACnC;QAACb;QAAUC;QAASX;KAAM;IAG5B,MAAMwB,sBAAsB,CAACC;QAC3B,MAAMC,eAAeD,EAAEE,MAAM,CAAC3B,KAAK,CAAC4B,OAAO,CAAC,OAAO;QACnDX,cAAcS;QACd,IAAI3B,cAAc2B,cAAcjB,UAAU;YACxCC,WAAWC,QAAQX,OAAOG,OAAOuB;QACnC;IACF;IAEA,qBACE,KAACG;QAAIC,WAAWjC,OAAOkC,MAAM;kBAC3B,cAAA,KAACrC;YAAmBsC,SAAQ;sBAC1B,cAAA,KAACrC;gBACCK,OAAOQ,gBAAgBR;gBACvBS,SAASA;gBACTC,UAAUW;gBACVY,qBAAqB;gBACrBC,UAAU;gBACVC,UAAUrC;gBACVsC,eAAeZ;gBACfT,gBAAgBA;gBAChBsB,cAAc,CAAC,EAAEC,UAAUC,cAAc,EAAE,GAAGC,aAAa,iBACzD,KAAC5C;wBAAoB,GAAG4C,WAAW;wBAAEC,UAAU;kCAC5CF;;gBAGLG,WAAW;oBACTC,OAAO;wBACL,cAAc9B;wBACd,eAAeC;wBACf,SAASE;wBACT,cAAcJ;wBACdO;oBACF;gBACF;;;;AAKV,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/CalendarTime/CalendarTimePicker.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { clamp, overflow } from '../../helpers/math';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { Keys } from '../../lib/accessibility';\nimport { isActiveElement } from '../../lib/dom';\nimport { ComboBox } from './ComboBox';\nimport styles from './CalendarTime.module.css';\n\nfunction validateValueInput(event: React.ChangeEvent<HTMLInputElement>, maxValue: number) {\n if (event.target.value === '') {\n return event.target.value;\n }\n\n const inputValue = /\\d\\d?/.exec(event.target.value)?.[0] || '';\n if (event.target.value !== inputValue) {\n return inputValue;\n }\n\n const inputValueNumber = Number(inputValue);\n if (isNaN(inputValueNumber)) {\n return '';\n }\n\n const resultValueNumber = clamp(inputValueNumber, 0, maxValue);\n\n if (inputValueNumber === resultValueNumber) {\n return inputValue;\n }\n\n return resultValueNumber.toString();\n}\n\nexport function padStartTimeValue(value: Pick<string, 'toString'>): string {\n return value.toString().padStart(2, '0');\n}\n\nfunction newValueOnInputKeyDown(event: React.KeyboardEvent<HTMLInputElement>, maxValue: number) {\n if (!(event.target instanceof HTMLInputElement)) {\n return '';\n }\n\n switch (event.key) {\n case Keys.ARROW_UP:\n return padStartTimeValue(overflow(Number(event.target.value) + 1, 0, maxValue));\n case Keys.ARROW_DOWN:\n return padStartTimeValue(overflow(Number(event.target.value) - 1, 0, maxValue));\n }\n\n return event.target.value;\n}\n\n/* eslint-disable jsdoc/require-jsdoc */\ninterface CalendarTimePickerProps {\n valueDate: Date;\n options: ReadonlyArray<{\n value: string;\n label: string;\n }>;\n onChange?: ((value: Date) => void) | undefined;\n setTime: (value: Date, time: number) => Date;\n inputRef: React.Ref<HTMLInputElement>;\n inputLabel?: string | undefined;\n inputTestId?: string | undefined;\n value: number;\n maxValue: number;\n onInputEnd?: () => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n isDayDisabled?: ((day: Date, withTime?: boolean) => boolean) | undefined;\n}\n/* eslint-enable jsdoc/require-jsdoc */\n\nexport const CalendarTimePicker = ({\n valueDate,\n value,\n options,\n onChange,\n setTime,\n inputRef,\n inputLabel,\n inputTestId,\n maxValue,\n onInputEnd,\n onKeyDown: onKeyDownProp,\n isDayDisabled,\n}: CalendarTimePickerProps) => {\n const ref = useExternRef(inputRef);\n\n const [isInputFocused, onFocus, setInputBlur] = useBooleanState(false);\n\n const [editableValue, setEditableValue] = React.useState(padStartTimeValue(value));\n\n const updateValue = (newValue: string) => {\n const newDate = setTime(valueDate, Number(newValue));\n if (isDayDisabled?.(newDate, true)) {\n return;\n }\n setEditableValue(newValue);\n onChange?.(newDate);\n };\n\n // Обработка ввода\n\n const onInput = (event: React.ChangeEvent<HTMLInputElement>) => {\n const validateValue = validateValueInput(event, maxValue);\n updateValue(validateValue);\n\n if (validateValue.length > 1 && event.target.selectionStart) {\n onInputEnd?.();\n }\n };\n\n // Управление числом с клавиатуры стрелками вниз/вверх.\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const validateValue = newValueOnInputKeyDown(event, maxValue);\n updateValue(validateValue);\n };\n\n // Обработка каретки если время уже задано\n\n const onSelectionChange = React.useCallback((event: Event) => {\n if (event.target instanceof HTMLInputElement) {\n if (event.target.value.length > 1 && isActiveElement(event.target)) {\n event.target.select();\n }\n }\n }, []);\n\n React.useEffect(() => {\n const el = ref.current;\n el?.addEventListener('selectionchange', onSelectionChange);\n\n return () => {\n el?.removeEventListener('selectionchange', onSelectionChange);\n };\n }, [onSelectionChange, ref]);\n\n // Обработка ухода с поля ввода\n\n const onBlur = () => {\n setInputBlur();\n setEditableValue((value) => {\n const newValue = padStartTimeValue(value);\n\n return newValue;\n });\n };\n\n // Обработка значения при нажатии в барабане\n\n const onClickOption = (newValue: string) => {\n updateValue(newValue);\n };\n\n const valueAsString = padStartTimeValue(value);\n\n const viewValue =\n isInputFocused || padStartTimeValue(editableValue) !== valueAsString\n ? editableValue\n : valueAsString;\n\n return (\n <div className={styles.picker}>\n <ComboBox\n value={viewValue}\n slotProps={{\n input: {\n 'getRootRef': ref,\n 'aria-label': inputLabel,\n 'data-testid': inputTestId,\n 'onKeyDown': onKeyDownProp,\n },\n }}\n labels={options}\n onChange={onInput}\n onKeyDown={onKeyDown}\n onClickOption={onClickOption}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n </div>\n );\n};\n"],"names":["React","clamp","overflow","useBooleanState","useExternRef","Keys","isActiveElement","ComboBox","styles","validateValueInput","event","maxValue","target","value","inputValue","exec","inputValueNumber","Number","isNaN","resultValueNumber","toString","padStartTimeValue","padStart","newValueOnInputKeyDown","HTMLInputElement","key","ARROW_UP","ARROW_DOWN","CalendarTimePicker","valueDate","options","onChange","setTime","inputRef","inputLabel","inputTestId","onInputEnd","onKeyDown","onKeyDownProp","isDayDisabled","ref","isInputFocused","onFocus","setInputBlur","editableValue","setEditableValue","useState","updateValue","newValue","newDate","onInput","validateValue","length","selectionStart","onSelectionChange","useCallback","select","useEffect","el","current","addEventListener","removeEventListener","onBlur","onClickOption","valueAsString","viewValue","div","className","picker","slotProps","input","labels"],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { classNames } from "@vkontakte/vkjs";
5
+ import { useBooleanState } from "../../hooks/useBooleanState.js";
6
+ import { useExternRef } from "../../hooks/useExternRef.js";
7
+ import { callMultiple } from "../../lib/callMultiple.js";
8
+ import { CustomScrollView } from "../CustomScrollView/CustomScrollView.js";
9
+ import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption.js";
10
+ import { DropdownIcon } from "../DropdownIcon/DropdownIcon.js";
11
+ import { Input } from "../Input/Input.js";
12
+ import { Popper } from "../Popper/Popper.js";
13
+ import styles from "./CalendarTime.module.css";
14
+ function getScrollParent(node) {
15
+ if (!(node instanceof HTMLElement)) {
16
+ return null;
17
+ }
18
+ if (node.scrollHeight > node.clientHeight) {
19
+ return node;
20
+ } else {
21
+ return getScrollParent(node.parentNode);
22
+ }
23
+ }
24
+ function Option({ option, onClickOption, selectedValue }) {
25
+ const ref = React.useRef(null);
26
+ const selected = selectedValue === option.value;
27
+ React.useEffect(()=>{
28
+ if (!selected) {
29
+ return;
30
+ }
31
+ const element = ref.current;
32
+ const scrollElement = getScrollParent(ref.current);
33
+ if (!element || !scrollElement) {
34
+ return;
35
+ }
36
+ scrollElement.scrollTo({
37
+ top: element.offsetTop - scrollElement.offsetHeight / 2 + element.offsetHeight / 2
38
+ });
39
+ }, [
40
+ selected
41
+ ]);
42
+ return /*#__PURE__*/ _jsx(CustomSelectOption, {
43
+ getRootRef: ref,
44
+ onMouseDown: (event)=>{
45
+ event.preventDefault();
46
+ },
47
+ onClick: ()=>{
48
+ onClickOption?.(option.value);
49
+ },
50
+ selected: selected,
51
+ disabled: option.disabled,
52
+ textNoWrap: true,
53
+ children: option.label
54
+ }, option.value);
55
+ }
56
+ export function ComboBox({ getRootRef, onBlur, onFocus, after, labels = [], defaultValue, slotProps, onClickOption, ...restProps }) {
57
+ const ref = useExternRef(getRootRef);
58
+ const inputRef = useExternRef(slotProps?.input?.getRootRef);
59
+ const [focus, setFocus, setBlur] = useBooleanState(false);
60
+ const [popperPlacement, setPopperPlacement] = React.useState('bottom');
61
+ const labelsElements = focus ? labels.map((option)=>{
62
+ return /*#__PURE__*/ _jsx(Option, {
63
+ onClickOption: onClickOption,
64
+ selectedValue: restProps.value,
65
+ option: option
66
+ }, option.value);
67
+ }) : undefined;
68
+ /**
69
+ * При управлении стрелками необходима правильная очередность элементов в списке.
70
+ */ if (popperPlacement.includes('top')) {
71
+ labelsElements?.reverse();
72
+ }
73
+ return /*#__PURE__*/ _jsxs(_Fragment, {
74
+ children: [
75
+ /*#__PURE__*/ _jsx(Input, {
76
+ getRootRef: ref,
77
+ className: focus ? popperPlacement.includes('top') ? styles.inputPopUp : styles.inputPopDown : '',
78
+ type: "text",
79
+ onFocus: callMultiple(setFocus, onFocus),
80
+ onBlur: callMultiple(setBlur, onBlur),
81
+ onClick: ()=>inputRef.current?.focus(),
82
+ after: after || labels && /*#__PURE__*/ _jsx(DropdownIcon, {
83
+ opened: focus
84
+ }),
85
+ slotProps: {
86
+ ...slotProps,
87
+ input: {
88
+ ...slotProps?.input,
89
+ getRootRef: inputRef
90
+ }
91
+ },
92
+ ...restProps
93
+ }),
94
+ focus && labels && /*#__PURE__*/ _jsx(Popper, {
95
+ targetRef: ref,
96
+ placement: popperPlacement,
97
+ onPlacementChange: setPopperPlacement,
98
+ className: classNames(styles.popper, popperPlacement.includes('top') ? styles.popperTop : styles.popperBottom),
99
+ sameWidth: true,
100
+ autoUpdateOnTargetResize: true,
101
+ flipMiddlewareFallbackAxisSideDirection: "none",
102
+ offsetByMainAxis: 0,
103
+ children: /*#__PURE__*/ _jsx(CustomScrollView, {
104
+ tabIndex: -1,
105
+ className: styles.customScroll,
106
+ children: labelsElements
107
+ })
108
+ })
109
+ ]
110
+ });
111
+ }
112
+
113
+ //# sourceMappingURL=ComboBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/CalendarTime/ComboBox.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { type Placement } from '@vkontakte/vkui-floating-ui/core';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { CustomScrollView } from '../CustomScrollView/CustomScrollView';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { Input, type InputProps } from '../Input/Input';\nimport { Popper } from '../Popper/Popper';\nimport styles from './CalendarTime.module.css';\n\ntype Label = {\n /**\n * Значение.\n */\n value: string;\n /**\n * Лейбл.\n */\n label: string;\n /**\n * Disabled состояние.\n */\n disabled?: boolean;\n};\n\ntype OptionProps = {\n /**\n * Выбранное значение.\n */\n selectedValue: string | number | readonly string[] | undefined;\n /**\n * Опция.\n */\n option: Label;\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nfunction getScrollParent(node: Node | null): HTMLElement | null {\n if (!(node instanceof HTMLElement)) {\n return null;\n }\n\n if (node.scrollHeight > node.clientHeight) {\n return node;\n } else {\n return getScrollParent(node.parentNode);\n }\n}\n\nfunction Option({ option, onClickOption, selectedValue }: OptionProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n const selected = selectedValue === option.value;\n\n React.useEffect(() => {\n if (!selected) {\n return;\n }\n\n const element = ref.current;\n const scrollElement = getScrollParent(ref.current);\n\n if (!element || !scrollElement) {\n return;\n }\n\n scrollElement.scrollTo({\n top: element.offsetTop - scrollElement.offsetHeight / 2 + element.offsetHeight / 2,\n });\n }, [selected]);\n\n return (\n <CustomSelectOption\n getRootRef={ref}\n key={option.value}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n onClickOption?.(option.value);\n }}\n selected={selected}\n disabled={option.disabled}\n textNoWrap\n >\n {option.label}\n </CustomSelectOption>\n );\n}\n\ntype ComboBoxProps = InputProps & {\n // eslint-disable-next-line jsdoc/require-jsdoc\n readonly labels?: readonly Label[] | undefined;\n\n /**\n * Нажатие на элемент.\n */\n onClickOption?: ((value: string) => void) | undefined;\n};\n\nexport function ComboBox({\n getRootRef,\n onBlur,\n onFocus,\n after,\n labels = [],\n defaultValue,\n slotProps,\n onClickOption,\n ...restProps\n}: ComboBoxProps) {\n const ref = useExternRef(getRootRef);\n const inputRef = useExternRef(slotProps?.input?.getRootRef);\n\n const [focus, setFocus, setBlur] = useBooleanState(false);\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>('bottom');\n\n const labelsElements = focus\n ? labels.map((option) => {\n return (\n <Option\n key={option.value}\n onClickOption={onClickOption}\n selectedValue={restProps.value}\n option={option}\n />\n );\n })\n : undefined;\n\n /**\n * При управлении стрелками необходима правильная очередность элементов в списке.\n */\n if (popperPlacement.includes('top')) {\n labelsElements?.reverse();\n }\n\n return (\n <>\n <Input\n getRootRef={ref}\n className={\n focus ? (popperPlacement.includes('top') ? styles.inputPopUp : styles.inputPopDown) : ''\n }\n type=\"text\"\n onFocus={callMultiple(setFocus, onFocus)}\n onBlur={callMultiple(setBlur, onBlur)}\n onClick={() => inputRef.current?.focus()}\n after={after || (labels && <DropdownIcon opened={focus} />)}\n slotProps={{\n ...slotProps,\n input: {\n ...slotProps?.input,\n getRootRef: inputRef,\n },\n }}\n {...restProps}\n />\n\n {focus && labels && (\n <Popper\n targetRef={ref}\n placement={popperPlacement}\n onPlacementChange={setPopperPlacement}\n className={classNames(\n styles.popper,\n popperPlacement.includes('top') ? styles.popperTop : styles.popperBottom,\n )}\n sameWidth\n autoUpdateOnTargetResize\n flipMiddlewareFallbackAxisSideDirection=\"none\"\n offsetByMainAxis={0}\n >\n <CustomScrollView tabIndex={-1} className={styles.customScroll}>\n {labelsElements}\n </CustomScrollView>\n </Popper>\n )}\n </>\n );\n}\n"],"names":["React","classNames","useBooleanState","useExternRef","callMultiple","CustomScrollView","CustomSelectOption","DropdownIcon","Input","Popper","styles","getScrollParent","node","HTMLElement","scrollHeight","clientHeight","parentNode","Option","option","onClickOption","selectedValue","ref","useRef","selected","value","useEffect","element","current","scrollElement","scrollTo","top","offsetTop","offsetHeight","getRootRef","onMouseDown","event","preventDefault","onClick","disabled","textNoWrap","label","ComboBox","onBlur","onFocus","after","labels","defaultValue","slotProps","restProps","inputRef","input","focus","setFocus","setBlur","popperPlacement","setPopperPlacement","useState","labelsElements","map","undefined","includes","reverse","className","inputPopUp","inputPopDown","type","opened","targetRef","placement","onPlacementChange","popper","popperTop","popperBottom","sameWidth","autoUpdateOnTargetResize","flipMiddlewareFallbackAxisSideDirection","offsetByMainAxis","tabIndex","customScroll"],"mappings":"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"}
@@ -3,7 +3,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { classNames } from "@vkontakte/vkjs";
5
5
  import { useConfigDirection } from "../../hooks/useConfigDirection.js";
6
- import { useDOM } from "../../lib/dom.js";
7
6
  import { HorizontalScroll } from "../HorizontalScroll/HorizontalScroll.js";
8
7
  import { RootComponent } from "../RootComponent/RootComponent.js";
9
8
  import styles from "./CardScroll.module.css";
@@ -17,8 +16,8 @@ const stylesSize = {
17
16
  */ export const CardScroll = ({ children, size = 's', showArrows = true, padding = false, CardsListComponent = 'ul', prevButtonTestId, nextButtonTestId, ...restProps })=>{
18
17
  const refContainer = React.useRef(null);
19
18
  const direction = useConfigDirection();
20
- const { window } = useDOM();
21
19
  const getPadding = (container)=>{
20
+ const window = container.ownerDocument.defaultView;
22
21
  return parseFloat(window.getComputedStyle(container).getPropertyValue('--vkui_internal--CardScroll_horizontal_padding'));
23
22
  };
24
23
  const slideOffsetFromStart = (slide)=>{
@@ -31,6 +30,7 @@ const stylesSize = {
31
30
  }
32
31
  const containerWidth = refContainer.current.offsetWidth;
33
32
  const getMarginEnd = (el)=>{
33
+ const window = el.ownerDocument.defaultView;
34
34
  const computedStyles = window.getComputedStyle(el);
35
35
  return parseInt(computedStyles.marginInlineEnd) || (direction === 'rtl' ? parseInt(computedStyles.marginLeft) : parseInt(computedStyles.marginRight)) || 0;
36
36
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CardScroll/CardScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useDOM } from '../../lib/dom';\nimport type { HasComponent, HTMLAttributesWithRootRef } from '../../types';\nimport { HorizontalScroll, type HorizontalScrollProps } from '../HorizontalScroll/HorizontalScroll';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './CardScroll.module.css';\n\nconst stylesSize = {\n s: 'vkuiInternalCardScroll--size-s',\n m: 'vkuiInternalCardScroll--size-m',\n l: 'vkuiInternalCardScroll--size-l',\n};\n\nexport interface CardScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasComponent,\n Pick<HorizontalScrollProps, 'showArrows' | 'prevButtonTestId' | 'nextButtonTestId'> {\n /**\n * При `size=false` ширина `Card` будет регулироваться контентом внутри. В остальных случаях — будет явно задана в процентах.\n */\n size?: 's' | 'm' | 'l' | false | undefined;\n /**\n * Добавляет отступы по краям слева и справа.\n */\n padding?: boolean | undefined;\n /**\n * Позволяет поменять тег используемый для обертки над карточками.\n */\n CardsListComponent?: React.ElementType | undefined;\n}\n\n/**\n * @see https://vkui.io/components/card-scroll\n */\nexport const CardScroll = ({\n children,\n size = 's',\n showArrows = true,\n padding = false,\n CardsListComponent = 'ul',\n prevButtonTestId,\n nextButtonTestId,\n ...restProps\n}: CardScrollProps): React.ReactNode => {\n const refContainer = React.useRef<HTMLDivElement>(null);\n const direction = useConfigDirection();\n\n const { window } = useDOM();\n\n const getPadding = (container: HTMLElement) => {\n return parseFloat(\n window!\n .getComputedStyle(container)\n .getPropertyValue('--vkui_internal--CardScroll_horizontal_padding'),\n );\n };\n\n const slideOffsetFromStart = (slide: HTMLElement) => {\n const containerWidth = refContainer.current?.offsetWidth || 0;\n return direction === 'rtl'\n ? containerWidth - slide.offsetLeft - slide.offsetWidth\n : slide.offsetLeft;\n };\n\n function getScrollToLeft(offset: number): number {\n if (!refContainer.current) {\n return offset;\n }\n const containerWidth = refContainer.current.offsetWidth;\n\n const getMarginEnd = (el: HTMLElement) => {\n const computedStyles = window!.getComputedStyle(el);\n return (\n parseInt(computedStyles.marginInlineEnd) ||\n (direction === 'rtl'\n ? parseInt(computedStyles.marginLeft)\n : parseInt(computedStyles.marginRight)) ||\n 0\n );\n };\n\n const slideIndex = ([...refContainer.current.children] as HTMLElement[]).findIndex(\n (el: HTMLElement) =>\n slideOffsetFromStart(el) + el.offsetWidth + getMarginEnd(el) - offset >= 0,\n );\n\n if (slideIndex === -1) {\n return offset;\n }\n\n const slide = refContainer.current.children[slideIndex] as HTMLElement;\n const padding = getPadding(refContainer.current);\n const scrollTo = slideOffsetFromStart(slide) - (containerWidth - slide.offsetWidth) + padding;\n\n if (scrollTo <= 2 * padding) {\n return 0;\n }\n\n return scrollTo;\n }\n\n function getScrollToRight(offset: number): number {\n if (!refContainer.current) {\n return offset;\n }\n const containerWidth = refContainer.current.offsetWidth;\n const slide = Array.prototype.find.call(refContainer.current.children, (el: HTMLElement) => {\n return slideOffsetFromStart(el) + el.offsetWidth - offset > containerWidth;\n }) as HTMLElement;\n\n if (!slide) {\n return offset;\n }\n\n const padding = getPadding(refContainer.current);\n return slideOffsetFromStart(slide) - padding;\n }\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalCardScroll',\n size !== false && stylesSize[size],\n padding && styles.withPaddings,\n )}\n >\n <HorizontalScroll\n getScrollToLeft={getScrollToLeft}\n getScrollToRight={getScrollToRight}\n showArrows={showArrows}\n prevButtonTestId={prevButtonTestId}\n nextButtonTestId={nextButtonTestId}\n ContentWrapperComponent={CardsListComponent}\n contentWrapperRef={refContainer}\n contentWrapperClassName={styles.in}\n >\n {children}\n </HorizontalScroll>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","useDOM","HorizontalScroll","RootComponent","styles","stylesSize","s","m","l","CardScroll","children","size","showArrows","padding","CardsListComponent","prevButtonTestId","nextButtonTestId","restProps","refContainer","useRef","direction","window","getPadding","container","parseFloat","getComputedStyle","getPropertyValue","slideOffsetFromStart","slide","containerWidth","current","offsetWidth","offsetLeft","getScrollToLeft","offset","getMarginEnd","el","computedStyles","parseInt","marginInlineEnd","marginLeft","marginRight","slideIndex","findIndex","scrollTo","getScrollToRight","Array","prototype","find","call","baseClassName","host","withPaddings","ContentWrapperComponent","contentWrapperRef","contentWrapperClassName","in"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/CardScroll/CardScroll.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport type { HasComponent, HTMLAttributesWithRootRef } from '../../types';\nimport { HorizontalScroll, type HorizontalScrollProps } from '../HorizontalScroll/HorizontalScroll';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './CardScroll.module.css';\n\nconst stylesSize = {\n s: 'vkuiInternalCardScroll--size-s',\n m: 'vkuiInternalCardScroll--size-m',\n l: 'vkuiInternalCardScroll--size-l',\n};\n\nexport interface CardScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasComponent,\n Pick<HorizontalScrollProps, 'showArrows' | 'prevButtonTestId' | 'nextButtonTestId'> {\n /**\n * При `size=false` ширина `Card` будет регулироваться контентом внутри. В остальных случаях — будет явно задана в процентах.\n */\n size?: 's' | 'm' | 'l' | false | undefined;\n /**\n * Добавляет отступы по краям слева и справа.\n */\n padding?: boolean | undefined;\n /**\n * Позволяет поменять тег используемый для обертки над карточками.\n */\n CardsListComponent?: React.ElementType | undefined;\n}\n\n/**\n * @see https://vkui.io/components/card-scroll\n */\nexport const CardScroll = ({\n children,\n size = 's',\n showArrows = true,\n padding = false,\n CardsListComponent = 'ul',\n prevButtonTestId,\n nextButtonTestId,\n ...restProps\n}: CardScrollProps): React.ReactNode => {\n const refContainer = React.useRef<HTMLDivElement>(null);\n const direction = useConfigDirection();\n\n const getPadding = (container: HTMLElement) => {\n const window = container.ownerDocument.defaultView!;\n\n return parseFloat(\n window\n .getComputedStyle(container)\n .getPropertyValue('--vkui_internal--CardScroll_horizontal_padding'),\n );\n };\n\n const slideOffsetFromStart = (slide: HTMLElement) => {\n const containerWidth = refContainer.current?.offsetWidth || 0;\n return direction === 'rtl'\n ? containerWidth - slide.offsetLeft - slide.offsetWidth\n : slide.offsetLeft;\n };\n\n function getScrollToLeft(offset: number): number {\n if (!refContainer.current) {\n return offset;\n }\n const containerWidth = refContainer.current.offsetWidth;\n\n const getMarginEnd = (el: HTMLElement) => {\n const window = el.ownerDocument.defaultView!;\n\n const computedStyles = window.getComputedStyle(el);\n return (\n parseInt(computedStyles.marginInlineEnd) ||\n (direction === 'rtl'\n ? parseInt(computedStyles.marginLeft)\n : parseInt(computedStyles.marginRight)) ||\n 0\n );\n };\n\n const slideIndex = ([...refContainer.current.children] as HTMLElement[]).findIndex(\n (el: HTMLElement) =>\n slideOffsetFromStart(el) + el.offsetWidth + getMarginEnd(el) - offset >= 0,\n );\n\n if (slideIndex === -1) {\n return offset;\n }\n\n const slide = refContainer.current.children[slideIndex] as HTMLElement;\n const padding = getPadding(refContainer.current);\n const scrollTo = slideOffsetFromStart(slide) - (containerWidth - slide.offsetWidth) + padding;\n\n if (scrollTo <= 2 * padding) {\n return 0;\n }\n\n return scrollTo;\n }\n\n function getScrollToRight(offset: number): number {\n if (!refContainer.current) {\n return offset;\n }\n const containerWidth = refContainer.current.offsetWidth;\n const slide = Array.prototype.find.call(refContainer.current.children, (el: HTMLElement) => {\n return slideOffsetFromStart(el) + el.offsetWidth - offset > containerWidth;\n }) as HTMLElement;\n\n if (!slide) {\n return offset;\n }\n\n const padding = getPadding(refContainer.current);\n return slideOffsetFromStart(slide) - padding;\n }\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles.host,\n 'vkuiInternalCardScroll',\n size !== false && stylesSize[size],\n padding && styles.withPaddings,\n )}\n >\n <HorizontalScroll\n getScrollToLeft={getScrollToLeft}\n getScrollToRight={getScrollToRight}\n showArrows={showArrows}\n prevButtonTestId={prevButtonTestId}\n nextButtonTestId={nextButtonTestId}\n ContentWrapperComponent={CardsListComponent}\n contentWrapperRef={refContainer}\n contentWrapperClassName={styles.in}\n >\n {children}\n </HorizontalScroll>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useConfigDirection","HorizontalScroll","RootComponent","styles","stylesSize","s","m","l","CardScroll","children","size","showArrows","padding","CardsListComponent","prevButtonTestId","nextButtonTestId","restProps","refContainer","useRef","direction","getPadding","container","window","ownerDocument","defaultView","parseFloat","getComputedStyle","getPropertyValue","slideOffsetFromStart","slide","containerWidth","current","offsetWidth","offsetLeft","getScrollToLeft","offset","getMarginEnd","el","computedStyles","parseInt","marginInlineEnd","marginLeft","marginRight","slideIndex","findIndex","scrollTo","getScrollToRight","Array","prototype","find","call","baseClassName","host","withPaddings","ContentWrapperComponent","contentWrapperRef","contentWrapperClassName","in"],"mappings":"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"}
@@ -287,7 +287,8 @@ export const CarouselBase = ({ bullets = false, getRootRef, children, slideWidth
287
287
  canSlideLeft: calculateCanSlideLeft(),
288
288
  canSlideRight: calculateCanSlideRight()
289
289
  }));
290
- }, [
290
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
291
+ [
291
292
  slideIndex
292
293
  ]);
293
294
  useIsomorphicLayoutEffect(function updateIsDraggable() {
@@ -299,6 +300,7 @@ export const CarouselBase = ({ bullets = false, getRootRef, children, slideWidth
299
300
  dragDisabled
300
301
  ]);
301
302
  useMutationObserver(layerRef, initializeSlides);
303
+ // eslint-disable-next-line react-hooks/exhaustive-deps
302
304
  useIsomorphicLayoutEffect(initializeSlides, [
303
305
  align,
304
306
  slideWidth,