@vkontakte/vkui 8.1.3 → 8.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) 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/Banner/Banner.d.ts.map +1 -1
  17. package/dist/components/Banner/Banner.js +7 -1
  18. package/dist/components/Banner/Banner.js.map +1 -1
  19. package/dist/components/Calendar/Calendar.d.ts +1 -1
  20. package/dist/components/Calendar/Calendar.js +2 -1
  21. package/dist/components/Calendar/Calendar.js.map +1 -1
  22. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  23. package/dist/components/CalendarDay/CalendarDay.js +4 -2
  24. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  25. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  26. package/dist/components/CalendarDays/CalendarDays.js +2 -2
  27. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  28. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  29. package/dist/components/CalendarHeader/CalendarHeader.js +4 -2
  30. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  31. package/dist/components/CalendarRange/CalendarRange.d.ts +2 -2
  32. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  33. package/dist/components/CalendarTime/CalendarTime.d.ts +1 -1
  34. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  35. package/dist/components/CalendarTime/CalendarTime.js +61 -50
  36. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  37. package/dist/components/CalendarTime/CalendarTimePicker.d.ts +11 -7
  38. package/dist/components/CalendarTime/CalendarTimePicker.d.ts.map +1 -1
  39. package/dist/components/CalendarTime/CalendarTimePicker.js +108 -48
  40. package/dist/components/CalendarTime/CalendarTimePicker.js.map +1 -1
  41. package/dist/components/CalendarTime/ComboBox.d.ts +25 -0
  42. package/dist/components/CalendarTime/ComboBox.d.ts.map +1 -0
  43. package/dist/components/CalendarTime/ComboBox.js +112 -0
  44. package/dist/components/CalendarTime/ComboBox.js.map +1 -0
  45. package/dist/components/CardScroll/CardScroll.d.ts.map +1 -1
  46. package/dist/components/CardScroll/CardScroll.js +2 -2
  47. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  48. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  49. package/dist/components/CarouselBase/CarouselBase.js +3 -1
  50. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  51. package/dist/components/ChipsSelect/useChipsSelect.d.ts.map +1 -1
  52. package/dist/components/ChipsSelect/useChipsSelect.js +2 -1
  53. package/dist/components/ChipsSelect/useChipsSelect.js.map +1 -1
  54. package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
  55. package/dist/components/ConfigProvider/ConfigProvider.js +8 -4
  56. package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
  57. package/dist/components/ConfigProvider/ConfigProviderOverride.d.ts.map +1 -1
  58. package/dist/components/ConfigProvider/ConfigProviderOverride.js +5 -1
  59. package/dist/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  60. package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts +15 -0
  61. package/dist/components/ConfigProvider/ConfigProviderSubContexts.d.ts.map +1 -0
  62. package/dist/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
  63. package/dist/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
  64. package/dist/components/ContentBadge/ContentBadge.d.ts +14 -1
  65. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  66. package/dist/components/ContentBadge/ContentBadge.js +39 -1
  67. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  68. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  69. package/dist/components/CustomSelect/CustomSelect.js +16 -10
  70. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  71. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  72. package/dist/components/DateInput/DateInput.js +4 -3
  73. package/dist/components/DateInput/DateInput.js.map +1 -1
  74. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  75. package/dist/components/DateRangeInput/DateRangeInput.js +2 -2
  76. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  77. package/dist/components/Epic/ScrollSaver.d.ts.map +1 -1
  78. package/dist/components/Epic/ScrollSaver.js +1 -0
  79. package/dist/components/Epic/ScrollSaver.js.map +1 -1
  80. package/dist/components/FixedLayout/ParentWidthWrapper.d.ts +6 -0
  81. package/dist/components/FixedLayout/ParentWidthWrapper.d.ts.map +1 -0
  82. package/dist/components/FixedLayout/ParentWidthWrapper.js +43 -0
  83. package/dist/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
  84. package/dist/components/Flex/Flex.d.ts +7 -4
  85. package/dist/components/Flex/Flex.d.ts.map +1 -1
  86. package/dist/components/Flex/Flex.js +5 -2
  87. package/dist/components/Flex/Flex.js.map +1 -1
  88. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
  89. package/dist/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
  90. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  91. package/dist/components/NativeSelect/NativeSelect.js +6 -2
  92. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  93. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +2 -1
  94. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  95. package/dist/components/PanelHeader/PanelHeader.d.ts +1 -1
  96. package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
  97. package/dist/components/Popper/Popper.js +1 -1
  98. package/dist/components/Popper/Popper.js.map +1 -1
  99. package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
  100. package/dist/components/PullToRefresh/PullToRefresh.js +8 -4
  101. package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
  102. package/dist/components/Root/Root.d.ts +1 -1
  103. package/dist/components/Root/Root.d.ts.map +1 -1
  104. package/dist/components/Root/Root.js +14 -5
  105. package/dist/components/Root/Root.js.map +1 -1
  106. package/dist/components/SimpleGrid/SimpleGrid.d.ts +9 -8
  107. package/dist/components/SimpleGrid/SimpleGrid.d.ts.map +1 -1
  108. package/dist/components/SimpleGrid/SimpleGrid.js +9 -2
  109. package/dist/components/SimpleGrid/SimpleGrid.js.map +1 -1
  110. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  111. package/dist/components/Skeleton/Skeleton.js +3 -4
  112. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  113. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  114. package/dist/components/Snackbar/Snackbar.js +6 -3
  115. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  116. package/dist/components/Spacing/Spacing.d.ts +1 -1
  117. package/dist/components/Spacing/Spacing.js.map +1 -1
  118. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts +10 -0
  119. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.d.ts.map +1 -0
  120. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +54 -0
  121. package/dist/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
  122. package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts +18 -0
  123. package/dist/components/Spinner/ExpressiveSpinner/icons.d.ts.map +1 -0
  124. package/dist/components/Spinner/ExpressiveSpinner/icons.js +79 -0
  125. package/dist/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
  126. package/dist/components/Spinner/SvgIcon.d.ts +14 -0
  127. package/dist/components/Spinner/SvgIcon.d.ts.map +1 -0
  128. package/dist/components/Spinner/SvgIcon.js +20 -0
  129. package/dist/components/Spinner/SvgIcon.js.map +1 -0
  130. package/dist/components/Spinner/icons.d.ts +1 -1
  131. package/dist/components/Spinner/icons.d.ts.map +1 -1
  132. package/dist/components/Spinner/icons.js +10 -23
  133. package/dist/components/Spinner/icons.js.map +1 -1
  134. package/dist/components/SplitLayout/SplitLayout.d.ts +3 -3
  135. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  136. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  137. package/dist/components/TabsItem/TabsItem.js +2 -5
  138. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  139. package/dist/components/Tappable/Tappable.d.ts +2 -2
  140. package/dist/components/Tappable/Tappable.js.map +1 -1
  141. package/dist/components/WriteBar/WriteBar.d.ts +15 -1
  142. package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
  143. package/dist/components/WriteBar/WriteBar.js +35 -63
  144. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  145. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts +5 -0
  146. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.d.ts.map +1 -0
  147. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +15 -0
  148. package/dist/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
  149. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts +8 -0
  150. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.d.ts.map +1 -0
  151. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js +16 -0
  152. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
  153. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts +5 -0
  154. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.d.ts.map +1 -0
  155. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +15 -0
  156. package/dist/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
  157. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts +10 -0
  158. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.d.ts.map +1 -0
  159. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js +16 -0
  160. package/dist/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
  161. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts +10 -0
  162. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.d.ts.map +1 -0
  163. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +39 -0
  164. package/dist/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
  165. package/dist/components.css +1 -1
  166. package/dist/components.css.map +1 -1
  167. package/dist/cssm/components/ActionSheet/ActionSheet.js +2 -1
  168. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  169. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +5 -3
  170. package/dist/cssm/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  171. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +2 -2
  172. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  173. package/dist/cssm/components/AppRoot/AppRoot.js +0 -6
  174. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  175. package/dist/cssm/components/AppRoot/AppRootContext.js +0 -1
  176. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  177. package/dist/cssm/components/Banner/Banner.js +7 -1
  178. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  179. package/dist/cssm/components/Calendar/Calendar.js +2 -1
  180. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  181. package/dist/cssm/components/CalendarDay/CalendarDay.js +4 -2
  182. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  183. package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -2
  184. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  185. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +4 -2
  186. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  187. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  188. package/dist/cssm/components/CalendarTime/CalendarTime.js +61 -50
  189. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  190. package/dist/cssm/components/CalendarTime/CalendarTime.module.css +38 -0
  191. package/dist/cssm/components/CalendarTime/CalendarTimePicker.js +108 -48
  192. package/dist/cssm/components/CalendarTime/CalendarTimePicker.js.map +1 -1
  193. package/dist/cssm/components/CalendarTime/ComboBox.js +113 -0
  194. package/dist/cssm/components/CalendarTime/ComboBox.js.map +1 -0
  195. package/dist/cssm/components/CardScroll/CardScroll.js +2 -2
  196. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  197. package/dist/cssm/components/CarouselBase/CarouselBase.js +3 -1
  198. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  199. package/dist/cssm/components/ChipsSelect/useChipsSelect.js +2 -1
  200. package/dist/cssm/components/ChipsSelect/useChipsSelect.js.map +1 -1
  201. package/dist/cssm/components/ConfigProvider/ConfigProvider.js +8 -4
  202. package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
  203. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js +5 -1
  204. package/dist/cssm/components/ConfigProvider/ConfigProviderOverride.js.map +1 -1
  205. package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js +25 -0
  206. package/dist/cssm/components/ConfigProvider/ConfigProviderSubContexts.js.map +1 -0
  207. package/dist/cssm/components/ContentBadge/ContentBadge.js +39 -1
  208. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  209. package/dist/cssm/components/ContentBadge/ContentBadge.module.css +88 -90
  210. package/dist/cssm/components/CustomSelect/CustomSelect.js +16 -10
  211. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  212. package/dist/cssm/components/DateInput/DateInput.js +4 -3
  213. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  214. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +2 -2
  215. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  216. package/dist/cssm/components/Epic/ScrollSaver.js +1 -0
  217. package/dist/cssm/components/Epic/ScrollSaver.js.map +1 -1
  218. package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js +43 -0
  219. package/dist/cssm/components/FixedLayout/ParentWidthWrapper.js.map +1 -0
  220. package/dist/cssm/components/Flex/Flex.js +5 -2
  221. package/dist/cssm/components/Flex/Flex.js.map +1 -1
  222. package/dist/cssm/components/GridAvatar/GridAvatar.module.css +1 -1
  223. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js +3 -1
  224. package/dist/cssm/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.js.map +1 -1
  225. package/dist/cssm/components/NativeSelect/NativeSelect.js +6 -2
  226. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  227. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +2 -1
  228. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  229. package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
  230. package/dist/cssm/components/Popper/Popper.js +1 -1
  231. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  232. package/dist/cssm/components/PullToRefresh/PullToRefresh.js +8 -4
  233. package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
  234. package/dist/cssm/components/PullToRefresh/PullToRefresh.module.css +1 -1
  235. package/dist/cssm/components/Root/Root.js +14 -5
  236. package/dist/cssm/components/Root/Root.js.map +1 -1
  237. package/dist/cssm/components/SimpleGrid/SimpleGrid.js +9 -2
  238. package/dist/cssm/components/SimpleGrid/SimpleGrid.js.map +1 -1
  239. package/dist/cssm/components/Skeleton/Skeleton.js +3 -4
  240. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  241. package/dist/cssm/components/Snackbar/Snackbar.js +6 -3
  242. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  243. package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
  244. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js +56 -0
  245. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.js.map +1 -0
  246. package/dist/cssm/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
  247. package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js +79 -0
  248. package/dist/cssm/components/Spinner/ExpressiveSpinner/icons.js.map +1 -0
  249. package/dist/cssm/components/Spinner/SvgIcon.js +20 -0
  250. package/dist/cssm/components/Spinner/SvgIcon.js.map +1 -0
  251. package/dist/cssm/components/Spinner/icons.js +10 -23
  252. package/dist/cssm/components/Spinner/icons.js.map +1 -1
  253. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  254. package/dist/cssm/components/TabsItem/TabsItem.js +2 -5
  255. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  256. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  257. package/dist/cssm/components/WriteBar/WriteBar.js +35 -64
  258. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  259. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js +16 -0
  260. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.js.map +1 -0
  261. package/dist/cssm/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
  262. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js +17 -0
  263. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.js.map +1 -0
  264. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
  265. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js +16 -0
  266. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.js.map +1 -0
  267. package/dist/cssm/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
  268. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js +17 -0
  269. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.js.map +1 -0
  270. package/dist/cssm/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +15 -0
  271. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js +40 -0
  272. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.js.map +1 -0
  273. package/dist/cssm/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +43 -0
  274. package/dist/cssm/helpers/math.js +6 -0
  275. package/dist/cssm/helpers/math.js.map +1 -1
  276. package/dist/cssm/hoc/withPlatform.js +3 -2
  277. package/dist/cssm/hoc/withPlatform.js.map +1 -1
  278. package/dist/cssm/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
  279. package/dist/cssm/hooks/useAnimationFrame.js +40 -0
  280. package/dist/cssm/hooks/useAnimationFrame.js.map +1 -0
  281. package/dist/cssm/hooks/useAutoFocus.js +4 -1
  282. package/dist/cssm/hooks/useAutoFocus.js.map +1 -1
  283. package/dist/cssm/hooks/useColorScheme.js +3 -3
  284. package/dist/cssm/hooks/useColorScheme.js.map +1 -1
  285. package/dist/cssm/hooks/useConfigDirection.js +3 -3
  286. package/dist/cssm/hooks/useConfigDirection.js.map +1 -1
  287. package/dist/cssm/hooks/useDateInput.js +1 -2
  288. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  289. package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js +1 -0
  290. package/dist/cssm/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
  291. package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js +2 -0
  292. package/dist/cssm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  293. package/dist/cssm/hooks/useFocusVisible.js +8 -13
  294. package/dist/cssm/hooks/useFocusVisible.js.map +1 -1
  295. package/dist/cssm/hooks/useFocusWithin.js +5 -4
  296. package/dist/cssm/hooks/useFocusWithin.js.map +1 -1
  297. package/dist/cssm/hooks/useGlobalEscKeyDown.js +17 -15
  298. package/dist/cssm/hooks/useGlobalEscKeyDown.js.map +1 -1
  299. package/dist/cssm/hooks/useGlobalOnClickOutside.js +6 -2
  300. package/dist/cssm/hooks/useGlobalOnClickOutside.js.map +1 -1
  301. package/dist/cssm/hooks/useKeyboardInputTracker.js +48 -41
  302. package/dist/cssm/hooks/useKeyboardInputTracker.js.map +1 -1
  303. package/dist/cssm/hooks/useLatestRef.js +13 -0
  304. package/dist/cssm/hooks/useLatestRef.js.map +1 -0
  305. package/dist/cssm/hooks/useLocale.js +3 -3
  306. package/dist/cssm/hooks/useLocale.js.map +1 -1
  307. package/dist/cssm/hooks/useMediaQueryMatch.js +1 -0
  308. package/dist/cssm/hooks/useMediaQueryMatch.js.map +1 -1
  309. package/dist/cssm/hooks/useMutationObserver.js +3 -3
  310. package/dist/cssm/hooks/useMutationObserver.js.map +1 -1
  311. package/dist/cssm/hooks/usePlatform.js +3 -3
  312. package/dist/cssm/hooks/usePlatform.js.map +1 -1
  313. package/dist/cssm/hooks/useResizeObserver.js +4 -6
  314. package/dist/cssm/hooks/useResizeObserver.js.map +1 -1
  315. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
  316. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  317. package/dist/cssm/hooks/useSyncHTMLWithTokens.js +3 -1
  318. package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -1
  319. package/dist/cssm/hooks/useWaitTransitionFinish.js +13 -15
  320. package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
  321. package/dist/cssm/index.js +1 -0
  322. package/dist/cssm/index.js.map +1 -1
  323. package/dist/cssm/lib/array.js +18 -0
  324. package/dist/cssm/lib/array.js.map +1 -0
  325. package/dist/cssm/lib/curve.js +21 -0
  326. package/dist/cssm/lib/curve.js.map +1 -0
  327. package/dist/cssm/lib/dom.js +5 -2
  328. package/dist/cssm/lib/dom.js.map +1 -1
  329. package/dist/cssm/lib/fx.js +4 -55
  330. package/dist/cssm/lib/fx.js.map +1 -1
  331. package/dist/cssm/lib/layouts/index.js.map +1 -1
  332. package/dist/cssm/lib/layouts/layoutProps.js +11 -0
  333. package/dist/cssm/lib/layouts/layoutProps.js.map +1 -1
  334. package/dist/cssm/lib/layouts/resolveLayoutProps.js +13 -11
  335. package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -1
  336. package/dist/cssm/lib/layouts/types.js.map +1 -1
  337. package/dist/cssm/lib/material/shapes/Shape.js +18 -0
  338. package/dist/cssm/lib/material/shapes/Shape.js.map +1 -0
  339. package/dist/cssm/lib/material/shapes/shapes.js +2250 -0
  340. package/dist/cssm/lib/material/shapes/shapes.js.map +1 -0
  341. package/dist/cssm/lib/math.js +31 -0
  342. package/dist/cssm/lib/math.js.map +1 -0
  343. package/dist/cssm/lib/svg/path/approximate.js +57 -0
  344. package/dist/cssm/lib/svg/path/approximate.js.map +1 -0
  345. package/dist/cssm/lib/svg/path/interpolate.js +121 -0
  346. package/dist/cssm/lib/svg/path/interpolate.js.map +1 -0
  347. package/dist/cssm/lib/svg/path/path.js +50 -0
  348. package/dist/cssm/lib/svg/path/path.js.map +1 -0
  349. package/dist/cssm/lib/svg/path/point.js +3 -0
  350. package/dist/cssm/lib/svg/path/point.js.map +1 -0
  351. package/dist/cssm/lib/svg/path/transform.js +110 -0
  352. package/dist/cssm/lib/svg/path/transform.js.map +1 -0
  353. package/dist/cssm/lib/tokens/useTokenClassName.js +4 -1
  354. package/dist/cssm/lib/tokens/useTokenClassName.js.map +1 -1
  355. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  356. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  357. package/dist/cssm/styles/layout.css +273 -0
  358. package/dist/cssm/types.js +1 -4
  359. package/dist/cssm/types.js.map +1 -1
  360. package/dist/helpers/math.d.ts +4 -0
  361. package/dist/helpers/math.d.ts.map +1 -1
  362. package/dist/helpers/math.js +6 -0
  363. package/dist/helpers/math.js.map +1 -1
  364. package/dist/hoc/withPlatform.d.ts +1 -1
  365. package/dist/hoc/withPlatform.d.ts.map +1 -1
  366. package/dist/hoc/withPlatform.js +3 -2
  367. package/dist/hoc/withPlatform.js.map +1 -1
  368. package/dist/hooks/useAdaptivityConditionalRender/types.d.ts +2 -2
  369. package/dist/hooks/useAdaptivityConditionalRender/types.js.map +1 -1
  370. package/dist/hooks/useAnimationFrame.d.ts +16 -0
  371. package/dist/hooks/useAnimationFrame.d.ts.map +1 -0
  372. package/dist/hooks/useAnimationFrame.js +40 -0
  373. package/dist/hooks/useAnimationFrame.js.map +1 -0
  374. package/dist/hooks/useAutoFocus.js +4 -1
  375. package/dist/hooks/useAutoFocus.js.map +1 -1
  376. package/dist/hooks/useColorScheme.d.ts.map +1 -1
  377. package/dist/hooks/useColorScheme.js +3 -3
  378. package/dist/hooks/useColorScheme.js.map +1 -1
  379. package/dist/hooks/useConfigDirection.d.ts.map +1 -1
  380. package/dist/hooks/useConfigDirection.js +3 -3
  381. package/dist/hooks/useConfigDirection.js.map +1 -1
  382. package/dist/hooks/useDateInput.d.ts.map +1 -1
  383. package/dist/hooks/useDateInput.js +1 -2
  384. package/dist/hooks/useDateInput.js.map +1 -1
  385. package/dist/hooks/useFocusTrap/useAutoFocus.js +1 -0
  386. package/dist/hooks/useFocusTrap/useAutoFocus.js.map +1 -1
  387. package/dist/hooks/useFocusTrap/useFocusTrap.d.ts.map +1 -1
  388. package/dist/hooks/useFocusTrap/useFocusTrap.js +2 -0
  389. package/dist/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  390. package/dist/hooks/useFocusVisible.d.ts.map +1 -1
  391. package/dist/hooks/useFocusVisible.js +8 -13
  392. package/dist/hooks/useFocusVisible.js.map +1 -1
  393. package/dist/hooks/useFocusWithin.d.ts.map +1 -1
  394. package/dist/hooks/useFocusWithin.js +5 -4
  395. package/dist/hooks/useFocusWithin.js.map +1 -1
  396. package/dist/hooks/useGlobalEscKeyDown.d.ts.map +1 -1
  397. package/dist/hooks/useGlobalEscKeyDown.js +17 -15
  398. package/dist/hooks/useGlobalEscKeyDown.js.map +1 -1
  399. package/dist/hooks/useGlobalOnClickOutside.d.ts.map +1 -1
  400. package/dist/hooks/useGlobalOnClickOutside.js +6 -2
  401. package/dist/hooks/useGlobalOnClickOutside.js.map +1 -1
  402. package/dist/hooks/useKeyboardInputTracker.d.ts +1 -19
  403. package/dist/hooks/useKeyboardInputTracker.d.ts.map +1 -1
  404. package/dist/hooks/useKeyboardInputTracker.js +48 -41
  405. package/dist/hooks/useKeyboardInputTracker.js.map +1 -1
  406. package/dist/hooks/useLatestRef.d.ts +3 -0
  407. package/dist/hooks/useLatestRef.d.ts.map +1 -0
  408. package/dist/hooks/useLatestRef.js +13 -0
  409. package/dist/hooks/useLatestRef.js.map +1 -0
  410. package/dist/hooks/useLocale.d.ts.map +1 -1
  411. package/dist/hooks/useLocale.js +3 -3
  412. package/dist/hooks/useLocale.js.map +1 -1
  413. package/dist/hooks/useMediaQueryMatch.js +1 -0
  414. package/dist/hooks/useMediaQueryMatch.js.map +1 -1
  415. package/dist/hooks/useMutationObserver.d.ts +1 -2
  416. package/dist/hooks/useMutationObserver.d.ts.map +1 -1
  417. package/dist/hooks/useMutationObserver.js +3 -3
  418. package/dist/hooks/useMutationObserver.js.map +1 -1
  419. package/dist/hooks/usePlatform.d.ts.map +1 -1
  420. package/dist/hooks/usePlatform.js +3 -3
  421. package/dist/hooks/usePlatform.js.map +1 -1
  422. package/dist/hooks/useResizeObserver.d.ts.map +1 -1
  423. package/dist/hooks/useResizeObserver.js +4 -6
  424. package/dist/hooks/useResizeObserver.js.map +1 -1
  425. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +2 -1
  426. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  427. package/dist/hooks/useSyncHTMLWithTokens.js +3 -1
  428. package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -1
  429. package/dist/hooks/useWaitTransitionFinish.d.ts.map +1 -1
  430. package/dist/hooks/useWaitTransitionFinish.js +13 -15
  431. package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
  432. package/dist/index.d.ts +1 -0
  433. package/dist/index.d.ts.map +1 -1
  434. package/dist/index.js +1 -0
  435. package/dist/index.js.map +1 -1
  436. package/dist/lib/array.d.ts +17 -0
  437. package/dist/lib/array.d.ts.map +1 -0
  438. package/dist/lib/array.js +18 -0
  439. package/dist/lib/array.js.map +1 -0
  440. package/dist/lib/curve.d.ts +9 -0
  441. package/dist/lib/curve.d.ts.map +1 -0
  442. package/dist/lib/curve.js +21 -0
  443. package/dist/lib/curve.js.map +1 -0
  444. package/dist/lib/dom.d.ts +2 -1
  445. package/dist/lib/dom.d.ts.map +1 -1
  446. package/dist/lib/dom.js +5 -2
  447. package/dist/lib/dom.js.map +1 -1
  448. package/dist/lib/fx.d.ts +1 -8
  449. package/dist/lib/fx.d.ts.map +1 -1
  450. package/dist/lib/fx.js +4 -55
  451. package/dist/lib/fx.js.map +1 -1
  452. package/dist/lib/layouts/index.d.ts +1 -1
  453. package/dist/lib/layouts/index.d.ts.map +1 -1
  454. package/dist/lib/layouts/index.js.map +1 -1
  455. package/dist/lib/layouts/layoutProps.d.ts +7 -0
  456. package/dist/lib/layouts/layoutProps.d.ts.map +1 -1
  457. package/dist/lib/layouts/layoutProps.js +11 -0
  458. package/dist/lib/layouts/layoutProps.js.map +1 -1
  459. package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -1
  460. package/dist/lib/layouts/resolveLayoutProps.js +13 -11
  461. package/dist/lib/layouts/resolveLayoutProps.js.map +1 -1
  462. package/dist/lib/layouts/types.d.ts +29 -0
  463. package/dist/lib/layouts/types.d.ts.map +1 -1
  464. package/dist/lib/layouts/types.js.map +1 -1
  465. package/dist/lib/material/shapes/Shape.d.ts +8 -0
  466. package/dist/lib/material/shapes/Shape.d.ts.map +1 -0
  467. package/dist/lib/material/shapes/Shape.js +18 -0
  468. package/dist/lib/material/shapes/Shape.js.map +1 -0
  469. package/dist/lib/material/shapes/shapes.d.ts +43 -0
  470. package/dist/lib/material/shapes/shapes.d.ts.map +1 -0
  471. package/dist/lib/material/shapes/shapes.js +2250 -0
  472. package/dist/lib/material/shapes/shapes.js.map +1 -0
  473. package/dist/lib/math.d.ts +23 -0
  474. package/dist/lib/math.d.ts.map +1 -0
  475. package/dist/lib/math.js +31 -0
  476. package/dist/lib/math.js.map +1 -0
  477. package/dist/lib/svg/path/approximate.d.ts +21 -0
  478. package/dist/lib/svg/path/approximate.d.ts.map +1 -0
  479. package/dist/lib/svg/path/approximate.js +57 -0
  480. package/dist/lib/svg/path/approximate.js.map +1 -0
  481. package/dist/lib/svg/path/interpolate.d.ts +5 -0
  482. package/dist/lib/svg/path/interpolate.d.ts.map +1 -0
  483. package/dist/lib/svg/path/interpolate.js +121 -0
  484. package/dist/lib/svg/path/interpolate.js.map +1 -0
  485. package/dist/lib/svg/path/path.d.ts +48 -0
  486. package/dist/lib/svg/path/path.d.ts.map +1 -0
  487. package/dist/lib/svg/path/path.js +50 -0
  488. package/dist/lib/svg/path/path.js.map +1 -0
  489. package/dist/lib/svg/path/point.d.ts +3 -0
  490. package/dist/lib/svg/path/point.d.ts.map +1 -0
  491. package/dist/lib/svg/path/point.js +3 -0
  492. package/dist/lib/svg/path/point.js.map +1 -0
  493. package/dist/lib/svg/path/transform.d.ts +64 -0
  494. package/dist/lib/svg/path/transform.d.ts.map +1 -0
  495. package/dist/lib/svg/path/transform.js +110 -0
  496. package/dist/lib/svg/path/transform.js.map +1 -0
  497. package/dist/lib/tokens/useTokenClassName.d.ts.map +1 -1
  498. package/dist/lib/tokens/useTokenClassName.js +4 -1
  499. package/dist/lib/tokens/useTokenClassName.js.map +1 -1
  500. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  501. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  502. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  503. package/dist/types.d.ts +9 -0
  504. package/dist/types.d.ts.map +1 -1
  505. package/dist/types.js +1 -4
  506. package/dist/types.js.map +1 -1
  507. package/dist/vkui.css +1 -1
  508. package/dist/vkui.css.map +1 -1
  509. package/package.json +7 -6
  510. package/src/components/ActionSheet/ActionSheet.module.css +5 -3
  511. package/src/components/ActionSheet/ActionSheet.module.css.d.ts.map +1 -1
  512. package/src/components/ActionSheet/ActionSheet.tsx +6 -3
  513. package/src/components/AdaptivityProvider/AdaptivityContext.tsx +3 -3
  514. package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +2 -2
  515. package/src/components/AppRoot/AppRoot.tsx +1 -14
  516. package/src/components/AppRoot/AppRootContext.ts +0 -2
  517. package/src/components/Banner/Banner.tsx +8 -5
  518. package/src/components/Calendar/Calendar.tsx +2 -2
  519. package/src/components/CalendarDay/CalendarDay.tsx +4 -2
  520. package/src/components/CalendarDays/CalendarDays.tsx +2 -2
  521. package/src/components/CalendarHeader/CalendarHeader.tsx +4 -2
  522. package/src/components/CalendarRange/CalendarRange.tsx +2 -2
  523. package/src/components/CalendarTime/CalendarTime.module.css +38 -0
  524. package/src/components/CalendarTime/CalendarTime.module.css.d.ts.map +1 -1
  525. package/src/components/CalendarTime/CalendarTime.tsx +68 -55
  526. package/src/components/CalendarTime/CalendarTimePicker.tsx +148 -62
  527. package/src/components/CalendarTime/ComboBox.tsx +189 -0
  528. package/src/components/CardScroll/CardScroll.tsx +6 -5
  529. package/src/components/CarouselBase/CarouselBase.tsx +2 -1
  530. package/src/components/ChipsSelect/useChipsSelect.ts +1 -0
  531. package/src/components/ConfigProvider/ConfigProvider.tsx +6 -3
  532. package/src/components/ConfigProvider/ConfigProviderOverride.tsx +2 -1
  533. package/src/components/ConfigProvider/ConfigProviderSubContexts.tsx +43 -0
  534. package/src/components/ContentBadge/ContentBadge.module.css +84 -91
  535. package/src/components/ContentBadge/ContentBadge.module.css.d.ts.map +1 -1
  536. package/src/components/ContentBadge/ContentBadge.tsx +73 -5
  537. package/src/components/CustomSelect/CustomSelect.tsx +19 -10
  538. package/src/components/DateInput/DateInput.tsx +3 -3
  539. package/src/components/DateRangeInput/DateRangeInput.tsx +2 -2
  540. package/src/components/Epic/ScrollSaver.tsx +1 -0
  541. package/src/components/FixedLayout/ParentWidthWrapper.tsx +48 -0
  542. package/src/components/Flex/Flex.tsx +11 -6
  543. package/src/components/GridAvatar/GridAvatar.module.css +1 -1
  544. package/src/components/GridAvatar/GridAvatar.module.css.d.ts.map +1 -1
  545. package/src/components/ImageBase/ImageBaseFloatElement/ImageBaseFloatElement.tsx +1 -1
  546. package/src/components/NativeSelect/NativeSelect.tsx +4 -2
  547. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +1 -1
  548. package/src/components/PanelHeader/PanelHeader.tsx +1 -1
  549. package/src/components/Popper/Popper.tsx +1 -1
  550. package/src/components/PullToRefresh/PullToRefresh.module.css +1 -1
  551. package/src/components/PullToRefresh/PullToRefresh.tsx +10 -3
  552. package/src/components/Root/Root.tsx +10 -7
  553. package/src/components/SimpleGrid/SimpleGrid.tsx +25 -11
  554. package/src/components/Skeleton/Skeleton.tsx +6 -4
  555. package/src/components/Snackbar/Snackbar.tsx +6 -3
  556. package/src/components/Spacing/Spacing.tsx +1 -1
  557. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css +13 -0
  558. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.module.css.d.ts.map +1 -0
  559. package/src/components/Spinner/ExpressiveSpinner/ExpressiveSpinner.tsx +73 -0
  560. package/src/components/Spinner/ExpressiveSpinner/icons.tsx +104 -0
  561. package/src/components/Spinner/SvgIcon.tsx +31 -0
  562. package/src/components/Spinner/icons.tsx +10 -13
  563. package/src/components/SplitLayout/SplitLayout.tsx +3 -3
  564. package/src/components/TabsItem/TabsItem.tsx +4 -5
  565. package/src/components/Tappable/Tappable.tsx +2 -2
  566. package/src/components/WriteBar/WriteBar.tsx +25 -59
  567. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css +12 -0
  568. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.module.css.d.ts.map +1 -0
  569. package/src/components/WriteBar/WriteBarBeforeOrAfter/WriteBarBeforeOrAfter.tsx +20 -0
  570. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css +18 -0
  571. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.module.css.d.ts.map +1 -0
  572. package/src/components/WriteBar/WriteBarFormField/WriteBarFormField.tsx +22 -0
  573. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css +3 -0
  574. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.module.css.d.ts.map +1 -0
  575. package/src/components/WriteBar/WriteBarFormField/WriteBarFormFieldInlineAfter/WriteBarFormFieldInlineAfter.tsx +23 -0
  576. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css +14 -0
  577. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.module.css.d.ts.map +1 -0
  578. package/src/components/WriteBar/WriteBarRoot/WriteBarRoot.tsx +31 -0
  579. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css +42 -0
  580. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.module.css.d.ts.map +1 -0
  581. package/src/components/WriteBar/WriteBarTextarea/WriteBarTextarea.tsx +48 -0
  582. package/src/helpers/math.ts +8 -0
  583. package/src/hoc/withPlatform.tsx +3 -3
  584. package/src/hooks/useAdaptivityConditionalRender/types.ts +2 -2
  585. package/src/hooks/useAnimationFrame.tsx +42 -0
  586. package/src/hooks/useAutoFocus.ts +1 -1
  587. package/src/hooks/useColorScheme.ts +3 -4
  588. package/src/hooks/useConfigDirection.ts +3 -4
  589. package/src/hooks/useDateInput.ts +1 -2
  590. package/src/hooks/useFocusTrap/useAutoFocus.ts +1 -1
  591. package/src/hooks/useFocusTrap/useFocusTrap.tsx +2 -0
  592. package/src/hooks/useFocusVisible.ts +10 -18
  593. package/src/hooks/useFocusWithin.ts +26 -23
  594. package/src/hooks/useGlobalEscKeyDown.ts +12 -15
  595. package/src/hooks/useGlobalOnClickOutside.ts +5 -2
  596. package/src/hooks/useKeyboardInputTracker.ts +68 -55
  597. package/src/hooks/useLatestRef.ts +12 -0
  598. package/src/hooks/useLocale.ts +3 -4
  599. package/src/hooks/useMediaQueryMatch.ts +1 -1
  600. package/src/hooks/useMutationObserver.ts +2 -3
  601. package/src/hooks/usePlatform.ts +3 -4
  602. package/src/hooks/useResizeObserver.ts +4 -5
  603. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +1 -1
  604. package/src/hooks/useSyncHTMLWithTokens.ts +1 -1
  605. package/src/hooks/useWaitTransitionFinish.ts +15 -15
  606. package/src/index.ts +1 -0
  607. package/src/lib/array.ts +19 -0
  608. package/src/lib/curve.ts +36 -0
  609. package/src/lib/dom.tsx +10 -4
  610. package/src/lib/fx.ts +5 -63
  611. package/src/lib/layouts/index.ts +1 -0
  612. package/src/lib/layouts/layoutProps.ts +8 -0
  613. package/src/lib/layouts/resolveLayoutProps.ts +19 -17
  614. package/src/lib/layouts/types.ts +29 -0
  615. package/src/lib/material/shapes/Shape.tsx +17 -0
  616. package/src/lib/material/shapes/shapes.ts +329 -0
  617. package/src/lib/math.ts +37 -0
  618. package/src/lib/svg/path/approximate.ts +81 -0
  619. package/src/lib/svg/path/interpolate.ts +151 -0
  620. package/src/lib/svg/path/path.ts +102 -0
  621. package/src/lib/svg/path/point.ts +2 -0
  622. package/src/lib/svg/path/transform.ts +147 -0
  623. package/src/lib/tokens/useTokenClassName.ts +7 -5
  624. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  625. package/src/types.ts +16 -0
  626. package/dist/cssm/components/WriteBar/WriteBar.module.css +0 -118
  627. package/src/components/WriteBar/WriteBar.module.css +0 -116
  628. package/src/components/WriteBar/WriteBar.module.css.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport {\n convertDateToTimeZone,\n createDateInTimeZone,\n dateFormatter,\n dateTimeFormatter,\n isMatch,\n parse,\n startOfDay,\n startOfMinute,\n} from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string | undefined;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: ((value?: Date) => void) | undefined;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: ((date: Date | undefined) => React.ReactNode) | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-input\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible = true,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n before,\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n const referenceDate = value ?? (enableTime ? startOfMinute(now) : startOfDay(now));\n const parsed = parse(formattedValue, mask, referenceDate);\n const toUpdate = createDateInTimeZone(parsed, timezone);\n updateValue(toUpdate);\n }\n },\n [enableTime, maxElement, timezone, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value: Date) => {\n if (enableTime) {\n const valueForDisplay = convertDateToTimeZone(value, timezone) as Date;\n setInternalValue(valueForDisplay);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, timezone, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && styles.hasBefore,\n (showCalendarButton || showClearButton) && styles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <React.Fragment>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={\n value\n ? enableTime\n ? dateTimeFormatter.format(value)\n : dateFormatter.format(value)\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden normalize={false}>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n >\n <div ref={focusTrapRootRef}>\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n timezone={timezone}\n {...(calendarTestsProps ?? {})}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","useGlobalEscKeyDown","convertDateToTimeZone","createDateInTimeZone","dateFormatter","dateTimeFormatter","isMatch","parse","startOfDay","startOfMinute","cacheDateTimeFormat","useIsomorphicLayoutEffect","Calendar","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","before","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","focusTrapRootRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","referenceDate","parsed","toUpdate","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","density","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","valueForDisplay","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","format","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","Boolean","ref","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport {\n convertDateToTimeZone,\n createDateInTimeZone,\n dateFormatter,\n dateTimeFormatter,\n isMatch,\n parse,\n startOfDay,\n startOfMinute,\n} from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps, type CalendarTestsProps } from '../Calendar/Calendar';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { useDateInputValue } from './hooks';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nexport type DateInputPropsTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n dayFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n monthFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n yearFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода часа.\n */\n hourFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода минут.\n */\n minuteFieldTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'doneButtonText'\n | 'DoneButton'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateInputPropsTestsProps {\n /**\n * Обработчик изменения выбранной даты.\n */\n onChange?: ((value: Date | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * `aria-label` для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * `aria-label` для поля изменения дня.\n */\n changeDayLabel?: string | undefined;\n /**\n * Обработчик нажатия на кнопку `\"Done\"`. Используется совместно с флагом `enableTime`.\n */\n onApply?: ((value?: Date) => void) | undefined;\n /**\n * Функция для кастомного форматирования отображаемого значения даты.\n * Позволяет переопределить стандартное отображение даты и вернуть собственное представление.\n */\n renderCustomValue?: ((date: Date | undefined) => React.ReactNode) | undefined;\n /**\n * Часовой пояс для отображения даты.\n */\n timezone?: string | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean | undefined /* TODO [>=v9] удалить свойство */;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n max = 31;\n break;\n case 1:\n max = 12;\n break;\n case 2:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n case 3:\n max = 23;\n break;\n case 4:\n max = 59;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarProps['value']) => {\n const newValue = ['', '', '', '', ''];\n if (value) {\n newValue[0] = String(value.getDate()).padStart(2, '0');\n newValue[1] = String(value.getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value.getFullYear()).padStart(4, '0');\n newValue[3] = String(value.getHours()).padStart(2, '0');\n newValue[4] = String(value.getMinutes()).padStart(2, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-input\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n doneButtonText,\n DoneButton,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n accessible = true,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'День',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeHoursLabel = 'Час',\n changeMinutesLabel = 'Минута',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n showNeighboringMonth,\n size,\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n renderDayContent,\n onCalendarOpenChanged,\n calendarTestsProps,\n dayFieldTestId,\n monthFieldTestId,\n yearFieldTestId,\n hourFieldTestId,\n minuteFieldTestId,\n showCalendarButtonTestId,\n clearButtonTestId,\n id,\n onApply,\n renderCustomValue,\n timezone,\n restoreFocus,\n disableFocusTrap,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n 'aria-label': ariaLabel = '',\n before,\n ...props\n}: DateInputProps): React.ReactNode => {\n const daysRef = React.useRef<HTMLSpanElement>(null);\n const monthsRef = React.useRef<HTMLSpanElement>(null);\n const yearsRef = React.useRef<HTMLSpanElement>(null);\n const hoursRef = React.useRef<HTMLSpanElement>(null);\n const minutesRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const { value, updateValue, setInternalValue, getLastUpdatedValue, clearValue } =\n useDateInputValue({\n value: valueProp,\n defaultValue,\n onChange,\n timezone,\n });\n\n const maxElement = enableTime ? 4 : 2;\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n for (let i = 0; i <= maxElement; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n return;\n }\n }\n\n let formattedValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n let mask = 'dd.MM.yyyy';\n if (enableTime) {\n formattedValue += ` ${internalValue[3]}:${internalValue[4]}`;\n mask += ' HH:mm';\n }\n\n if (isMatch(formattedValue, mask)) {\n const now = new Date();\n const referenceDate = value ?? (enableTime ? startOfMinute(now) : startOfDay(now));\n const parsed = parse(formattedValue, mask, referenceDate);\n const toUpdate = createDateInTimeZone(parsed, timezone);\n updateValue(toUpdate);\n }\n },\n [enableTime, maxElement, timezone, updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n [daysRef, monthsRef, yearsRef, hoursRef, minutesRef],\n );\n\n const {\n rootRef,\n calendarRef,\n open,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n closeCalendar,\n toggleCalendar,\n openCalendar,\n handleRestoreFocus,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear: clearValue,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n useIsomorphicLayoutEffect(\n function resetValueOnCloseCalendar() {\n if (!open) {\n setInternalValue(getLastUpdatedValue());\n }\n },\n [open, getLastUpdatedValue, setInternalValue],\n );\n\n const onCalendarChange = React.useCallback(\n (value: Date) => {\n if (enableTime) {\n const valueForDisplay = convertDateToTimeZone(value, timezone) as Date;\n setInternalValue(valueForDisplay);\n return;\n }\n updateValue(value);\n if (closeOnChange) {\n removeFocusFromField();\n }\n },\n [enableTime, timezone, updateValue, closeOnChange, setInternalValue, removeFocusFromField],\n );\n\n const onDoneButtonClick = React.useCallback(() => {\n if (!value) {\n return;\n }\n const newValue = updateValue(value);\n onApply?.(newValue);\n removeFocusFromField();\n }, [onApply, removeFocusFromField, updateValue, value]);\n\n const customValue = React.useMemo(\n () => !open && renderCustomValue?.(value || undefined),\n [open, renderCustomValue, value],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = value\n ? labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(value)\n : null;\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && styles.hasBefore,\n (showCalendarButton || showClearButton) && styles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <React.Fragment>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </React.Fragment>\n }\n disabled={disabled}\n {...props}\n >\n <div className={styles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n tabIndex={readOnly ? 0 : -1}\n name={name}\n value={\n value\n ? enableTime\n ? dateTimeFormatter.format(value)\n : dateFormatter.format(value)\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={classNames(styles.input, customValue && styles.hidden)}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n onClick={showCalendarOnInputAreaClick}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n length={2}\n getRootRef={daysRef}\n index={0}\n onKeyDown={handleKeyDown}\n onElementSelect={setFocusedElement}\n label={changeDayLabel}\n readOnly={readOnly}\n data-testid={dayFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n onKeyDown={handleKeyDown}\n readOnly={readOnly}\n label={changeMonthLabel}\n data-testid={monthFieldTestId}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeYearLabel}\n onKeyDown={handleKeyDown}\n data-testid={yearFieldTestId}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles.inputTimeDivider}> </InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={24}\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeHoursLabel}\n onKeyDown={handleKeyDown}\n data-testid={hourFieldTestId}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={59}\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeMinutesLabel}\n onKeyDown={handleKeyDown}\n data-testid={minuteFieldTestId}\n />\n </React.Fragment>\n )}\n </Text>\n {customValue && (\n <Text className={styles.customValue} aria-hidden normalize={false}>\n {customValue}\n </Text>\n )}\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n autoUpdateOnTargetResize\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? (Boolean(accessible) && handleRestoreFocus)}\n >\n <div ref={focusTrapRootRef}>\n <Calendar\n aria-label={calendarLabel}\n role=\"dialog\"\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onDoneButtonClick={onDoneButtonClick}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n DoneButton={DoneButton}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n showNeighboringMonth={showNeighboringMonth}\n renderDayContent={renderDayContent}\n size={size}\n viewDate={viewDate}\n onHeaderChange={onHeaderChange}\n onNextMonth={onNextMonth}\n onPrevMonth={onPrevMonth}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n minDateTime={minDateTime}\n maxDateTime={maxDateTime}\n timezone={timezone}\n {...(calendarTestsProps ?? {})}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","useGlobalEscKeyDown","useLocale","convertDateToTimeZone","createDateInTimeZone","dateFormatter","dateTimeFormatter","isMatch","parse","startOfDay","startOfMinute","cacheDateTimeFormat","useIsomorphicLayoutEffect","Calendar","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","useDateInputValue","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","doneButtonText","DoneButton","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","accessible","calendarLabel","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","showNeighboringMonth","size","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","renderDayContent","onCalendarOpenChanged","calendarTestsProps","dayFieldTestId","monthFieldTestId","yearFieldTestId","hourFieldTestId","minuteFieldTestId","showCalendarButtonTestId","clearButtonTestId","id","onApply","renderCustomValue","timezone","restoreFocus","disableFocusTrap","readOnly","disableCalendarProp","ariaLabel","before","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","focusTrapRootRef","disableCalendar","updateValue","setInternalValue","getLastUpdatedValue","clearValue","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","now","Date","referenceDate","parsed","toUpdate","refs","useMemo","rootRef","calendarRef","open","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","closeCalendar","toggleCalendar","openCalendar","handleRestoreFocus","onClear","density","handleRootRef","resetValueOnCloseCalendar","onCalendarChange","valueForDisplay","onDoneButtonClick","customValue","undefined","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","format","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","role","aria-labelledby","after","Fragment","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","autoUpdateOnTargetResize","Boolean","ref","aria-label"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"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"}
@@ -8,10 +8,10 @@ import { useDateInput } from "../../hooks/useDateInput.js";
8
8
  import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
9
9
  import { useExternRef } from "../../hooks/useExternRef.js";
10
10
  import { useGlobalEscKeyDown } from "../../hooks/useGlobalEscKeyDown.js";
11
+ import { useLocale } from "../../hooks/useLocale.js";
11
12
  import { dateFormatter, isMatch, parse } from "../../lib/date.js";
12
13
  import { cacheDateTimeFormat } from "../../lib/intlCache.js";
13
14
  import { CalendarRange } from "../CalendarRange/CalendarRange.js";
14
- import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
15
15
  import { FocusTrap } from "../FocusTrap/FocusTrap.js";
16
16
  import { FormField } from "../FormField/FormField.js";
17
17
  import { IconButton } from "../IconButton/IconButton.js";
@@ -182,7 +182,7 @@ const getInternalValue = (value)=>{
182
182
  // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался
183
183
  // на ней, пока помещается.
184
184
  const [calendarPlacement, setCalendarPlacement] = React.useState(calendarPlacementProp);
185
- const { locale } = useConfigProvider();
185
+ const locale = useLocale();
186
186
  const currentDateLabel = React.useMemo(()=>{
187
187
  if (!value) {
188
188
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { dateFormatter, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: dateInputStyles.densityNone,\n compact: dateInputStyles.densityCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string | undefined;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * Label для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string | undefined;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string | undefined;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string | undefined;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string | undefined;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string | undefined;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v9] удалить свойство */ | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n case 3:\n max = 31;\n break;\n case 1:\n case 4:\n max = 12;\n break;\n case 2:\n case 5:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarRangeProps['value']) => {\n const newValue = ['', '', '', '', '', ''];\n if (value?.[0]) {\n newValue[0] = String(value[0].getDate()).padStart(2, '0');\n newValue[1] = String(value[0].getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value[0].getFullYear()).padStart(4, '0');\n }\n if (value?.[1]) {\n newValue[3] = String(value[1].getDate()).padStart(2, '0');\n newValue[4] = String(value[1].getMonth() + 1).padStart(2, '0');\n newValue[5] = String(value[1].getFullYear()).padStart(4, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible = true,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n before,\n ...props\n}: DateRangeInputProps): React.ReactNode => {\n const daysStartRef = React.useRef<HTMLSpanElement>(null);\n const monthsStartRef = React.useRef<HTMLSpanElement>(null);\n const yearsStartRef = React.useRef<HTMLSpanElement>(null);\n const daysEndRef = React.useRef<HTMLSpanElement>(null);\n const monthsEndRef = React.useRef<HTMLSpanElement>(null);\n const yearsEndRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && end > start) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(null), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(startDate),\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && dateInputStyles.hasBefore,\n (showCalendarButton || showClearButton) && dateInputStyles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${\n value[1] ? dateFormatter.format(value[1]) : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={dateInputStyles.input}\n onClick={showCalendarOnInputAreaClick}\n normalize={false}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n >\n <div ref={focusTrapRootRef}>\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","useGlobalEscKeyDown","dateFormatter","isMatch","parse","cacheDateTimeFormat","CalendarRange","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","before","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","focusTrapRootRef","disableCalendar","updateValue","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","density","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","format","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","undefined","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","Boolean","ref","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useLocale } from '../../hooks/useLocale';\nimport { dateFormatter, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { cacheDateTimeFormat } from '../../lib/intlCache';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst labelDateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n} as const;\n\nconst labelDateTimeFormat = /*#__PURE__*/ cacheDateTimeFormat();\n\nconst densityClassNames = {\n none: dateInputStyles.densityNone,\n compact: dateInputStyles.densityCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string | undefined;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string | undefined;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string | undefined;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string | undefined;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Обработчик изменения выбранного промежутка.\n */\n onChange?: ((value: DateRangeType | null) => void) | undefined;\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps | undefined;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto | undefined;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean | undefined;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: ((opened: boolean) => void) | undefined;\n /**\n * Label для календаря.\n */\n calendarLabel?: string | undefined;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string | undefined;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string | undefined;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string | undefined;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string | undefined;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string | undefined;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string | undefined;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string | undefined;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string | undefined;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean | undefined;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: boolean | undefined;\n /**\n * Управление поведением возврата фокуса при закрытии всплывающего окна.\n * @default true\n */\n restoreFocus?: boolean | (() => boolean | HTMLElement) | undefined;\n /**\n * @deprecated Since 8.0.0. Будет удалено в 9.0.0.\n *\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean /* TODO [>=v9] удалить свойство */ | undefined;\n}\n\nconst elementsConfig = (index: number) => {\n let length = 2;\n let min = 1;\n let max = 0;\n\n switch (index) {\n case 0:\n case 3:\n max = 31;\n break;\n case 1:\n case 4:\n max = 12;\n break;\n case 2:\n case 5:\n max = 2100;\n min = 1900;\n length = 4;\n break;\n }\n\n return { length, min, max };\n};\n\nconst getInternalValue = (value: CalendarRangeProps['value']) => {\n const newValue = ['', '', '', '', '', ''];\n if (value?.[0]) {\n newValue[0] = String(value[0].getDate()).padStart(2, '0');\n newValue[1] = String(value[0].getMonth() + 1).padStart(2, '0');\n newValue[2] = String(value[0].getFullYear()).padStart(4, '0');\n }\n if (value?.[1]) {\n newValue[3] = String(value[1].getDate()).padStart(2, '0');\n newValue[4] = String(value[1].getMonth() + 1).padStart(2, '0');\n newValue[5] = String(value[1].getFullYear()).padStart(4, '0');\n }\n return newValue;\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible = true,\n readOnly,\n 'disableCalendar': disableCalendarProp = false,\n before,\n ...props\n}: DateRangeInputProps): React.ReactNode => {\n const daysStartRef = React.useRef<HTMLSpanElement>(null);\n const monthsStartRef = React.useRef<HTMLSpanElement>(null);\n const yearsStartRef = React.useRef<HTMLSpanElement>(null);\n const daysEndRef = React.useRef<HTMLSpanElement>(null);\n const monthsEndRef = React.useRef<HTMLSpanElement>(null);\n const yearsEndRef = React.useRef<HTMLSpanElement>(null);\n const focusTrapRootRef = React.useRef<HTMLDivElement | null>(null);\n\n const disableCalendar = readOnly ? true : disableCalendarProp;\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null>({\n value: valueProp,\n defaultValue: defaultValue as DateRangeType | null,\n onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && end > start) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(null), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { density = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const locale = useLocale();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(startDate),\n labelDateTimeFormat(locale, labelDateTimeFormatOptions).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n const showCalendarButton = !disableCalendar && (accessible || (!accessible && !value));\n const showClearButton = value && !readOnly;\n\n useGlobalEscKeyDown(open && !disableCalendar, closeCalendar, {\n capture: false,\n });\n\n return (\n <FormField\n style={style}\n className={classNames(\n density !== 'regular' && densityClassNames[density],\n !!before && dateInputStyles.hasBefore,\n (showCalendarButton || showClearButton) && dateInputStyles.hasAfter,\n className,\n )}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n before={before}\n after={\n <>\n {showCalendarButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {showClearButton ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${\n value[1] ? dateFormatter.format(value[1]) : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={dateInputStyles.input}\n onClick={showCalendarOnInputAreaClick}\n normalize={false}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n rootRef={focusTrapRootRef}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n >\n <div ref={focusTrapRootRef}>\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </div>\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","useGlobalEscKeyDown","useLocale","dateFormatter","isMatch","parse","cacheDateTimeFormat","CalendarRange","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","labelDateTimeFormatOptions","weekday","year","month","day","labelDateTimeFormat","densityClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","before","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","focusTrapRootRef","disableCalendar","updateValue","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","density","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","format","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","showCalendarButton","showClearButton","capture","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","Component","aria-hidden","tabIndex","onFocus","normalize","minValue","maxValue","onKeyDown","undefined","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","Boolean","ref","aria-label"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollSaver.d.ts","sourceRoot":"","sources":["../../../src/components/Epic/ScrollSaver.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC;CACjD;AAED,eAAO,MAAM,WAAW,GAAI,0CAIzB,gBAAgB,KAAG,KAAK,CAAC,SAS3B,CAAC"}
1
+ {"version":3,"file":"ScrollSaver.d.ts","sourceRoot":"","sources":["../../../src/components/Epic/ScrollSaver.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC;CACjD;AAED,eAAO,MAAM,WAAW,GAAI,0CAIzB,gBAAgB,KAAG,KAAK,CAAC,SAU3B,CAAC"}
@@ -10,6 +10,7 @@ export const ScrollSaver = ({ children, initialScroll, saveScroll })=>{
10
10
  scrollTo(0, initialScroll);
11
11
  }
12
12
  return ()=>saveScroll(getScroll().y);
13
+ // eslint-disable-next-line react-hooks/exhaustive-deps
13
14
  }, []);
14
15
  return /*#__PURE__*/ _jsx(React.Fragment, {
15
16
  children: children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Epic/ScrollSaver.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasChildren } from '../../types';\nimport { ScrollContext } from '../AppRoot/ScrollContext';\n\nexport interface ScrollSaverProps extends HasChildren {\n initialScroll?: number | undefined;\n saveScroll: (this: void, scroll: number) => any;\n}\n\nexport const ScrollSaver = ({\n children,\n initialScroll,\n saveScroll,\n}: ScrollSaverProps): React.ReactNode => {\n const { getScroll, scrollTo } = React.useContext(ScrollContext);\n useIsomorphicLayoutEffect(() => {\n if (typeof initialScroll === 'number') {\n scrollTo(0, initialScroll);\n }\n return () => saveScroll(getScroll().y);\n }, []);\n return <React.Fragment>{children}</React.Fragment>;\n};\n"],"names":["React","useIsomorphicLayoutEffect","ScrollContext","ScrollSaver","children","initialScroll","saveScroll","getScroll","scrollTo","useContext","y","Fragment"],"mappings":"AAAA;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAASC,aAAa,QAAQ,8BAA2B;AAOzD,OAAO,MAAMC,cAAc,CAAC,EAC1BC,QAAQ,EACRC,aAAa,EACbC,UAAU,EACO;IACjB,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGR,MAAMS,UAAU,CAACP;IACjDD,0BAA0B;QACxB,IAAI,OAAOI,kBAAkB,UAAU;YACrCG,SAAS,GAAGH;QACd;QACA,OAAO,IAAMC,WAAWC,YAAYG,CAAC;IACvC,GAAG,EAAE;IACL,qBAAO,KAACV,MAAMW,QAAQ;kBAAEP;;AAC1B,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Epic/ScrollSaver.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasChildren } from '../../types';\nimport { ScrollContext } from '../AppRoot/ScrollContext';\n\nexport interface ScrollSaverProps extends HasChildren {\n initialScroll?: number | undefined;\n saveScroll: (this: void, scroll: number) => any;\n}\n\nexport const ScrollSaver = ({\n children,\n initialScroll,\n saveScroll,\n}: ScrollSaverProps): React.ReactNode => {\n const { getScroll, scrollTo } = React.useContext(ScrollContext);\n useIsomorphicLayoutEffect(() => {\n if (typeof initialScroll === 'number') {\n scrollTo(0, initialScroll);\n }\n return () => saveScroll(getScroll().y);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return <React.Fragment>{children}</React.Fragment>;\n};\n"],"names":["React","useIsomorphicLayoutEffect","ScrollContext","ScrollSaver","children","initialScroll","saveScroll","getScroll","scrollTo","useContext","y","Fragment"],"mappings":"AAAA;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,yBAAyB,QAAQ,yCAAsC;AAEhF,SAASC,aAAa,QAAQ,8BAA2B;AAOzD,OAAO,MAAMC,cAAc,CAAC,EAC1BC,QAAQ,EACRC,aAAa,EACbC,UAAU,EACO;IACjB,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGR,MAAMS,UAAU,CAACP;IACjDD,0BAA0B;QACxB,IAAI,OAAOI,kBAAkB,UAAU;YACrCG,SAAS,GAAGH;QACd;QACA,OAAO,IAAMC,WAAWC,YAAYG,CAAC;IACrC,uDAAuD;IACzD,GAAG,EAAE;IACL,qBAAO,KAACV,MAAMW,QAAQ;kBAAEP;;AAC1B,EAAE"}
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import type { HasComponent } from '../../types';
3
+ type ParentWidthWrapperProps = React.HTMLAttributes<HTMLElement> & HasComponent;
4
+ export declare const ParentWidthWrapper: React.ForwardRefExoticComponent<React.PropsWithoutRef<ParentWidthWrapperProps> & React.RefAttributes<HTMLElement>>;
5
+ export {};
6
+ //# sourceMappingURL=ParentWidthWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParentWidthWrapper.d.ts","sourceRoot":"","sources":["../../../src/components/FixedLayout/ParentWidthWrapper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,uBAAuB,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAEhF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,yBAAyB,CAC9D,KAAK,CAAC,eAAe,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAgClF,CAAC"}
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useResizeObserver } from "../../hooks/useResizeObserver.js";
5
+ import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
6
+ import { setRef } from "../../lib/utils.js";
7
+ export const ParentWidthWrapper = /*#__PURE__*/ React.forwardRef(({ Component = 'div', style, ...restProps }, forwardedRef)=>{
8
+ const rootRef = React.useRef(null);
9
+ const parentRef = React.useRef(null);
10
+ const [width, setWidth] = React.useState(undefined);
11
+ const handleRootRef = React.useCallback((node)=>{
12
+ setRef(node, forwardedRef);
13
+ setRef(node, rootRef);
14
+ setRef(node?.parentElement ?? null, parentRef);
15
+ }, [
16
+ forwardedRef
17
+ ]);
18
+ const doResize = React.useCallback(()=>{
19
+ if (!parentRef.current) {
20
+ setWidth(undefined);
21
+ return;
22
+ }
23
+ const parentWidth = parentRef.current.getBoundingClientRect().width;
24
+ setWidth(parentWidth ? `${parentWidth}px` : undefined);
25
+ }, []);
26
+ React.useEffect(doResize, [
27
+ doResize
28
+ ]);
29
+ useResizeObserver(parentRef, doResize);
30
+ return /*#__PURE__*/ _jsx(Component, {
31
+ ...restProps,
32
+ ref: handleRootRef,
33
+ style: {
34
+ width,
35
+ ...style
36
+ }
37
+ });
38
+ });
39
+ if (process.env.NODE_ENV !== 'production') {
40
+ defineComponentDisplayNames(ParentWidthWrapper, 'ParentWidthWrapper');
41
+ }
42
+
43
+ //# sourceMappingURL=ParentWidthWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/FixedLayout/ParentWidthWrapper.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useResizeObserver } from '../../hooks/useResizeObserver';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport { setRef } from '../../lib/utils';\nimport type { HasComponent } from '../../types';\n\ntype ParentWidthWrapperProps = React.HTMLAttributes<HTMLElement> & HasComponent;\n\nexport const ParentWidthWrapper: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<ParentWidthWrapperProps> & React.RefAttributes<HTMLElement>\n // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\n> = React.forwardRef<HTMLElement, ParentWidthWrapperProps>(\n ({ Component = 'div', style, ...restProps }, forwardedRef) => {\n const rootRef = React.useRef<HTMLElement | null>(null);\n const parentRef = React.useRef<HTMLElement | null>(null);\n const [width, setWidth] = React.useState<string | undefined>(undefined);\n\n const handleRootRef = React.useCallback(\n (node: HTMLElement | null) => {\n setRef(node, forwardedRef);\n setRef(node, rootRef);\n setRef(node?.parentElement ?? null, parentRef);\n },\n [forwardedRef],\n );\n\n const doResize = React.useCallback(() => {\n if (!parentRef.current) {\n setWidth(undefined);\n return;\n }\n\n const parentWidth = parentRef.current.getBoundingClientRect().width;\n setWidth(parentWidth ? `${parentWidth}px` : undefined);\n }, []);\n\n React.useEffect(doResize, [doResize]);\n useResizeObserver(parentRef, doResize);\n\n return <Component {...restProps} ref={handleRootRef} style={{ width, ...style }} />;\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(ParentWidthWrapper, 'ParentWidthWrapper');\n}\n"],"names":["React","useResizeObserver","defineComponentDisplayNames","setRef","ParentWidthWrapper","forwardRef","Component","style","restProps","forwardedRef","rootRef","useRef","parentRef","width","setWidth","useState","undefined","handleRootRef","useCallback","node","parentElement","doResize","current","parentWidth","getBoundingClientRect","useEffect","ref","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,2BAA2B,QAAQ,iDAA8C;AAC1F,SAASC,MAAM,QAAQ,qBAAkB;AAKzC,OAAO,MAAMC,mCAGTJ,MAAMK,UAAU,CAClB,CAAC,EAAEC,YAAY,KAAK,EAAEC,KAAK,EAAE,GAAGC,WAAW,EAAEC;IAC3C,MAAMC,UAAUV,MAAMW,MAAM,CAAqB;IACjD,MAAMC,YAAYZ,MAAMW,MAAM,CAAqB;IACnD,MAAM,CAACE,OAAOC,SAAS,GAAGd,MAAMe,QAAQ,CAAqBC;IAE7D,MAAMC,gBAAgBjB,MAAMkB,WAAW,CACrC,CAACC;QACChB,OAAOgB,MAAMV;QACbN,OAAOgB,MAAMT;QACbP,OAAOgB,MAAMC,iBAAiB,MAAMR;IACtC,GACA;QAACH;KAAa;IAGhB,MAAMY,WAAWrB,MAAMkB,WAAW,CAAC;QACjC,IAAI,CAACN,UAAUU,OAAO,EAAE;YACtBR,SAASE;YACT;QACF;QAEA,MAAMO,cAAcX,UAAUU,OAAO,CAACE,qBAAqB,GAAGX,KAAK;QACnEC,SAASS,cAAc,GAAGA,YAAY,EAAE,CAAC,GAAGP;IAC9C,GAAG,EAAE;IAELhB,MAAMyB,SAAS,CAACJ,UAAU;QAACA;KAAS;IACpCpB,kBAAkBW,WAAWS;IAE7B,qBAAO,KAACf;QAAW,GAAGE,SAAS;QAAEkB,KAAKT;QAAeV,OAAO;YAAEM;YAAO,GAAGN,KAAK;QAAC;;AAChF,GACA;AAEF,IAAIoB,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzC3B,4BAA4BE,oBAAoB;AAClD"}
@@ -1,10 +1,10 @@
1
1
  import { type GapsProp } from '../../lib/layouts';
2
- import type { LayoutProps } from '../../lib/layouts/types';
2
+ import type { LayoutProps, MarginProp } from '../../lib/layouts/types';
3
3
  import type { RootComponentProps } from '../RootComponent/RootComponent';
4
4
  import { FlexItem, type FlexItemProps } from './FlexItem/FlexItem';
5
5
  export type { FlexItemProps };
6
6
  type FlexContentProps = 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly';
7
- export interface FlexProps extends RootComponentProps<HTMLElement>, LayoutProps {
7
+ export interface FlexProps extends RootComponentProps<HTMLElement>, Omit<LayoutProps, 'margin'> {
8
8
  /**
9
9
  * Направление осей, эквивалентно `flex-direction`.
10
10
  */
@@ -28,9 +28,12 @@ export interface FlexProps extends RootComponentProps<HTMLElement>, LayoutProps
28
28
  */
29
29
  justify?: FlexContentProps | undefined;
30
30
  /**
31
- * Значение `auto` позволяет задать платформенные отступы вокруг контейнера.
31
+ * Внешние отступы контейнера.
32
+ * Дополнительно поддерживаются специальные значения:
33
+ * `none` — отключает дополнительные отступы;
34
+ * `auto` — включает платформенные отступы вокруг контейнера.
32
35
  */
33
- margin?: 'none' | 'auto' | undefined;
36
+ margin?: 'none' | 'auto' | MarginProp | undefined;
34
37
  /**
35
38
  * Для инвертирования направления, эквивалентно `row-reverse` `column-reverse`.
36
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/Flex/Flex.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGnE,YAAY,EAAE,aAAa,EAAE,CAAC;AAwB9B,KAAK,gBAAgB,GACjB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,cAAc,GACd,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,WAAW,SAAU,SAAQ,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW;IAC7E;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC;;;;OAIG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACxE;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CACvD;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC;;;OAGG;IACH,IAAI,EAAE,OAAO,QAAQ,CAAC;CAgCvB,CAAC"}
1
+ {"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/Flex/Flex.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGnE,YAAY,EAAE,aAAa,EAAE,CAAC;AAwB9B,KAAK,gBAAgB,GACjB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,cAAc,GACd,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,WAAW,SAAU,SAAQ,kBAAkB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC7F;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC;;;;OAIG;IACH,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACxE;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAClD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CACvD;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC;;;OAGG;IACH,IAAI,EAAE,OAAO,QAAQ,CAAC;CAkCvB,CAAC"}
@@ -26,9 +26,12 @@ const displayClassNames = {
26
26
  * @see https://vkui.io/components/flex
27
27
  */ export const Flex = ({ gap = 0, align, justify, margin = 'none', noWrap = false, direction = 'row', reverse = false, display = 'flex', ...restProps })=>{
28
28
  const [rowGap, columnGap] = calculateGap(gap);
29
- const resolvedProps = resolveLayoutProps(restProps);
29
+ const resolvedProps = resolveLayoutProps(margin === 'none' || margin === 'auto' ? restProps : {
30
+ ...restProps,
31
+ margin
32
+ });
30
33
  return /*#__PURE__*/ _jsx(RootComponent, {
31
- baseClassName: classNames("vkuiFlex__host", !noWrap && "vkuiFlex__wrap", reverse && "vkuiFlex__reverse", direction !== 'row' && "vkuiFlex__directionColumn", margin !== 'none' && "vkuiFlex__marginAuto", align && alignClassNames[align], justify && justifyClassNames[justify], getGapsPresets(rowGap, columnGap), display !== 'flex' && displayClassNames[display]),
34
+ baseClassName: classNames("vkuiFlex__host", !noWrap && "vkuiFlex__wrap", reverse && "vkuiFlex__reverse", direction !== 'row' && "vkuiFlex__directionColumn", margin === 'auto' && "vkuiFlex__marginAuto", align && alignClassNames[align], justify && justifyClassNames[justify], getGapsPresets(rowGap, columnGap), display !== 'flex' && displayClassNames[display]),
32
35
  baseStyle: getGapsByUser(rowGap, columnGap),
33
36
  ...resolvedProps
34
37
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Flex/Flex.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport {\n calculateGap,\n columnGapClassNames,\n type GapProp,\n type GapsProp,\n resolveLayoutProps,\n rowGapClassNames,\n} from '../../lib/layouts';\nimport type { LayoutProps } from '../../lib/layouts/types';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { RootComponentProps } from '../RootComponent/RootComponent';\nimport { FlexItem, type FlexItemProps } from './FlexItem/FlexItem';\nimport styles from './Flex.module.css';\n\nexport type { FlexItemProps };\n\nconst justifyClassNames = {\n 'start': styles.justifyStart,\n 'end': styles.justifyEnd,\n 'center': styles.justifyCenter,\n 'space-around': styles.justifySpaceAround,\n 'space-between': styles.justifySpaceBetween,\n 'space-evenly': styles.justifySpaceEvenly,\n};\n\nconst alignClassNames = {\n start: styles.alignStart,\n end: styles.alignEnd,\n center: styles.alignCenter,\n stretch: styles.alignStretch,\n baseline: styles.alignBaseline,\n};\n\nconst displayClassNames = {\n 'none': styles.displayNone,\n 'inline-flex': styles.displayInlineFlex,\n};\n\ntype FlexContentProps =\n | 'start'\n | 'end'\n | 'center'\n | 'space-around'\n | 'space-between'\n | 'space-evenly';\n\nexport interface FlexProps extends RootComponentProps<HTMLElement>, LayoutProps {\n /**\n * Направление осей, эквивалентно `flex-direction`.\n */\n direction?: 'row' | 'column' | undefined;\n /**\n * Отступы между элементами.\n * Значение из списка предопределённых пресетов или число, которое будет приведено к пикселям.\n * Через массив можно задать отступ между столбцами и строками [row, column], если они отличаются.\n */\n gap?: GapsProp | undefined;\n /**\n * Отключает перенос контента, эквивалентно `flex-wrap=nowrap`.\n */\n noWrap?: boolean | undefined;\n /**\n * Выравнивание элементов по вспомогательной оси, эквивалентно `align-items`.\n */\n align?: 'start' | 'end' | 'center' | 'stretch' | 'baseline' | undefined;\n /**\n * Выравнивание элементов по главной оси, эквивалентно `justify-content`.\n */\n justify?: FlexContentProps | undefined;\n /**\n * Значение `auto` позволяет задать платформенные отступы вокруг контейнера.\n */\n margin?: 'none' | 'auto' | undefined;\n /**\n * Для инвертирования направления, эквивалентно `row-reverse` `column-reverse`.\n */\n reverse?: boolean | undefined;\n /**\n * Возможность задать css-свойство `display`.\n */\n display?: 'none' | 'flex' | 'inline-flex' | undefined;\n}\n\n/**\n * @see https://vkui.io/components/flex\n */\nexport const Flex: React.FC<FlexProps> & {\n /**\n * @deprecated Since 7.11.0. Будет удалено в **VKUI v9**.\n * Используйте компонент `Box`.\n */\n Item: typeof FlexItem;\n} = ({\n gap = 0,\n align,\n justify,\n margin = 'none',\n noWrap = false,\n direction = 'row',\n reverse = false,\n display = 'flex',\n ...restProps\n}: FlexProps) => {\n const [rowGap, columnGap] = calculateGap(gap);\n const resolvedProps = resolveLayoutProps(restProps);\n\n return (\n <RootComponent\n baseClassName={classNames(\n styles.host,\n !noWrap && styles.wrap,\n reverse && styles.reverse,\n direction !== 'row' && styles.directionColumn,\n margin !== 'none' && styles.marginAuto,\n align && alignClassNames[align],\n justify && justifyClassNames[justify],\n getGapsPresets(rowGap, columnGap),\n display !== 'flex' && displayClassNames[display],\n )}\n baseStyle={getGapsByUser(rowGap, columnGap)}\n {...resolvedProps}\n />\n );\n};\n\nfunction getGapsPresets(rowGap: GapProp, columnGap: GapProp) {\n return classNames(\n typeof rowGap === 'string' && rowGapClassNames[rowGap],\n typeof columnGap === 'string' && columnGapClassNames[columnGap],\n );\n}\n\nfunction getGapsByUser(rowGap: GapProp, columnGap: GapProp) {\n const style: CSSCustomProperties = {};\n\n if (typeof rowGap === 'number') {\n style['--vkui_internal--row_gap'] = `${rowGap}px`;\n }\n if (typeof columnGap === 'number') {\n style['--vkui_internal--column_gap'] = `${columnGap}px`;\n }\n\n return style;\n}\n\nFlex.Item = FlexItem;\n"],"names":["classNames","calculateGap","columnGapClassNames","resolveLayoutProps","rowGapClassNames","RootComponent","FlexItem","justifyClassNames","alignClassNames","start","end","center","stretch","baseline","displayClassNames","Flex","gap","align","justify","margin","noWrap","direction","reverse","display","restProps","rowGap","columnGap","resolvedProps","baseClassName","getGapsPresets","baseStyle","getGapsByUser","style","Item"],"mappings":";AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SACEC,YAAY,EACZC,mBAAmB,EAGnBC,kBAAkB,EAClBC,gBAAgB,QACX,6BAAoB;AAG3B,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,QAAQ,QAA4B,yBAAsB;AAKnE,MAAMC,oBAAoB;IACxB,OAAO;IACP,KAAK;IACL,QAAQ;IACR,cAAc;IACd,eAAe;IACf,cAAc;AAChB;AAEA,MAAMC,kBAAkB;IACtBC,KAAK;IACLC,GAAG;IACHC,MAAM;IACNC,OAAO;IACPC,QAAQ;AACV;AAEA,MAAMC,oBAAoB;IACxB,MAAM;IACN,aAAa;AACf;AA+CA;;CAEC,GACD,OAAO,MAAMC,OAMT,CAAC,EACHC,MAAM,CAAC,EACPC,KAAK,EACLC,OAAO,EACPC,SAAS,MAAM,EACfC,SAAS,KAAK,EACdC,YAAY,KAAK,EACjBC,UAAU,KAAK,EACfC,UAAU,MAAM,EAChB,GAAGC,WACO;IACV,MAAM,CAACC,QAAQC,UAAU,GAAGzB,aAAae;IACzC,MAAMW,gBAAgBxB,mBAAmBqB;IAEzC,qBACE,KAACnB;QACCuB,eAAe5B,6BAEb,CAACoB,4BACDE,gCACAD,cAAc,sCACdF,WAAW,kCACXF,SAAST,eAAe,CAACS,MAAM,EAC/BC,WAAWX,iBAAiB,CAACW,QAAQ,EACrCW,eAAeJ,QAAQC,YACvBH,YAAY,UAAUT,iBAAiB,CAACS,QAAQ;QAElDO,WAAWC,cAAcN,QAAQC;QAChC,GAAGC,aAAa;;AAGvB,EAAE;AAEF,SAASE,eAAeJ,MAAe,EAAEC,SAAkB;IACzD,OAAO1B,WACL,OAAOyB,WAAW,YAAYrB,gBAAgB,CAACqB,OAAO,EACtD,OAAOC,cAAc,YAAYxB,mBAAmB,CAACwB,UAAU;AAEnE;AAEA,SAASK,cAAcN,MAAe,EAAEC,SAAkB;IACxD,MAAMM,QAA6B,CAAC;IAEpC,IAAI,OAAOP,WAAW,UAAU;QAC9BO,KAAK,CAAC,2BAA2B,GAAG,GAAGP,OAAO,EAAE,CAAC;IACnD;IACA,IAAI,OAAOC,cAAc,UAAU;QACjCM,KAAK,CAAC,8BAA8B,GAAG,GAAGN,UAAU,EAAE,CAAC;IACzD;IAEA,OAAOM;AACT;AAEAjB,KAAKkB,IAAI,GAAG3B"}
1
+ {"version":3,"sources":["../../../src/components/Flex/Flex.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport {\n calculateGap,\n columnGapClassNames,\n type GapProp,\n type GapsProp,\n resolveLayoutProps,\n rowGapClassNames,\n} from '../../lib/layouts';\nimport type { LayoutProps, MarginProp } from '../../lib/layouts/types';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { RootComponentProps } from '../RootComponent/RootComponent';\nimport { FlexItem, type FlexItemProps } from './FlexItem/FlexItem';\nimport styles from './Flex.module.css';\n\nexport type { FlexItemProps };\n\nconst justifyClassNames = {\n 'start': styles.justifyStart,\n 'end': styles.justifyEnd,\n 'center': styles.justifyCenter,\n 'space-around': styles.justifySpaceAround,\n 'space-between': styles.justifySpaceBetween,\n 'space-evenly': styles.justifySpaceEvenly,\n};\n\nconst alignClassNames = {\n start: styles.alignStart,\n end: styles.alignEnd,\n center: styles.alignCenter,\n stretch: styles.alignStretch,\n baseline: styles.alignBaseline,\n};\n\nconst displayClassNames = {\n 'none': styles.displayNone,\n 'inline-flex': styles.displayInlineFlex,\n};\n\ntype FlexContentProps =\n | 'start'\n | 'end'\n | 'center'\n | 'space-around'\n | 'space-between'\n | 'space-evenly';\n\nexport interface FlexProps extends RootComponentProps<HTMLElement>, Omit<LayoutProps, 'margin'> {\n /**\n * Направление осей, эквивалентно `flex-direction`.\n */\n direction?: 'row' | 'column' | undefined;\n /**\n * Отступы между элементами.\n * Значение из списка предопределённых пресетов или число, которое будет приведено к пикселям.\n * Через массив можно задать отступ между столбцами и строками [row, column], если они отличаются.\n */\n gap?: GapsProp | undefined;\n /**\n * Отключает перенос контента, эквивалентно `flex-wrap=nowrap`.\n */\n noWrap?: boolean | undefined;\n /**\n * Выравнивание элементов по вспомогательной оси, эквивалентно `align-items`.\n */\n align?: 'start' | 'end' | 'center' | 'stretch' | 'baseline' | undefined;\n /**\n * Выравнивание элементов по главной оси, эквивалентно `justify-content`.\n */\n justify?: FlexContentProps | undefined;\n /**\n * Внешние отступы контейнера.\n * Дополнительно поддерживаются специальные значения:\n * `none` — отключает дополнительные отступы;\n * `auto` включает платформенные отступы вокруг контейнера.\n */\n margin?: 'none' | 'auto' | MarginProp | undefined;\n /**\n * Для инвертирования направления, эквивалентно `row-reverse` `column-reverse`.\n */\n reverse?: boolean | undefined;\n /**\n * Возможность задать css-свойство `display`.\n */\n display?: 'none' | 'flex' | 'inline-flex' | undefined;\n}\n\n/**\n * @see https://vkui.io/components/flex\n */\nexport const Flex: React.FC<FlexProps> & {\n /**\n * @deprecated Since 7.11.0. Будет удалено в **VKUI v9**.\n * Используйте компонент `Box`.\n */\n Item: typeof FlexItem;\n} = ({\n gap = 0,\n align,\n justify,\n margin = 'none',\n noWrap = false,\n direction = 'row',\n reverse = false,\n display = 'flex',\n ...restProps\n}: FlexProps) => {\n const [rowGap, columnGap] = calculateGap(gap);\n const resolvedProps = resolveLayoutProps(\n margin === 'none' || margin === 'auto' ? restProps : { ...restProps, margin },\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n styles.host,\n !noWrap && styles.wrap,\n reverse && styles.reverse,\n direction !== 'row' && styles.directionColumn,\n margin === 'auto' && styles.marginAuto,\n align && alignClassNames[align],\n justify && justifyClassNames[justify],\n getGapsPresets(rowGap, columnGap),\n display !== 'flex' && displayClassNames[display],\n )}\n baseStyle={getGapsByUser(rowGap, columnGap)}\n {...resolvedProps}\n />\n );\n};\n\nfunction getGapsPresets(rowGap: GapProp, columnGap: GapProp) {\n return classNames(\n typeof rowGap === 'string' && rowGapClassNames[rowGap],\n typeof columnGap === 'string' && columnGapClassNames[columnGap],\n );\n}\n\nfunction getGapsByUser(rowGap: GapProp, columnGap: GapProp) {\n const style: CSSCustomProperties = {};\n\n if (typeof rowGap === 'number') {\n style['--vkui_internal--row_gap'] = `${rowGap}px`;\n }\n if (typeof columnGap === 'number') {\n style['--vkui_internal--column_gap'] = `${columnGap}px`;\n }\n\n return style;\n}\n\nFlex.Item = FlexItem;\n"],"names":["classNames","calculateGap","columnGapClassNames","resolveLayoutProps","rowGapClassNames","RootComponent","FlexItem","justifyClassNames","alignClassNames","start","end","center","stretch","baseline","displayClassNames","Flex","gap","align","justify","margin","noWrap","direction","reverse","display","restProps","rowGap","columnGap","resolvedProps","baseClassName","getGapsPresets","baseStyle","getGapsByUser","style","Item"],"mappings":";AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SACEC,YAAY,EACZC,mBAAmB,EAGnBC,kBAAkB,EAClBC,gBAAgB,QACX,6BAAoB;AAG3B,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,QAAQ,QAA4B,yBAAsB;AAKnE,MAAMC,oBAAoB;IACxB,OAAO;IACP,KAAK;IACL,QAAQ;IACR,cAAc;IACd,eAAe;IACf,cAAc;AAChB;AAEA,MAAMC,kBAAkB;IACtBC,KAAK;IACLC,GAAG;IACHC,MAAM;IACNC,OAAO;IACPC,QAAQ;AACV;AAEA,MAAMC,oBAAoB;IACxB,MAAM;IACN,aAAa;AACf;AAkDA;;CAEC,GACD,OAAO,MAAMC,OAMT,CAAC,EACHC,MAAM,CAAC,EACPC,KAAK,EACLC,OAAO,EACPC,SAAS,MAAM,EACfC,SAAS,KAAK,EACdC,YAAY,KAAK,EACjBC,UAAU,KAAK,EACfC,UAAU,MAAM,EAChB,GAAGC,WACO;IACV,MAAM,CAACC,QAAQC,UAAU,GAAGzB,aAAae;IACzC,MAAMW,gBAAgBxB,mBACpBgB,WAAW,UAAUA,WAAW,SAASK,YAAY;QAAE,GAAGA,SAAS;QAAEL;IAAO;IAG9E,qBACE,KAACd;QACCuB,eAAe5B,6BAEb,CAACoB,4BACDE,gCACAD,cAAc,sCACdF,WAAW,kCACXF,SAAST,eAAe,CAACS,MAAM,EAC/BC,WAAWX,iBAAiB,CAACW,QAAQ,EACrCW,eAAeJ,QAAQC,YACvBH,YAAY,UAAUT,iBAAiB,CAACS,QAAQ;QAElDO,WAAWC,cAAcN,QAAQC;QAChC,GAAGC,aAAa;;AAGvB,EAAE;AAEF,SAASE,eAAeJ,MAAe,EAAEC,SAAkB;IACzD,OAAO1B,WACL,OAAOyB,WAAW,YAAYrB,gBAAgB,CAACqB,OAAO,EACtD,OAAOC,cAAc,YAAYxB,mBAAmB,CAACwB,UAAU;AAEnE;AAEA,SAASK,cAAcN,MAAe,EAAEC,SAAkB;IACxD,MAAMM,QAA6B,CAAC;IAEpC,IAAI,OAAOP,WAAW,UAAU;QAC9BO,KAAK,CAAC,2BAA2B,GAAG,GAAGP,OAAO,EAAE,CAAC;IACnD;IACA,IAAI,OAAOC,cAAc,UAAU;QACjCM,KAAK,CAAC,8BAA8B,GAAG,GAAGN,UAAU,EAAE,CAAC;IACzD;IAEA,OAAOM;AACT;AAEAjB,KAAKkB,IAAI,GAAG3B"}
@@ -60,7 +60,9 @@ export const ImageBaseFloatElement = ({ placement, visibility = 'always', style,
60
60
  }
61
61
  return;
62
62
  }, [
63
- visibility
63
+ visibility,
64
+ onMouseOverHandlers,
65
+ onMouseOutHandlers
64
66
  ]);
65
67
  const [inlineIndentStyle, blockIndentStyle, inlineIndentClassName, blockIndentClassName] = React.useMemo(()=>{
66
68
  const [inlineIndentStyle, inlineIndentClassName] = resolveIndent(inlineIndent, '--vkui_internal--FloatElement_horizontal_indent', inlineIndentClassNames);