@vkontakte/vkui 6.6.0 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/dist/cjs/components/Alert/Alert.js +1 -1
  2. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  3. package/dist/cjs/components/AspectRatio/AspectRatio.js +1 -1
  4. package/dist/cjs/components/AspectRatio/AspectRatio.js.map +1 -1
  5. package/dist/cjs/components/Badge/Badge.js +1 -1
  6. package/dist/cjs/components/Badge/Badge.js.map +1 -1
  7. package/dist/cjs/components/Button/Button.js +1 -1
  8. package/dist/cjs/components/Button/Button.js.map +1 -1
  9. package/dist/cjs/components/Calendar/Calendar.d.ts +2 -2
  10. package/dist/cjs/components/Calendar/Calendar.d.ts.map +1 -1
  11. package/dist/cjs/components/Calendar/Calendar.js +4 -2
  12. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  13. package/dist/cjs/components/CalendarDay/CalendarDay.d.ts +1 -0
  14. package/dist/cjs/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  15. package/dist/cjs/components/CalendarDay/CalendarDay.js +26 -14
  16. package/dist/cjs/components/CalendarDay/CalendarDay.js.map +1 -1
  17. package/dist/cjs/components/CalendarDays/CalendarDays.d.ts +3 -3
  18. package/dist/cjs/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  19. package/dist/cjs/components/CalendarDays/CalendarDays.js +5 -3
  20. package/dist/cjs/components/CalendarDays/CalendarDays.js.map +1 -1
  21. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +2 -2
  22. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  23. package/dist/cjs/components/CalendarRange/CalendarRange.js +5 -2
  24. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  25. package/dist/cjs/components/CardGrid/CardGrid.js +1 -1
  26. package/dist/cjs/components/CardGrid/CardGrid.js.map +1 -1
  27. package/dist/cjs/components/Clickable/Clickable.d.ts +1 -0
  28. package/dist/cjs/components/Clickable/Clickable.d.ts.map +1 -1
  29. package/dist/cjs/components/Clickable/Clickable.js +21 -6
  30. package/dist/cjs/components/Clickable/Clickable.js.map +1 -1
  31. package/dist/cjs/components/Clickable/useState.d.ts +39 -3
  32. package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
  33. package/dist/cjs/components/Clickable/useState.js +110 -37
  34. package/dist/cjs/components/Clickable/useState.js.map +1 -1
  35. package/dist/cjs/components/Clickable/useStateWithDelay.d.ts +19 -1
  36. package/dist/cjs/components/Clickable/useStateWithDelay.d.ts.map +1 -1
  37. package/dist/cjs/components/Clickable/useStateWithDelay.js +20 -4
  38. package/dist/cjs/components/Clickable/useStateWithDelay.js.map +1 -1
  39. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +3 -2
  40. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  41. package/dist/cjs/components/CustomSelect/CustomSelect.js +7 -7
  42. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  43. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +1 -1
  44. package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  45. package/dist/cjs/components/DateInput/DateInput.d.ts +2 -2
  46. package/dist/cjs/components/DateInput/DateInput.d.ts.map +1 -1
  47. package/dist/cjs/components/DateInput/DateInput.js +5 -3
  48. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  49. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  50. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  51. package/dist/cjs/components/DateRangeInput/DateRangeInput.js +6 -4
  52. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  53. package/dist/cjs/components/FormField/FormField.js +1 -1
  54. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  55. package/dist/cjs/components/FormItem/FormItem.js +1 -1
  56. package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
  57. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  58. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  59. package/dist/cjs/components/Input/Input.js +1 -1
  60. package/dist/cjs/components/Input/Input.js.map +1 -1
  61. package/dist/cjs/components/ModalRoot/ModalRoot.js +4 -14
  62. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  63. package/dist/cjs/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  64. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +9 -1
  65. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  66. package/dist/cjs/components/NativeSelect/NativeSelect.js +1 -1
  67. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  68. package/dist/cjs/components/Panel/Panel.js +2 -2
  69. package/dist/cjs/components/Panel/Panel.js.map +1 -1
  70. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  71. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
  72. package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  73. package/dist/cjs/components/RichCell/RichCell.js +1 -1
  74. package/dist/cjs/components/RichCell/RichCell.js.map +1 -1
  75. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  76. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js +4 -2
  77. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  78. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
  79. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
  80. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.js +23 -6
  81. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  82. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
  83. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
  84. package/dist/cjs/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
  85. package/dist/cjs/components/ScreenSpinner/context.d.ts +1 -0
  86. package/dist/cjs/components/ScreenSpinner/context.d.ts.map +1 -1
  87. package/dist/cjs/components/ScreenSpinner/context.js +2 -1
  88. package/dist/cjs/components/ScreenSpinner/context.js.map +1 -1
  89. package/dist/cjs/components/ScreenSpinner/types.d.ts +5 -0
  90. package/dist/cjs/components/ScreenSpinner/types.d.ts.map +1 -1
  91. package/dist/cjs/components/Search/Search.d.ts.map +1 -1
  92. package/dist/cjs/components/Search/Search.js +16 -11
  93. package/dist/cjs/components/Search/Search.js.map +1 -1
  94. package/dist/cjs/components/SegmentedControl/SegmentedControl.js +1 -1
  95. package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
  96. package/dist/cjs/components/Select/Select.d.ts.map +1 -1
  97. package/dist/cjs/components/Select/Select.js +5 -1
  98. package/dist/cjs/components/Select/Select.js.map +1 -1
  99. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +1 -1
  100. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  101. package/dist/cjs/components/SimpleCell/SimpleCell.js +1 -1
  102. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  103. package/dist/cjs/components/Skeleton/Skeleton.d.ts +1 -1
  104. package/dist/cjs/components/Skeleton/Skeleton.d.ts.map +1 -1
  105. package/dist/cjs/components/Skeleton/Skeleton.js +85 -4
  106. package/dist/cjs/components/Skeleton/Skeleton.js.map +1 -1
  107. package/dist/cjs/components/Slider/Slider.js +1 -1
  108. package/dist/cjs/components/Slider/Slider.js.map +1 -1
  109. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +1 -1
  110. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  111. package/dist/cjs/components/TabsItem/TabsItem.js +1 -1
  112. package/dist/cjs/components/TabsItem/TabsItem.js.map +1 -1
  113. package/dist/cjs/components/Textarea/Textarea.js +1 -1
  114. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  115. package/dist/cjs/components/ToolButton/ToolButton.d.ts +2 -1
  116. package/dist/cjs/components/ToolButton/ToolButton.d.ts.map +1 -1
  117. package/dist/cjs/components/ToolButton/ToolButton.js +20 -4
  118. package/dist/cjs/components/ToolButton/ToolButton.js.map +1 -1
  119. package/dist/cjs/components/Typography/Caption/Caption.d.ts.map +1 -1
  120. package/dist/cjs/components/Typography/Caption/Caption.js +7 -1
  121. package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
  122. package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
  123. package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
  124. package/dist/cjs/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
  125. package/dist/cjs/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  126. package/dist/cjs/components/Typography/Footnote/Footnote.js +7 -1
  127. package/dist/cjs/components/Typography/Footnote/Footnote.js.map +1 -1
  128. package/dist/cjs/components/Typography/Headline/Headline.d.ts +1 -1
  129. package/dist/cjs/components/Typography/Headline/Headline.d.ts.map +1 -1
  130. package/dist/cjs/components/Typography/Headline/Headline.js +2 -4
  131. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  132. package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  133. package/dist/cjs/components/Typography/Paragraph/Paragraph.js +7 -1
  134. package/dist/cjs/components/Typography/Paragraph/Paragraph.js.map +1 -1
  135. package/dist/cjs/components/Typography/Subhead/Subhead.js +1 -1
  136. package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
  137. package/dist/cjs/components/Typography/Text/Text.js +1 -1
  138. package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
  139. package/dist/cjs/components/Typography/Title/Title.d.ts.map +1 -1
  140. package/dist/cjs/components/Typography/Title/Title.js +7 -1
  141. package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
  142. package/dist/cjs/components/Typography/Typography.d.ts +7 -1
  143. package/dist/cjs/components/Typography/Typography.d.ts.map +1 -1
  144. package/dist/cjs/components/Typography/Typography.js +4 -2
  145. package/dist/cjs/components/Typography/Typography.js.map +1 -1
  146. package/dist/cjs/components/View/ViewInfinite.js +5 -16
  147. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  148. package/dist/cjs/components/WriteBar/WriteBar.js +3 -1
  149. package/dist/cjs/components/WriteBar/WriteBar.js.map +1 -1
  150. package/dist/cjs/hooks/useAdaptivityConditionalRender/constants.js +4 -4
  151. package/dist/cjs/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
  152. package/dist/cjs/hooks/useWaitTransitionFinish.d.ts +1 -1
  153. package/dist/cjs/hooks/useWaitTransitionFinish.d.ts.map +1 -1
  154. package/dist/cjs/hooks/useWaitTransitionFinish.js.map +1 -1
  155. package/dist/components/Alert/Alert.js +1 -1
  156. package/dist/components/Alert/Alert.js.map +1 -1
  157. package/dist/components/AspectRatio/AspectRatio.js +1 -1
  158. package/dist/components/AspectRatio/AspectRatio.js.map +1 -1
  159. package/dist/components/Badge/Badge.js +1 -1
  160. package/dist/components/Badge/Badge.js.map +1 -1
  161. package/dist/components/Button/Button.js +1 -1
  162. package/dist/components/Button/Button.js.map +1 -1
  163. package/dist/components/Calendar/Calendar.d.ts +2 -2
  164. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  165. package/dist/components/Calendar/Calendar.js +4 -2
  166. package/dist/components/Calendar/Calendar.js.map +1 -1
  167. package/dist/components/CalendarDay/CalendarDay.d.ts +1 -0
  168. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  169. package/dist/components/CalendarDay/CalendarDay.js +26 -14
  170. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  171. package/dist/components/CalendarDays/CalendarDays.d.ts +3 -3
  172. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  173. package/dist/components/CalendarDays/CalendarDays.js +5 -3
  174. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  175. package/dist/components/CalendarRange/CalendarRange.d.ts +2 -2
  176. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  177. package/dist/components/CalendarRange/CalendarRange.js +5 -2
  178. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  179. package/dist/components/CardGrid/CardGrid.js +1 -1
  180. package/dist/components/CardGrid/CardGrid.js.map +1 -1
  181. package/dist/components/Clickable/Clickable.d.ts +1 -0
  182. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  183. package/dist/components/Clickable/Clickable.js +21 -7
  184. package/dist/components/Clickable/Clickable.js.map +1 -1
  185. package/dist/components/Clickable/useState.d.ts +39 -3
  186. package/dist/components/Clickable/useState.d.ts.map +1 -1
  187. package/dist/components/Clickable/useState.js +110 -37
  188. package/dist/components/Clickable/useState.js.map +1 -1
  189. package/dist/components/Clickable/useStateWithDelay.d.ts +19 -1
  190. package/dist/components/Clickable/useStateWithDelay.d.ts.map +1 -1
  191. package/dist/components/Clickable/useStateWithDelay.js +38 -4
  192. package/dist/components/Clickable/useStateWithDelay.js.map +1 -1
  193. package/dist/components/CustomSelect/CustomSelect.d.ts +3 -2
  194. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  195. package/dist/components/CustomSelect/CustomSelect.js +7 -7
  196. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  197. package/dist/components/CustomSelectOption/CustomSelectOption.js +1 -1
  198. package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  199. package/dist/components/DateInput/DateInput.d.ts +2 -2
  200. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  201. package/dist/components/DateInput/DateInput.js +5 -3
  202. package/dist/components/DateInput/DateInput.js.map +1 -1
  203. package/dist/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  204. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  205. package/dist/components/DateRangeInput/DateRangeInput.js +6 -4
  206. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  207. package/dist/components/FormField/FormField.js +1 -1
  208. package/dist/components/FormField/FormField.js.map +1 -1
  209. package/dist/components/FormItem/FormItem.js +1 -1
  210. package/dist/components/FormItem/FormItem.js.map +1 -1
  211. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  212. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  213. package/dist/components/Input/Input.js +1 -1
  214. package/dist/components/Input/Input.js.map +1 -1
  215. package/dist/components/ModalRoot/ModalRoot.js +4 -14
  216. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  217. package/dist/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  218. package/dist/components/ModalRoot/ModalRootDesktop.js +9 -1
  219. package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  220. package/dist/components/NativeSelect/NativeSelect.js +1 -1
  221. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  222. package/dist/components/Panel/Panel.js +2 -2
  223. package/dist/components/Panel/Panel.js.map +1 -1
  224. package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  225. package/dist/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
  226. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  227. package/dist/components/RichCell/RichCell.js +1 -1
  228. package/dist/components/RichCell/RichCell.js.map +1 -1
  229. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  230. package/dist/components/ScreenSpinner/ScreenSpinner.js +4 -2
  231. package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  232. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
  233. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
  234. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js +25 -8
  235. package/dist/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  236. package/dist/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
  237. package/dist/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
  238. package/dist/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
  239. package/dist/components/ScreenSpinner/context.d.ts +1 -0
  240. package/dist/components/ScreenSpinner/context.d.ts.map +1 -1
  241. package/dist/components/ScreenSpinner/context.js +2 -1
  242. package/dist/components/ScreenSpinner/context.js.map +1 -1
  243. package/dist/components/ScreenSpinner/types.d.ts +5 -0
  244. package/dist/components/ScreenSpinner/types.d.ts.map +1 -1
  245. package/dist/components/ScreenSpinner/types.js.map +1 -1
  246. package/dist/components/Search/Search.d.ts.map +1 -1
  247. package/dist/components/Search/Search.js +17 -12
  248. package/dist/components/Search/Search.js.map +1 -1
  249. package/dist/components/SegmentedControl/SegmentedControl.js +1 -1
  250. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  251. package/dist/components/Select/Select.d.ts.map +1 -1
  252. package/dist/components/Select/Select.js +5 -1
  253. package/dist/components/Select/Select.js.map +1 -1
  254. package/dist/components/SelectMimicry/SelectMimicry.js +1 -1
  255. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  256. package/dist/components/SimpleCell/SimpleCell.js +1 -1
  257. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  258. package/dist/components/Skeleton/Skeleton.d.ts +1 -1
  259. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -1
  260. package/dist/components/Skeleton/Skeleton.js +85 -4
  261. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  262. package/dist/components/Slider/Slider.js +1 -1
  263. package/dist/components/Slider/Slider.js.map +1 -1
  264. package/dist/components/SubnavigationButton/SubnavigationButton.js +1 -1
  265. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  266. package/dist/components/TabsItem/TabsItem.js +1 -1
  267. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  268. package/dist/components/Textarea/Textarea.js +1 -1
  269. package/dist/components/Textarea/Textarea.js.map +1 -1
  270. package/dist/components/ToolButton/ToolButton.d.ts +2 -1
  271. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  272. package/dist/components/ToolButton/ToolButton.js +9 -1
  273. package/dist/components/ToolButton/ToolButton.js.map +1 -1
  274. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  275. package/dist/components/Typography/Caption/Caption.js +7 -1
  276. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  277. package/dist/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
  278. package/dist/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
  279. package/dist/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
  280. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  281. package/dist/components/Typography/Footnote/Footnote.js +7 -1
  282. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  283. package/dist/components/Typography/Headline/Headline.d.ts +1 -1
  284. package/dist/components/Typography/Headline/Headline.d.ts.map +1 -1
  285. package/dist/components/Typography/Headline/Headline.js +2 -4
  286. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  287. package/dist/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  288. package/dist/components/Typography/Paragraph/Paragraph.js +7 -1
  289. package/dist/components/Typography/Paragraph/Paragraph.js.map +1 -1
  290. package/dist/components/Typography/Subhead/Subhead.js +1 -1
  291. package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
  292. package/dist/components/Typography/Text/Text.js +1 -1
  293. package/dist/components/Typography/Text/Text.js.map +1 -1
  294. package/dist/components/Typography/Title/Title.d.ts.map +1 -1
  295. package/dist/components/Typography/Title/Title.js +7 -1
  296. package/dist/components/Typography/Title/Title.js.map +1 -1
  297. package/dist/components/Typography/Typography.d.ts +7 -1
  298. package/dist/components/Typography/Typography.d.ts.map +1 -1
  299. package/dist/components/Typography/Typography.js +4 -2
  300. package/dist/components/Typography/Typography.js.map +1 -1
  301. package/dist/components/View/ViewInfinite.js +5 -16
  302. package/dist/components/View/ViewInfinite.js.map +1 -1
  303. package/dist/components/WriteBar/WriteBar.js +3 -1
  304. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  305. package/dist/components.css +313 -3
  306. package/dist/components.css.map +1 -1
  307. package/dist/components.js.tmp +647 -301
  308. package/dist/cssm/components/Alert/Alert.js +1 -1
  309. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  310. package/dist/cssm/components/AspectRatio/AspectRatio.js +1 -1
  311. package/dist/cssm/components/AspectRatio/AspectRatio.js.map +1 -1
  312. package/dist/cssm/components/Badge/Badge.js +1 -1
  313. package/dist/cssm/components/Badge/Badge.js.map +1 -1
  314. package/dist/cssm/components/Button/Button.js +1 -1
  315. package/dist/cssm/components/Button/Button.js.map +1 -1
  316. package/dist/cssm/components/Calendar/Calendar.d.ts +2 -2
  317. package/dist/cssm/components/Calendar/Calendar.d.ts.map +1 -1
  318. package/dist/cssm/components/Calendar/Calendar.js +3 -2
  319. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  320. package/dist/cssm/components/CalendarDay/CalendarDay.d.ts +1 -0
  321. package/dist/cssm/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  322. package/dist/cssm/components/CalendarDay/CalendarDay.js +24 -13
  323. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  324. package/dist/cssm/components/CalendarDays/CalendarDays.d.ts +3 -3
  325. package/dist/cssm/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  326. package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -1
  327. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  328. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +2 -2
  329. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  330. package/dist/cssm/components/CalendarRange/CalendarRange.js +3 -1
  331. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  332. package/dist/cssm/components/CardGrid/CardGrid.js +1 -1
  333. package/dist/cssm/components/CardGrid/CardGrid.js.map +1 -1
  334. package/dist/cssm/components/Clickable/Clickable.d.ts +1 -0
  335. package/dist/cssm/components/Clickable/Clickable.d.ts.map +1 -1
  336. package/dist/cssm/components/Clickable/Clickable.js +16 -6
  337. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  338. package/dist/cssm/components/Clickable/useState.d.ts +39 -3
  339. package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
  340. package/dist/cssm/components/Clickable/useState.js +104 -36
  341. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  342. package/dist/cssm/components/Clickable/useStateWithDelay.d.ts +19 -1
  343. package/dist/cssm/components/Clickable/useStateWithDelay.d.ts.map +1 -1
  344. package/dist/cssm/components/Clickable/useStateWithDelay.js +38 -4
  345. package/dist/cssm/components/Clickable/useStateWithDelay.js.map +1 -1
  346. package/dist/cssm/components/Counter/Counter.module.css +0 -14
  347. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +3 -2
  348. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  349. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -3
  350. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  351. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +1 -1
  352. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
  353. package/dist/cssm/components/DateInput/DateInput.d.ts +2 -2
  354. package/dist/cssm/components/DateInput/DateInput.d.ts.map +1 -1
  355. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  356. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  357. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +2 -2
  358. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  359. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -3
  360. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  361. package/dist/cssm/components/FormField/FormField.js +1 -1
  362. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  363. package/dist/cssm/components/FormItem/FormItem.js +1 -1
  364. package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
  365. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -1
  366. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  367. package/dist/cssm/components/Input/Input.js +1 -1
  368. package/dist/cssm/components/Input/Input.js.map +1 -1
  369. package/dist/cssm/components/ModalRoot/ModalRootDesktop.d.ts.map +1 -1
  370. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +9 -1
  371. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  372. package/dist/cssm/components/NativeSelect/NativeSelect.js +1 -1
  373. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  374. package/dist/cssm/components/Panel/Panel.js +2 -2
  375. package/dist/cssm/components/Panel/Panel.js.map +1 -1
  376. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
  377. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +1 -1
  378. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  379. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +48 -3
  380. package/dist/cssm/components/RichCell/RichCell.js +1 -1
  381. package/dist/cssm/components/RichCell/RichCell.js.map +1 -1
  382. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  383. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +2 -1
  384. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  385. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.module.css +40 -0
  386. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.d.ts +1 -1
  387. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.d.ts.map +1 -1
  388. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js +20 -7
  389. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerContainer.js.map +1 -1
  390. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.d.ts.map +1 -1
  391. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.js +8 -3
  392. package/dist/cssm/components/ScreenSpinner/ScreenSpinnerLoader.js.map +1 -1
  393. package/dist/cssm/components/ScreenSpinner/context.d.ts +1 -0
  394. package/dist/cssm/components/ScreenSpinner/context.d.ts.map +1 -1
  395. package/dist/cssm/components/ScreenSpinner/context.js +2 -1
  396. package/dist/cssm/components/ScreenSpinner/context.js.map +1 -1
  397. package/dist/cssm/components/ScreenSpinner/types.d.ts +5 -0
  398. package/dist/cssm/components/ScreenSpinner/types.d.ts.map +1 -1
  399. package/dist/cssm/components/ScreenSpinner/types.js.map +1 -1
  400. package/dist/cssm/components/Search/Search.d.ts.map +1 -1
  401. package/dist/cssm/components/Search/Search.js +17 -12
  402. package/dist/cssm/components/Search/Search.js.map +1 -1
  403. package/dist/cssm/components/Search/Search.module.css +25 -13
  404. package/dist/cssm/components/SegmentedControl/SegmentedControl.js +1 -1
  405. package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
  406. package/dist/cssm/components/Select/Select.d.ts.map +1 -1
  407. package/dist/cssm/components/Select/Select.js +1 -1
  408. package/dist/cssm/components/Select/Select.js.map +1 -1
  409. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +1 -1
  410. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  411. package/dist/cssm/components/SimpleCell/SimpleCell.js +1 -1
  412. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  413. package/dist/cssm/components/Skeleton/Skeleton.d.ts +1 -1
  414. package/dist/cssm/components/Skeleton/Skeleton.d.ts.map +1 -1
  415. package/dist/cssm/components/Skeleton/Skeleton.js +83 -3
  416. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  417. package/dist/cssm/components/Skeleton/Skeleton.module.css +30 -32
  418. package/dist/cssm/components/Slider/Slider.js +1 -1
  419. package/dist/cssm/components/Slider/Slider.js.map +1 -1
  420. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +1 -1
  421. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  422. package/dist/cssm/components/TabsItem/TabsItem.js +1 -1
  423. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  424. package/dist/cssm/components/Textarea/Textarea.js +1 -1
  425. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  426. package/dist/cssm/components/ToolButton/ToolButton.d.ts +2 -1
  427. package/dist/cssm/components/ToolButton/ToolButton.d.ts.map +1 -1
  428. package/dist/cssm/components/ToolButton/ToolButton.js +9 -1
  429. package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
  430. package/dist/cssm/components/ToolButton/ToolButton.module.css +13 -6
  431. package/dist/cssm/components/Typography/Caption/Caption.d.ts.map +1 -1
  432. package/dist/cssm/components/Typography/Caption/Caption.js +7 -1
  433. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  434. package/dist/cssm/components/Typography/Caption/Caption.module.css +240 -0
  435. package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.d.ts.map +1 -1
  436. package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.js +7 -1
  437. package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.js.map +1 -1
  438. package/dist/cssm/components/Typography/DisplayTitle/DisplayTitle.module.css +160 -0
  439. package/dist/cssm/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  440. package/dist/cssm/components/Typography/Footnote/Footnote.js +10 -2
  441. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  442. package/dist/cssm/components/Typography/Footnote/Footnote.module.css +80 -0
  443. package/dist/cssm/components/Typography/Headline/Headline.d.ts +1 -1
  444. package/dist/cssm/components/Typography/Headline/Headline.d.ts.map +1 -1
  445. package/dist/cssm/components/Typography/Headline/Headline.js +2 -3
  446. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  447. package/dist/cssm/components/Typography/Headline/Headline.module.css +48 -8
  448. package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
  449. package/dist/cssm/components/Typography/Paragraph/Paragraph.js +7 -1
  450. package/dist/cssm/components/Typography/Paragraph/Paragraph.js.map +1 -1
  451. package/dist/cssm/components/Typography/Paragraph/Paragraph.module.css +40 -0
  452. package/dist/cssm/components/Typography/Subhead/Subhead.js +1 -1
  453. package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
  454. package/dist/cssm/components/Typography/Subhead/Subhead.module.css +32 -4
  455. package/dist/cssm/components/Typography/Text/Text.js +1 -1
  456. package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
  457. package/dist/cssm/components/Typography/Text/Text.module.css +29 -4
  458. package/dist/cssm/components/Typography/Title/Title.d.ts.map +1 -1
  459. package/dist/cssm/components/Typography/Title/Title.js +7 -1
  460. package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
  461. package/dist/cssm/components/Typography/Title/Title.module.css +120 -0
  462. package/dist/cssm/components/Typography/Typography.d.ts +7 -1
  463. package/dist/cssm/components/Typography/Typography.d.ts.map +1 -1
  464. package/dist/cssm/components/Typography/Typography.js +3 -2
  465. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  466. package/dist/cssm/components/Typography/Typography.module.css +21 -3
  467. package/dist/cssm/components/WriteBar/WriteBar.js +1 -0
  468. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  469. package/dist/cssm/hooks/useAdaptivityConditionalRender/constants.js +4 -4
  470. package/dist/cssm/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
  471. package/dist/cssm/hooks/useWaitTransitionFinish.d.ts +1 -1
  472. package/dist/cssm/hooks/useWaitTransitionFinish.d.ts.map +1 -1
  473. package/dist/cssm/hooks/useWaitTransitionFinish.js.map +1 -1
  474. package/dist/cssm/styles/missedThemeTokens.css +22 -0
  475. package/dist/hooks/useAdaptivityConditionalRender/constants.js +4 -4
  476. package/dist/hooks/useAdaptivityConditionalRender/constants.js.map +1 -1
  477. package/dist/hooks/useWaitTransitionFinish.d.ts +1 -1
  478. package/dist/hooks/useWaitTransitionFinish.d.ts.map +1 -1
  479. package/dist/hooks/useWaitTransitionFinish.js.map +1 -1
  480. package/dist/vkui.css +313 -3
  481. package/dist/vkui.css.map +1 -1
  482. package/dist/vkui.js.tmp +647 -301
  483. package/package.json +3 -2
  484. package/src/components/Alert/Alert.tsx +1 -1
  485. package/src/components/AspectRatio/AspectRatio.tsx +1 -1
  486. package/src/components/Badge/Badge.tsx +1 -1
  487. package/src/components/Button/Button.tsx +1 -1
  488. package/src/components/Calendar/Calendar.tsx +3 -1
  489. package/src/components/CalendarDay/CalendarDay.tsx +16 -4
  490. package/src/components/CalendarDays/CalendarDays.tsx +9 -2
  491. package/src/components/CalendarRange/CalendarRange.tsx +4 -1
  492. package/src/components/CardGrid/CardGrid.tsx +1 -1
  493. package/src/components/Clickable/Clickable.tsx +21 -3
  494. package/src/components/Clickable/useState.tsx +195 -42
  495. package/src/components/Clickable/useStateWithDelay.tsx +40 -3
  496. package/src/components/Counter/Counter.module.css +0 -12
  497. package/src/components/CustomSelect/CustomSelect.tsx +11 -10
  498. package/src/components/CustomSelectOption/CustomSelectOption.tsx +1 -1
  499. package/src/components/DateInput/DateInput.tsx +4 -1
  500. package/src/components/DateRangeInput/DateRangeInput.tsx +4 -1
  501. package/src/components/FormField/FormField.tsx +1 -1
  502. package/src/components/FormItem/FormItem.tsx +1 -1
  503. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +1 -1
  504. package/src/components/Input/Input.tsx +1 -1
  505. package/src/components/ModalRoot/ModalRootDesktop.tsx +13 -1
  506. package/src/components/NativeSelect/NativeSelect.tsx +1 -1
  507. package/src/components/Panel/Panel.tsx +2 -2
  508. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +44 -3
  509. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
  510. package/src/components/RichCell/RichCell.tsx +1 -1
  511. package/src/components/ScreenSpinner/ScreenSpinner.module.css +35 -0
  512. package/src/components/ScreenSpinner/ScreenSpinner.tsx +2 -1
  513. package/src/components/ScreenSpinner/ScreenSpinnerContainer.tsx +15 -4
  514. package/src/components/ScreenSpinner/ScreenSpinnerLoader.tsx +16 -3
  515. package/src/components/ScreenSpinner/context.ts +2 -0
  516. package/src/components/ScreenSpinner/types.tsx +5 -0
  517. package/src/components/Search/Search.module.css +24 -13
  518. package/src/components/Search/Search.tsx +19 -14
  519. package/src/components/SegmentedControl/SegmentedControl.tsx +1 -1
  520. package/src/components/Select/Select.tsx +4 -0
  521. package/src/components/SelectMimicry/SelectMimicry.tsx +1 -1
  522. package/src/components/SimpleCell/SimpleCell.tsx +1 -1
  523. package/src/components/Skeleton/Skeleton.module.css +30 -32
  524. package/src/components/Skeleton/Skeleton.tsx +90 -2
  525. package/src/components/Slider/Slider.tsx +1 -1
  526. package/src/components/SubnavigationButton/SubnavigationButton.tsx +1 -1
  527. package/src/components/TabsItem/TabsItem.tsx +1 -1
  528. package/src/components/Textarea/Textarea.tsx +1 -1
  529. package/src/components/ToolButton/ToolButton.module.css +12 -6
  530. package/src/components/ToolButton/ToolButton.tsx +15 -2
  531. package/src/components/Typography/Caption/Caption.module.css +240 -0
  532. package/src/components/Typography/Caption/Caption.tsx +14 -1
  533. package/src/components/Typography/DisplayTitle/DisplayTitle.module.css +160 -0
  534. package/src/components/Typography/DisplayTitle/DisplayTitle.tsx +13 -1
  535. package/src/components/Typography/Footnote/Footnote.module.css +80 -0
  536. package/src/components/Typography/Footnote/Footnote.tsx +24 -9
  537. package/src/components/Typography/Headline/Headline.module.css +48 -8
  538. package/src/components/Typography/Headline/Headline.tsx +1 -3
  539. package/src/components/Typography/Paragraph/Paragraph.module.css +40 -0
  540. package/src/components/Typography/Paragraph/Paragraph.tsx +13 -1
  541. package/src/components/Typography/Subhead/Subhead.module.css +32 -4
  542. package/src/components/Typography/Subhead/Subhead.tsx +1 -1
  543. package/src/components/Typography/Text/Text.module.css +29 -4
  544. package/src/components/Typography/Text/Text.tsx +1 -1
  545. package/src/components/Typography/Title/Title.module.css +120 -0
  546. package/src/components/Typography/Title/Title.tsx +13 -1
  547. package/src/components/Typography/Typography.module.css +20 -3
  548. package/src/components/Typography/Typography.tsx +10 -0
  549. package/src/components/WriteBar/WriteBar.tsx +1 -1
  550. package/src/hooks/useAdaptivityConditionalRender/constants.ts +4 -4
  551. package/src/hooks/useWaitTransitionFinish.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["import * 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 { callMultiple } from '../../lib/callMultiple';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps } from '../Calendar/Calendar';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles['DateInput--sizeY-none'],\n ['compact']: styles['DateInput--sizeY-compact'],\n};\n\nexport interface DateInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange' | 'size'>,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'doneButtonText'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'showNeighboringMonth'\n | 'size'\n | 'viewDate'\n | 'onHeaderChange'\n | 'onNextMonth'\n | 'onPrevMonth'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'minDateTime'\n | 'maxDateTime'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'> {\n calendarPlacement?: PlacementWithAuto;\n closeOnChange?: boolean;\n clearFieldLabel?: string;\n showCalendarLabel?: string;\n disableCalendar?: boolean;\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://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n value,\n onChange,\n calendarPlacement = 'bottom-start',\n style,\n className,\n doneButtonText,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n showNeighboringMonth,\n size,\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n changeDayLabel = 'Изменить день',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\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\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 onChange?.(parse(formattedValue, mask, value ?? new Date()));\n }\n },\n [enableTime, maxElement, onChange, 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 openCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n onChange?.(value);\n if (closeOnChange && !enableTime) {\n removeFocusFromField();\n }\n },\n [onChange, removeFocusFromField, closeOnChange, enableTime],\n );\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n after={\n value ? (\n <IconButton hoverMode=\"opacity\" label={clearFieldLabel} onClick={clear}>\n <Icon16Clear />\n </IconButton>\n ) : (\n <IconButton hoverMode=\"opacity\" label={showCalendarLabel} onClick={openCalendar}>\n <Icon20CalendarOutline />\n </IconButton>\n )\n }\n disabled={disabled}\n onClick={callMultiple(handleFieldEnter, onClick)}\n onFocus={callMultiple(handleFieldEnter, onFocus)}\n {...props}\n >\n <input\n type=\"hidden\"\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n />\n <Text\n className={styles['DateInput__input']}\n onKeyDown={handleKeyDown}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n >\n <InputLike\n length={2}\n getRootRef={daysRef}\n index={0}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n value={internalValue[1]}\n label={changeMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeYearLabel}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles['DateInput__input--time-divider']}>\n {' '}\n </InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeHoursLabel}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeMinutesLabel}\n />\n </React.Fragment>\n )}\n </Text>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n autoUpdateOnTargetResize\n >\n <Calendar\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onClose={removeFocusFromField}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n changeDayLabel={changeDayLabel}\n showNeighboringMonth={showNeighboringMonth}\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 />\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","callMultiple","format","isMatch","parse","Calendar","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","styles","sizeYClassNames","none","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","onChange","calendarPlacement","style","className","doneButtonText","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","prevMonthLabel","nextMonthLabel","showNeighboringMonth","size","changeMonthLabel","changeYearLabel","changeDayLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","disableCalendar","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","Date","refs","useMemo","rootRef","calendarRef","open","openCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","sizeY","handleRootRef","onCalendarChange","after","hoverMode","label","input","type","onKeyDown","normalize","Component","onElementSelect","Fragment","targetRef","offsetByMainAxis","placement","autoUpdateOnTargetResize","onClose"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/DateInput/DateInput.tsx"],"sourcesContent":["import * 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 { callMultiple } from '../../lib/callMultiple';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport type { HasRootRef } from '../../types';\nimport { Calendar, type CalendarProps } from '../Calendar/Calendar';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport '../InputLike/InputLike.module.css'; // Reorder css\nimport styles from './DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles['DateInput--sizeY-none'],\n compact: styles['DateInput--sizeY-compact'],\n};\n\nexport interface DateInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange' | 'size'>,\n Pick<\n CalendarProps,\n | 'disablePast'\n | 'disableFuture'\n | 'enableTime'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'doneButtonText'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'changeHoursLabel'\n | 'changeMinutesLabel'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\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 calendarPlacement?: PlacementWithAuto;\n closeOnChange?: boolean;\n clearFieldLabel?: string;\n showCalendarLabel?: string;\n disableCalendar?: boolean;\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://vkcom.github.io/VKUI/#/DateInput\n */\nexport const DateInput = ({\n enableTime,\n shouldDisableDate,\n disableFuture,\n disablePast,\n minDateTime,\n maxDateTime,\n value,\n onChange,\n calendarPlacement = 'bottom-start',\n style,\n className,\n doneButtonText,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n showNeighboringMonth,\n size,\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n changeDayLabel = 'Изменить день',\n changeHoursLabel = 'Изменить час',\n changeMinutesLabel = 'Изменить минуту',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n viewDate,\n onHeaderChange,\n onNextMonth,\n onPrevMonth,\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\n renderDayContent,\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\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 onChange?.(parse(formattedValue, mask, value ?? new Date()));\n }\n },\n [enableTime, maxElement, onChange, 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 openCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (value?: Date | undefined) => {\n onChange?.(value);\n if (closeOnChange && !enableTime) {\n removeFocusFromField();\n }\n },\n [onChange, removeFocusFromField, closeOnChange, enableTime],\n );\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n after={\n value ? (\n <IconButton hoverMode=\"opacity\" label={clearFieldLabel} onClick={clear}>\n <Icon16Clear />\n </IconButton>\n ) : (\n <IconButton hoverMode=\"opacity\" label={showCalendarLabel} onClick={openCalendar}>\n <Icon20CalendarOutline />\n </IconButton>\n )\n }\n disabled={disabled}\n onClick={callMultiple(handleFieldEnter, onClick)}\n onFocus={callMultiple(handleFieldEnter, onFocus)}\n {...props}\n >\n <input\n type=\"hidden\"\n name={name}\n value={value ? format(value, enableTime ? \"dd.MM.yyyy'T'HH:mm\" : 'dd.MM.yyyy') : ''}\n />\n <Text\n className={styles['DateInput__input']}\n onKeyDown={handleKeyDown}\n // Инцидент: в PR https://github.com/VKCOM/VKUI/pull/6649 стабильно ломается порядок стилей\n // из-за чего `.Typography--normalize` перебивает стили.\n normalize={false}\n Component=\"span\" // для <span> нормализация не нужна\n >\n <InputLike\n length={2}\n getRootRef={daysRef}\n index={0}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsRef}\n index={1}\n onElementSelect={setFocusedElement}\n value={internalValue[1]}\n label={changeMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeYearLabel}\n />\n {enableTime && (\n <React.Fragment>\n <InputLikeDivider className={styles['DateInput__input--time-divider']}>\n {' '}\n </InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={hoursRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeHoursLabel}\n />\n <InputLikeDivider>:</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={minutesRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeMinutesLabel}\n />\n </React.Fragment>\n )}\n </Text>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n autoUpdateOnTargetResize\n >\n <Calendar\n value={value}\n onChange={onCalendarChange}\n enableTime={enableTime}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onClose={removeFocusFromField}\n getRootRef={calendarRef}\n doneButtonText={doneButtonText}\n disablePickers={disablePickers}\n changeHoursLabel={changeHoursLabel}\n changeMinutesLabel={changeMinutesLabel}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n changeDayLabel={changeDayLabel}\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 />\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useExternRef","callMultiple","format","isMatch","parse","Calendar","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","styles","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","getHours","getMinutes","DateInput","enableTime","shouldDisableDate","disableFuture","disablePast","minDateTime","maxDateTime","onChange","calendarPlacement","style","className","doneButtonText","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","prevMonthLabel","nextMonthLabel","showNeighboringMonth","size","changeMonthLabel","changeYearLabel","changeDayLabel","changeHoursLabel","changeMinutesLabel","clearFieldLabel","showCalendarLabel","viewDate","onHeaderChange","onNextMonth","onPrevMonth","prevMonthIcon","nextMonthIcon","disableCalendar","renderDayContent","props","daysRef","useRef","monthsRef","yearsRef","hoursRef","minutesRef","maxElement","onInternalValueChange","useCallback","internalValue","i","formattedValue","mask","Date","refs","useMemo","rootRef","calendarRef","open","openCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","sizeY","handleRootRef","onCalendarChange","after","hoverMode","label","input","type","onKeyDown","normalize","Component","onElementSelect","Fragment","targetRef","offsetByMainAxis","placement","autoUpdateOnTargetResize","onClose"],"mappings":"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"}
@@ -3,7 +3,7 @@ import type { PlacementWithAuto } from '../../lib/floating';
3
3
  import type { HasRootRef } from '../../types';
4
4
  import { type CalendarRangeProps } from '../CalendarRange/CalendarRange';
5
5
  import { type FormFieldProps } from '../FormField/FormField';
6
- export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'> {
6
+ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange'>, Pick<CalendarRangeProps, 'disablePast' | 'disableFuture' | 'shouldDisableDate' | 'onChange' | 'value' | 'weekStartsOn' | 'disablePickers' | 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'changeDayLabel' | 'prevMonthIcon' | 'nextMonthIcon' | 'renderDayContent'>, HasRootRef<HTMLDivElement>, Omit<FormFieldProps, 'maxHeight'> {
7
7
  calendarPlacement?: PlacementWithAuto;
8
8
  closeOnChange?: boolean;
9
9
  clearFieldLabel?: string;
@@ -19,5 +19,5 @@ export interface DateRangeInputProps extends Omit<React.InputHTMLAttributes<HTML
19
19
  /**
20
20
  * @see https://vkcom.github.io/VKUI/#/DateRangeInput
21
21
  */
22
- export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, value, onChange, calendarPlacement, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel, nextMonthLabel, changeDayLabel, changeMonthLabel, changeYearLabel, changeStartDayLabel, changeStartMonthLabel, changeStartYearLabel, changeEndDayLabel, changeEndMonthLabel, changeEndYearLabel, clearFieldLabel, showCalendarLabel, prevMonthIcon, nextMonthIcon, disableCalendar, ...props }: DateRangeInputProps) => React.ReactNode;
22
+ export declare const DateRangeInput: ({ shouldDisableDate, disableFuture, disablePast, value, onChange, calendarPlacement, style, className, closeOnChange, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel, nextMonthLabel, changeDayLabel, changeMonthLabel, changeYearLabel, changeStartDayLabel, changeStartMonthLabel, changeStartYearLabel, changeEndDayLabel, changeEndMonthLabel, changeEndYearLabel, clearFieldLabel, showCalendarLabel, prevMonthIcon, nextMonthIcon, disableCalendar, renderDayContent, ...props }: DateRangeInputProps) => React.ReactNode;
23
23
  //# sourceMappingURL=DateRangeInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,EAC3E,IAAI,CACF,kBAAkB,EAChB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,UAAU,GACV,OAAO,GACP,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,CAClB,EACD,UAAU,CAAC,cAAc,CAAC,EAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;IACnC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD;;GAEG;AACH,eAAO,MAAM,cAAc,kfAkCxB,mBAAmB,KAAG,KAAK,CAAC,SA+M9B,CAAC"}
1
+ {"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexE,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,EAC3E,IAAI,CACF,kBAAkB,EAChB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,UAAU,GACV,OAAO,GACP,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,kBAAkB,CACrB,EACD,UAAU,CAAC,cAAc,CAAC,EAC1B,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;IACnC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD;;GAEG;AACH,eAAO,MAAM,cAAc,ogBAmCxB,mBAAmB,KAAG,KAAK,CAAC,SAgN9B,CAAC"}
@@ -20,7 +20,7 @@ import styles from './DateRangeInput.module.css';
20
20
  import dateInputStyles from '../DateInput/DateInput.module.css';
21
21
  const sizeYClassNames = {
22
22
  none: styles['DateRangeInput--sizeY-none'],
23
- ['compact']: styles['DateRangeInput--sizeY-compact']
23
+ compact: styles['DateRangeInput--sizeY-compact']
24
24
  };
25
25
  const elementsConfig = (index)=>{
26
26
  let length = 2;
@@ -71,7 +71,7 @@ const getInternalValue = (value)=>{
71
71
  };
72
72
  /**
73
73
  * @see https://vkcom.github.io/VKUI/#/DateRangeInput
74
- */ export const DateRangeInput = ({ shouldDisableDate, disableFuture, disablePast, value, onChange, calendarPlacement = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel = 'Предыдущий месяц', nextMonthLabel = 'Следующий месяц', changeDayLabel = 'Изменить день', changeMonthLabel = 'Изменить месяц', changeYearLabel = 'Изменить год', changeStartDayLabel = 'Изменить день начала', changeStartMonthLabel = 'Изменить месяц начала', changeStartYearLabel = 'Изменить год начала', changeEndDayLabel = 'Изменить день окончания', changeEndMonthLabel = 'Изменить месяц окончания', changeEndYearLabel = 'Изменить год окончания', clearFieldLabel = 'Очистить поле', showCalendarLabel = 'Показать календарь', prevMonthIcon, nextMonthIcon, disableCalendar = false, ...props })=>{
74
+ */ export const DateRangeInput = ({ shouldDisableDate, disableFuture, disablePast, value, onChange, calendarPlacement = 'bottom-start', style, className, closeOnChange = true, disablePickers, getRootRef, name, autoFocus, disabled, onClick, onFocus, prevMonthLabel = 'Предыдущий месяц', nextMonthLabel = 'Следующий месяц', changeDayLabel = 'Изменить день', changeMonthLabel = 'Изменить месяц', changeYearLabel = 'Изменить год', changeStartDayLabel = 'Изменить день начала', changeStartMonthLabel = 'Изменить месяц начала', changeStartYearLabel = 'Изменить год начала', changeEndDayLabel = 'Изменить день окончания', changeEndMonthLabel = 'Изменить месяц окончания', changeEndYearLabel = 'Изменить год окончания', clearFieldLabel = 'Очистить поле', showCalendarLabel = 'Показать календарь', prevMonthIcon, nextMonthIcon, disableCalendar = false, renderDayContent, ...props })=>{
75
75
  const daysStartRef = React.useRef(null);
76
76
  const monthsStartRef = React.useRef(null);
77
77
  const yearsStartRef = React.useRef(null);
@@ -277,7 +277,8 @@ const getInternalValue = (value)=>{
277
277
  changeYearLabel: changeYearLabel,
278
278
  changeDayLabel: changeDayLabel,
279
279
  prevMonthIcon: prevMonthIcon,
280
- nextMonthIcon: nextMonthIcon
280
+ nextMonthIcon: nextMonthIcon,
281
+ renderDayContent: renderDayContent
281
282
  })
282
283
  })
283
284
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isAfter } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './DateRangeInput.module.css';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles['DateRangeInput--sizeY-none'],\n ['compact']: styles['DateRangeInput--sizeY-compact'],\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n >,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'> {\n calendarPlacement?: PlacementWithAuto;\n closeOnChange?: boolean;\n clearFieldLabel?: string;\n showCalendarLabel?: string;\n changeStartDayLabel?: string;\n changeStartMonthLabel?: string;\n changeStartYearLabel?: string;\n changeEndDayLabel?: string;\n changeEndMonthLabel?: string;\n changeEndYearLabel?: string;\n disableCalendar?: boolean;\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://vkcom.github.io/VKUI/#/DateRangeInput\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n value,\n onChange,\n calendarPlacement = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'Изменить день',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n changeStartDayLabel = 'Изменить день начала',\n changeStartMonthLabel = 'Изменить месяц начала',\n changeStartYearLabel = 'Изменить год начала',\n changeEndDayLabel = 'Изменить день окончания',\n changeEndMonthLabel = 'Изменить месяц окончания',\n changeEndYearLabel = 'Изменить год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\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\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 && isAfter(end, start)) {\n onChange?.([start, end]);\n }\n },\n [onChange, 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 {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType | undefined) => {\n onChange?.(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [onChange, closeOnChange, value, removeFocusFromField],\n );\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n after={\n value ? (\n <IconButton hoverMode=\"opacity\" onClick={clear}>\n <VisuallyHidden>{clearFieldLabel}</VisuallyHidden>\n <Icon16Clear />\n </IconButton>\n ) : (\n <IconButton hoverMode=\"opacity\" onClick={openCalendar}>\n <VisuallyHidden>{showCalendarLabel}</VisuallyHidden>\n <Icon20CalendarOutline />\n </IconButton>\n )\n }\n disabled={disabled}\n onClick={callMultiple(handleFieldEnter, onClick)}\n onFocus={callMultiple(handleFieldEnter, onFocus)}\n {...props}\n >\n <input\n type=\"hidden\"\n name={name}\n value={\n value\n ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${\n value[1] ? format(value[1], 'dd.MM.yyyy') : ''\n }`\n : ''\n }\n />\n <Text className={dateInputStyles['DateInput__input']} onKeyDown={handleKeyDown}>\n <InputLike\n length={2}\n getRootRef={daysStartRef}\n index={0}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeStartDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n value={internalValue[1]}\n label={changeStartMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeStartYearLabel}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeEndDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeEndMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n value={internalValue[5]}\n label={changeEndYearLabel}\n />\n </Text>\n {open && !disableCalendar && (\n <Popper targetRef={rootRef} offsetByMainAxis={8} placement={calendarPlacement}>\n <CalendarRange\n value={value}\n onChange={onCalendarChange}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onClose={closeCalendar}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n changeDayLabel={changeDayLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n />\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","isAfter","useAdaptivity","useDateInput","useExternRef","callMultiple","format","isMatch","parse","CalendarRange","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","VisuallyHidden","styles","dateInputStyles","sizeYClassNames","none","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","onChange","calendarPlacement","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","prevMonthIcon","nextMonthIcon","disableCalendar","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","rootRef","calendarRef","open","openCalendar","closeCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","sizeY","handleRootRef","onCalendarChange","after","hoverMode","input","type","onKeyDown","onElementSelect","label","targetRef","offsetByMainAxis","placement","onClose"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isAfter } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { format, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLike } from '../InputLike/InputLike';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './DateRangeInput.module.css';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles['DateRangeInput--sizeY-none'],\n compact: styles['DateRangeInput--sizeY-compact'],\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\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 calendarPlacement?: PlacementWithAuto;\n closeOnChange?: boolean;\n clearFieldLabel?: string;\n showCalendarLabel?: string;\n changeStartDayLabel?: string;\n changeStartMonthLabel?: string;\n changeStartYearLabel?: string;\n changeEndDayLabel?: string;\n changeEndMonthLabel?: string;\n changeEndYearLabel?: string;\n disableCalendar?: boolean;\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://vkcom.github.io/VKUI/#/DateRangeInput\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n value,\n onChange,\n calendarPlacement = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n onClick,\n onFocus,\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeDayLabel = 'Изменить день',\n changeMonthLabel = 'Изменить месяц',\n changeYearLabel = 'Изменить год',\n changeStartDayLabel = 'Изменить день начала',\n changeStartMonthLabel = 'Изменить месяц начала',\n changeStartYearLabel = 'Изменить год начала',\n changeEndDayLabel = 'Изменить день окончания',\n changeEndMonthLabel = 'Изменить месяц окончания',\n changeEndYearLabel = 'Изменить год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n prevMonthIcon,\n nextMonthIcon,\n disableCalendar = false,\n renderDayContent,\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\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 && isAfter(end, start)) {\n onChange?.([start, end]);\n }\n },\n [onChange, 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 {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType | undefined) => {\n onChange?.(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [onChange, closeOnChange, value, removeFocusFromField],\n );\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n after={\n value ? (\n <IconButton hoverMode=\"opacity\" onClick={clear}>\n <VisuallyHidden>{clearFieldLabel}</VisuallyHidden>\n <Icon16Clear />\n </IconButton>\n ) : (\n <IconButton hoverMode=\"opacity\" onClick={openCalendar}>\n <VisuallyHidden>{showCalendarLabel}</VisuallyHidden>\n <Icon20CalendarOutline />\n </IconButton>\n )\n }\n disabled={disabled}\n onClick={callMultiple(handleFieldEnter, onClick)}\n onFocus={callMultiple(handleFieldEnter, onFocus)}\n {...props}\n >\n <input\n type=\"hidden\"\n name={name}\n value={\n value\n ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${\n value[1] ? format(value[1], 'dd.MM.yyyy') : ''\n }`\n : ''\n }\n />\n <Text className={dateInputStyles['DateInput__input']} onKeyDown={handleKeyDown}>\n <InputLike\n length={2}\n getRootRef={daysStartRef}\n index={0}\n onElementSelect={setFocusedElement}\n value={internalValue[0]}\n label={changeStartDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n value={internalValue[1]}\n label={changeStartMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n value={internalValue[2]}\n label={changeStartYearLabel}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n value={internalValue[3]}\n label={changeEndDayLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n value={internalValue[4]}\n label={changeEndMonthLabel}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <InputLike\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n value={internalValue[5]}\n label={changeEndYearLabel}\n />\n </Text>\n {open && !disableCalendar && (\n <Popper targetRef={rootRef} offsetByMainAxis={8} placement={calendarPlacement}>\n <CalendarRange\n value={value}\n onChange={onCalendarChange}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n onClose={closeCalendar}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n changeDayLabel={changeDayLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n />\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","isAfter","useAdaptivity","useDateInput","useExternRef","callMultiple","format","isMatch","parse","CalendarRange","FormField","IconButton","InputLike","InputLikeDivider","Popper","Text","VisuallyHidden","styles","dateInputStyles","sizeYClassNames","none","compact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","DateRangeInput","shouldDisableDate","disableFuture","disablePast","onChange","calendarPlacement","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","onClick","onFocus","prevMonthLabel","nextMonthLabel","changeDayLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","prevMonthIcon","nextMonthIcon","disableCalendar","renderDayContent","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","onInternalValueChange","useCallback","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","rootRef","calendarRef","open","openCalendar","closeCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","sizeY","handleRootRef","onCalendarChange","after","hoverMode","input","type","onKeyDown","onElementSelect","label","targetRef","offsetByMainAxis","placement","onClose"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { useFocusWithin } from '../../hooks/useFocusWithin';
8
8
  import styles from './FormField.module.css';
9
9
  const sizeYClassNames = {
10
10
  none: styles['FormField--sizeY-none'],
11
- ['compact']: styles['FormField--sizeY-compact']
11
+ compact: styles['FormField--sizeY-compact']
12
12
  };
13
13
  const stylesStatus = {
14
14
  error: styles['FormField--status-error'],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FormField/FormField.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport type { HasComponent, HasRootRef } from '../../types';\nimport styles from './FormField.module.css';\n\nconst sizeYClassNames = {\n none: styles['FormField--sizeY-none'],\n ['compact']: styles['FormField--sizeY-compact'],\n};\n\nconst stylesStatus = {\n error: styles['FormField--status-error'],\n valid: styles['FormField--status-valid'],\n};\n\nconst iconAlignClassNames = {\n center: undefined,\n start: styles['FormField__icon--align-start'],\n end: styles['FormField__icon--align-end'],\n};\n\nconst renderIcon = (icon: React.ReactNode, align: FieldIconsAlign, className: string) => {\n return (\n <div className={styles['FormField__iconWrapper']}>\n <span className={classNames(iconAlignClassNames[align], className)}>{icon}</span>\n </div>\n );\n};\n\nexport type FieldIconsAlign = 'start' | 'center' | 'end';\n\nexport interface FormFieldProps {\n status?: 'default' | 'error' | 'valid';\n /**\n * Добавляет иконку слева.\n *\n * Рекомендации:\n *\n * - Используйте следующие размеры иконок `12` | `16` | `20` | `24` | `28`.\n * - Используйте [IconButton](https://vkcom.github.io/VKUI/#/IconButton), если вам нужна кликабельная иконка.\n */\n before?: React.ReactNode;\n /**\n * Вертикальное выравнивание иконки слева\n */\n beforeAlign?: FieldIconsAlign;\n /**\n * Добавляет иконку справа.\n *\n * Рекомендации:\n *\n * - Используйте следующие размеры иконок `12` | `16` | `20` | `24` | `28`.\n * - Используйте [IconButton](https://vkcom.github.io/VKUI/#/IconButton), если вам нужна кликабельная иконка.\n */\n after?: React.ReactNode;\n /**\n * Вертикальное выравнивание иконки справа\n */\n afterAlign?: FieldIconsAlign;\n /**\n * Режим отображения.\n *\n * - `default` — показывает фон, обводку и, при наличии, текст-подсказку.\n * - `plain` — показывает только текст-подсказку.\n */\n mode?: 'default' | 'plain';\n /**\n * Максимальная высота поля\n */\n maxHeight?: number;\n}\n\nexport interface FormFieldOwnProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent,\n FormFieldProps {\n disabled?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormField\n */\nexport const FormField = ({\n Component = 'span',\n status = 'default',\n children,\n getRootRef,\n before,\n after,\n beforeAlign = 'center',\n afterAlign = 'center',\n disabled,\n mode = 'default',\n className,\n maxHeight,\n style,\n ...restProps\n}: FormFieldOwnProps): React.ReactNode => {\n const elRef = useExternRef(getRootRef);\n const { sizeY = 'none' } = useAdaptivity();\n const [hover, setHover] = React.useState(false);\n\n const focusWithin = useFocusWithin(elRef);\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible: focusWithin,\n mode: styles['FormField--focus-visible'],\n });\n\n const handleMouseEnter = (e: MouseEvent) => {\n e.stopPropagation();\n setHover(true);\n };\n\n const handleMouseLeave = (e: MouseEvent) => {\n e.stopPropagation();\n setHover(false);\n };\n\n return (\n <Component\n {...restProps}\n ref={elRef}\n style={\n maxHeight !== undefined\n ? {\n ...style,\n maxHeight,\n }\n : style\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={classNames(\n styles['FormField'],\n mode === 'default' && styles['FormField--mode-default'],\n status !== 'default' && stylesStatus[status],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n disabled && styles['FormField--disabled'],\n !disabled && hover && styles['FormField--hover'],\n focusVisibleClassNames,\n className,\n )}\n >\n <div className={styles['FormField_scrollContainer']}>\n {before && renderIcon(before, beforeAlign, styles['FormField__before'])}\n <div className={styles['FormField__content']}>{children}</div>\n {after &&\n renderIcon(\n after,\n afterAlign,\n classNames(styles['FormField__after'], 'vkuiInternalFormField__after'),\n )}\n </div>\n <span aria-hidden className={styles['FormField__border']} />\n </Component>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusVisibleClassName","useFocusWithin","styles","sizeYClassNames","none","stylesStatus","error","valid","iconAlignClassNames","center","undefined","start","end","renderIcon","icon","align","className","div","span","FormField","Component","status","children","getRootRef","before","after","beforeAlign","afterAlign","disabled","mode","maxHeight","style","restProps","elRef","sizeY","hover","setHover","useState","focusWithin","focusVisibleClassNames","focusVisible","handleMouseEnter","e","stopPropagation","handleMouseLeave","ref","onMouseEnter","onMouseLeave","aria-hidden"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,wBAAwB,QAAQ,uCAAuC;AAChF,SAASC,cAAc,QAAQ,6BAA6B;AAE5D,OAAOC,YAAY,yBAAyB;AAE5C,MAAMC,kBAAkB;IACtBC,MAAMF,MAAM,CAAC,wBAAwB;IACrC,CAAC,UAAU,EAAEA,MAAM,CAAC,2BAA2B;AACjD;AAEA,MAAMG,eAAe;IACnBC,OAAOJ,MAAM,CAAC,0BAA0B;IACxCK,OAAOL,MAAM,CAAC,0BAA0B;AAC1C;AAEA,MAAMM,sBAAsB;IAC1BC,QAAQC;IACRC,OAAOT,MAAM,CAAC,+BAA+B;IAC7CU,KAAKV,MAAM,CAAC,6BAA6B;AAC3C;AAEA,MAAMW,aAAa,CAACC,MAAuBC,OAAwBC;IACjE,qBACE,KAACC;QAAID,WAAWd,MAAM,CAAC,yBAAyB;kBAC9C,cAAA,KAACgB;YAAKF,WAAWnB,WAAWW,mBAAmB,CAACO,MAAM,EAAEC;sBAAaF;;;AAG3E;AAqDA;;CAEC,GACD,OAAO,MAAMK,YAAY,CAAC,EACxBC,YAAY,MAAM,EAClBC,SAAS,SAAS,EAClBC,QAAQ,EACRC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,cAAc,QAAQ,EACtBC,aAAa,QAAQ,EACrBC,QAAQ,EACRC,OAAO,SAAS,EAChBb,SAAS,EACTc,SAAS,EACTC,KAAK,EACL,GAAGC,WACe;IAClB,MAAMC,QAAQlC,aAAawB;IAC3B,MAAM,EAAEW,QAAQ,MAAM,EAAE,GAAGpC;IAC3B,MAAM,CAACqC,OAAOC,SAAS,GAAGxC,MAAMyC,QAAQ,CAAC;IAEzC,MAAMC,cAAcrC,eAAegC;IACnC,MAAMM,yBAAyBvC,yBAAyB;QACtDwC,cAAcF;QACdT,MAAM3B,MAAM,CAAC,2BAA2B;IAC1C;IAEA,MAAMuC,mBAAmB,CAACC;QACxBA,EAAEC,eAAe;QACjBP,SAAS;IACX;IAEA,MAAMQ,mBAAmB,CAACF;QACxBA,EAAEC,eAAe;QACjBP,SAAS;IACX;IAEA,qBACE,MAAChB;QACE,GAAGY,SAAS;QACba,KAAKZ;QACLF,OACED,cAAcpB,YACV;YACE,GAAGqB,KAAK;YACRD;QACF,IACAC;QAENe,cAAcL;QACdM,cAAcH;QACd5B,WAAWnB,WACTK,MAAM,CAAC,YAAY,EACnB2B,SAAS,aAAa3B,MAAM,CAAC,0BAA0B,EACvDmB,WAAW,aAAahB,YAAY,CAACgB,OAAO,EAC5Ca,UAAU,aAAa/B,eAAe,CAAC+B,MAAM,EAC7CN,YAAY1B,MAAM,CAAC,sBAAsB,EACzC,CAAC0B,YAAYO,SAASjC,MAAM,CAAC,mBAAmB,EAChDqC,wBACAvB;;0BAGF,MAACC;gBAAID,WAAWd,MAAM,CAAC,4BAA4B;;oBAChDsB,UAAUX,WAAWW,QAAQE,aAAaxB,MAAM,CAAC,oBAAoB;kCACtE,KAACe;wBAAID,WAAWd,MAAM,CAAC,qBAAqB;kCAAGoB;;oBAC9CG,SACCZ,WACEY,OACAE,YACA9B,WAAWK,MAAM,CAAC,mBAAmB,EAAE;;;0BAG7C,KAACgB;gBAAK8B,aAAW;gBAAChC,WAAWd,MAAM,CAAC,oBAAoB;;;;AAG9D,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/FormField/FormField.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport type { HasComponent, HasRootRef } from '../../types';\nimport styles from './FormField.module.css';\n\nconst sizeYClassNames = {\n none: styles['FormField--sizeY-none'],\n compact: styles['FormField--sizeY-compact'],\n};\n\nconst stylesStatus = {\n error: styles['FormField--status-error'],\n valid: styles['FormField--status-valid'],\n};\n\nconst iconAlignClassNames = {\n center: undefined,\n start: styles['FormField__icon--align-start'],\n end: styles['FormField__icon--align-end'],\n};\n\nconst renderIcon = (icon: React.ReactNode, align: FieldIconsAlign, className: string) => {\n return (\n <div className={styles['FormField__iconWrapper']}>\n <span className={classNames(iconAlignClassNames[align], className)}>{icon}</span>\n </div>\n );\n};\n\nexport type FieldIconsAlign = 'start' | 'center' | 'end';\n\nexport interface FormFieldProps {\n status?: 'default' | 'error' | 'valid';\n /**\n * Добавляет иконку слева.\n *\n * Рекомендации:\n *\n * - Используйте следующие размеры иконок `12` | `16` | `20` | `24` | `28`.\n * - Используйте [IconButton](https://vkcom.github.io/VKUI/#/IconButton), если вам нужна кликабельная иконка.\n */\n before?: React.ReactNode;\n /**\n * Вертикальное выравнивание иконки слева\n */\n beforeAlign?: FieldIconsAlign;\n /**\n * Добавляет иконку справа.\n *\n * Рекомендации:\n *\n * - Используйте следующие размеры иконок `12` | `16` | `20` | `24` | `28`.\n * - Используйте [IconButton](https://vkcom.github.io/VKUI/#/IconButton), если вам нужна кликабельная иконка.\n */\n after?: React.ReactNode;\n /**\n * Вертикальное выравнивание иконки справа\n */\n afterAlign?: FieldIconsAlign;\n /**\n * Режим отображения.\n *\n * - `default` — показывает фон, обводку и, при наличии, текст-подсказку.\n * - `plain` — показывает только текст-подсказку.\n */\n mode?: 'default' | 'plain';\n /**\n * Максимальная высота поля\n */\n maxHeight?: number;\n}\n\nexport interface FormFieldOwnProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent,\n FormFieldProps {\n disabled?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormField\n */\nexport const FormField = ({\n Component = 'span',\n status = 'default',\n children,\n getRootRef,\n before,\n after,\n beforeAlign = 'center',\n afterAlign = 'center',\n disabled,\n mode = 'default',\n className,\n maxHeight,\n style,\n ...restProps\n}: FormFieldOwnProps): React.ReactNode => {\n const elRef = useExternRef(getRootRef);\n const { sizeY = 'none' } = useAdaptivity();\n const [hover, setHover] = React.useState(false);\n\n const focusWithin = useFocusWithin(elRef);\n const focusVisibleClassNames = useFocusVisibleClassName({\n focusVisible: focusWithin,\n mode: styles['FormField--focus-visible'],\n });\n\n const handleMouseEnter = (e: MouseEvent) => {\n e.stopPropagation();\n setHover(true);\n };\n\n const handleMouseLeave = (e: MouseEvent) => {\n e.stopPropagation();\n setHover(false);\n };\n\n return (\n <Component\n {...restProps}\n ref={elRef}\n style={\n maxHeight !== undefined\n ? {\n ...style,\n maxHeight,\n }\n : style\n }\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={classNames(\n styles['FormField'],\n mode === 'default' && styles['FormField--mode-default'],\n status !== 'default' && stylesStatus[status],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n disabled && styles['FormField--disabled'],\n !disabled && hover && styles['FormField--hover'],\n focusVisibleClassNames,\n className,\n )}\n >\n <div className={styles['FormField_scrollContainer']}>\n {before && renderIcon(before, beforeAlign, styles['FormField__before'])}\n <div className={styles['FormField__content']}>{children}</div>\n {after &&\n renderIcon(\n after,\n afterAlign,\n classNames(styles['FormField__after'], 'vkuiInternalFormField__after'),\n )}\n </div>\n <span aria-hidden className={styles['FormField__border']} />\n </Component>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusVisibleClassName","useFocusWithin","styles","sizeYClassNames","none","compact","stylesStatus","error","valid","iconAlignClassNames","center","undefined","start","end","renderIcon","icon","align","className","div","span","FormField","Component","status","children","getRootRef","before","after","beforeAlign","afterAlign","disabled","mode","maxHeight","style","restProps","elRef","sizeY","hover","setHover","useState","focusWithin","focusVisibleClassNames","focusVisible","handleMouseEnter","e","stopPropagation","handleMouseLeave","ref","onMouseEnter","onMouseLeave","aria-hidden"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,wBAAwB,QAAQ,uCAAuC;AAChF,SAASC,cAAc,QAAQ,6BAA6B;AAE5D,OAAOC,YAAY,yBAAyB;AAE5C,MAAMC,kBAAkB;IACtBC,MAAMF,MAAM,CAAC,wBAAwB;IACrCG,SAASH,MAAM,CAAC,2BAA2B;AAC7C;AAEA,MAAMI,eAAe;IACnBC,OAAOL,MAAM,CAAC,0BAA0B;IACxCM,OAAON,MAAM,CAAC,0BAA0B;AAC1C;AAEA,MAAMO,sBAAsB;IAC1BC,QAAQC;IACRC,OAAOV,MAAM,CAAC,+BAA+B;IAC7CW,KAAKX,MAAM,CAAC,6BAA6B;AAC3C;AAEA,MAAMY,aAAa,CAACC,MAAuBC,OAAwBC;IACjE,qBACE,KAACC;QAAID,WAAWf,MAAM,CAAC,yBAAyB;kBAC9C,cAAA,KAACiB;YAAKF,WAAWpB,WAAWY,mBAAmB,CAACO,MAAM,EAAEC;sBAAaF;;;AAG3E;AAqDA;;CAEC,GACD,OAAO,MAAMK,YAAY,CAAC,EACxBC,YAAY,MAAM,EAClBC,SAAS,SAAS,EAClBC,QAAQ,EACRC,UAAU,EACVC,MAAM,EACNC,KAAK,EACLC,cAAc,QAAQ,EACtBC,aAAa,QAAQ,EACrBC,QAAQ,EACRC,OAAO,SAAS,EAChBb,SAAS,EACTc,SAAS,EACTC,KAAK,EACL,GAAGC,WACe;IAClB,MAAMC,QAAQnC,aAAayB;IAC3B,MAAM,EAAEW,QAAQ,MAAM,EAAE,GAAGrC;IAC3B,MAAM,CAACsC,OAAOC,SAAS,GAAGzC,MAAM0C,QAAQ,CAAC;IAEzC,MAAMC,cAActC,eAAeiC;IACnC,MAAMM,yBAAyBxC,yBAAyB;QACtDyC,cAAcF;QACdT,MAAM5B,MAAM,CAAC,2BAA2B;IAC1C;IAEA,MAAMwC,mBAAmB,CAACC;QACxBA,EAAEC,eAAe;QACjBP,SAAS;IACX;IAEA,MAAMQ,mBAAmB,CAACF;QACxBA,EAAEC,eAAe;QACjBP,SAAS;IACX;IAEA,qBACE,MAAChB;QACE,GAAGY,SAAS;QACba,KAAKZ;QACLF,OACED,cAAcpB,YACV;YACE,GAAGqB,KAAK;YACRD;QACF,IACAC;QAENe,cAAcL;QACdM,cAAcH;QACd5B,WAAWpB,WACTK,MAAM,CAAC,YAAY,EACnB4B,SAAS,aAAa5B,MAAM,CAAC,0BAA0B,EACvDoB,WAAW,aAAahB,YAAY,CAACgB,OAAO,EAC5Ca,UAAU,aAAahC,eAAe,CAACgC,MAAM,EAC7CN,YAAY3B,MAAM,CAAC,sBAAsB,EACzC,CAAC2B,YAAYO,SAASlC,MAAM,CAAC,mBAAmB,EAChDsC,wBACAvB;;0BAGF,MAACC;gBAAID,WAAWf,MAAM,CAAC,4BAA4B;;oBAChDuB,UAAUX,WAAWW,QAAQE,aAAazB,MAAM,CAAC,oBAAoB;kCACtE,KAACgB;wBAAID,WAAWf,MAAM,CAAC,qBAAqB;kCAAGqB;;oBAC9CG,SACCZ,WACEY,OACAE,YACA/B,WAAWK,MAAM,CAAC,mBAAmB,EAAE;;;0BAG7C,KAACiB;gBAAK8B,aAAW;gBAAChC,WAAWf,MAAM,CAAC,oBAAoB;;;;AAG9D,EAAE"}
@@ -14,7 +14,7 @@ import { FormItemContext } from './context';
14
14
  import styles from './FormItem.module.css';
15
15
  const sizeYClassNames = {
16
16
  none: classNames(styles['FormItem--sizeY-none'], 'vkuiInternalFormItem--sizeY-none'),
17
- ['compact']: classNames(styles['FormItem--sizeY-compact'], 'vkuiInternalFormItem--sizeY-compact')
17
+ compact: classNames(styles['FormItem--sizeY-compact'], 'vkuiInternalFormItem--sizeY-compact')
18
18
  };
19
19
  const stylesStatus = {
20
20
  error: classNames(styles['FormItem--status-error'], 'vkuiInternalFormItem--status-error'),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FormItem/FormItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport type { HasComponent, HasRootRef } from '../../types';\nimport { Removable, type RemovableProps } from '../Removable/Removable';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { FormItemTop } from './FormItemTop/FormItemTop';\nimport { FormItemTopAside } from './FormItemTop/FormItemTopAside';\nimport { FormItemTopLabel } from './FormItemTop/FormItemTopLabel';\nimport { FormItemContext } from './context';\nimport styles from './FormItem.module.css';\n\nconst sizeYClassNames = {\n none: classNames(styles['FormItem--sizeY-none'], 'vkuiInternalFormItem--sizeY-none'),\n ['compact']: classNames(styles['FormItem--sizeY-compact'], 'vkuiInternalFormItem--sizeY-compact'),\n};\n\nconst stylesStatus = {\n error: classNames(styles['FormItem--status-error'], 'vkuiInternalFormItem--status-error'),\n valid: classNames(styles['FormItem--status-valid'], 'vkuiInternalFormItem--status-valid'),\n};\n\nexport interface FormItemProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent,\n RemovableProps {\n top?: React.ReactNode;\n topId?: string;\n /**\n * Многострочный вывод заголовка. По умолчанию текст не переносится при переполнении.\n */\n topMultiline?: boolean;\n /**\n * Позволяет поменять тег используемый для top\n * Если оставить пустым, то тег top будет span.\n * Если оставить пустым и использовать htmlFor, то тег top будет label.\n */\n topComponent?: React.ElementType;\n /**\n * Позволяет полностью заменить шапку поля пользовательским компонентом.\n *\n * @since 6.1.0\n *\n * TODO [>=7]: удалить и использовать top - оно будет принимать либо строку, либо подкомпонент\n */\n topNode?: React.ReactNode;\n bottom?: React.ReactNode;\n /**\n * Передаётся при использовании `bottom`.\n *\n * Должен совпадать с `aria-describedby`, который передаётся в компонент, отвечающий за пользовательский ввод.\n */\n bottomId?: string;\n status?: 'default' | 'error' | 'valid';\n /**\n * Дает возможность удалить `FormItem`. Рекомендуется использовать только для `Input` или `Select`.\n *\n * Режим `indent` предназначен для визуального отступа\n */\n removable?: boolean | 'indent';\n /**\n * Удаляет внешние отступы вокруг компонента\n * @since 5.8.0\n */\n noPadding?: boolean;\n /**\n * Помечает поле обязательным\n */\n required?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormItem\n */\nexport const FormItem: React.FC<FormItemProps> & {\n Top: typeof FormItemTop;\n TopLabel: typeof FormItemTopLabel;\n TopAside: typeof FormItemTopAside;\n} = ({\n children,\n top,\n topId,\n topMultiline,\n topComponent: topComponentProp,\n bottom,\n status = 'default',\n removable,\n onRemove,\n removePlaceholder = 'Удалить',\n getRootRef,\n htmlFor,\n bottomId,\n noPadding,\n topNode,\n required = false,\n ...restProps\n}: FormItemProps) => {\n const rootEl = useExternRef(getRootRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const wrappedChildren = (\n <React.Fragment>\n {hasReactNode(topNode) ? (\n topNode\n ) : hasReactNode(top) ? (\n <FormItemTop>\n <FormItemTopLabel\n htmlFor={htmlFor}\n Component={topComponentProp}\n multiline={topMultiline}\n id={topId}\n >\n {top}\n </FormItemTopLabel>\n </FormItemTop>\n ) : null}\n {children}\n {hasReactNode(bottom) && (\n <Footnote\n className={styles['FormItem__bottom']}\n id={bottomId}\n role={status === 'error' ? 'alert' : undefined}\n >\n {bottom}\n </Footnote>\n )}\n </React.Fragment>\n );\n\n const context = useObjectMemo({ required, topMultiline });\n\n return (\n <RootComponent\n {...restProps}\n getRootRef={rootEl}\n baseClassName={classNames(\n styles['FormItem'],\n !noPadding && styles['FormItem--withPadding'],\n 'vkuiInternalFormItem',\n status !== 'default' && stylesStatus[status],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n hasReactNode(top) &&\n classNames(styles['FormItem--withTop'], 'vkuiInternalFormItem--withTop'),\n removable && classNames(styles['FormItem--removable'], 'vkuiInternalFormItem--removable'),\n )}\n >\n <FormItemContext.Provider value={context}>\n {removable ? (\n <Removable\n align=\"start\"\n onRemove={(e) => {\n if (rootEl?.current) {\n onRemove?.(e, rootEl.current);\n }\n }}\n removePlaceholder={removePlaceholder}\n indent={removable === 'indent'}\n >\n <div\n className={classNames(\n styles['FormItem__removable'],\n 'vkuiInternalFormItem__removable',\n )}\n >\n {wrappedChildren}\n </div>\n </Removable>\n ) : (\n wrappedChildren\n )}\n </FormItemContext.Provider>\n </RootComponent>\n );\n};\n\nFormItem.displayName = 'FormItem';\n\nFormItem.Top = FormItemTop;\nFormItem.Top.displayName = 'FormItem.Top';\n\nFormItem.TopLabel = FormItemTopLabel;\nFormItem.TopLabel.displayName = 'FormItem.TopLabel';\n\nFormItem.TopAside = FormItemTopAside;\nFormItem.TopAside.displayName = 'FormItem.TopAside';\n"],"names":["React","classNames","hasReactNode","useAdaptivity","useExternRef","useObjectMemo","Removable","RootComponent","Footnote","FormItemTop","FormItemTopAside","FormItemTopLabel","FormItemContext","styles","sizeYClassNames","none","stylesStatus","error","valid","FormItem","children","top","topId","topMultiline","topComponent","topComponentProp","bottom","status","removable","onRemove","removePlaceholder","getRootRef","htmlFor","bottomId","noPadding","topNode","required","restProps","rootEl","sizeY","wrappedChildren","Fragment","Component","multiline","id","className","role","undefined","context","baseClassName","Provider","value","align","e","current","indent","div","displayName","Top","TopLabel","TopAside"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/FormItem/FormItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport type { HasComponent, HasRootRef } from '../../types';\nimport { Removable, type RemovableProps } from '../Removable/Removable';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { FormItemTop } from './FormItemTop/FormItemTop';\nimport { FormItemTopAside } from './FormItemTop/FormItemTopAside';\nimport { FormItemTopLabel } from './FormItemTop/FormItemTopLabel';\nimport { FormItemContext } from './context';\nimport styles from './FormItem.module.css';\n\nconst sizeYClassNames = {\n none: classNames(styles['FormItem--sizeY-none'], 'vkuiInternalFormItem--sizeY-none'),\n compact: classNames(styles['FormItem--sizeY-compact'], 'vkuiInternalFormItem--sizeY-compact'),\n};\n\nconst stylesStatus = {\n error: classNames(styles['FormItem--status-error'], 'vkuiInternalFormItem--status-error'),\n valid: classNames(styles['FormItem--status-valid'], 'vkuiInternalFormItem--status-valid'),\n};\n\nexport interface FormItemProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent,\n RemovableProps {\n top?: React.ReactNode;\n topId?: string;\n /**\n * Многострочный вывод заголовка. По умолчанию текст не переносится при переполнении.\n */\n topMultiline?: boolean;\n /**\n * Позволяет поменять тег используемый для top\n * Если оставить пустым, то тег top будет span.\n * Если оставить пустым и использовать htmlFor, то тег top будет label.\n */\n topComponent?: React.ElementType;\n /**\n * Позволяет полностью заменить шапку поля пользовательским компонентом.\n *\n * @since 6.1.0\n *\n * TODO [>=7]: удалить и использовать top - оно будет принимать либо строку, либо подкомпонент\n */\n topNode?: React.ReactNode;\n bottom?: React.ReactNode;\n /**\n * Передаётся при использовании `bottom`.\n *\n * Должен совпадать с `aria-describedby`, который передаётся в компонент, отвечающий за пользовательский ввод.\n */\n bottomId?: string;\n status?: 'default' | 'error' | 'valid';\n /**\n * Дает возможность удалить `FormItem`. Рекомендуется использовать только для `Input` или `Select`.\n *\n * Режим `indent` предназначен для визуального отступа\n */\n removable?: boolean | 'indent';\n /**\n * Удаляет внешние отступы вокруг компонента\n * @since 5.8.0\n */\n noPadding?: boolean;\n /**\n * Помечает поле обязательным\n */\n required?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormItem\n */\nexport const FormItem: React.FC<FormItemProps> & {\n Top: typeof FormItemTop;\n TopLabel: typeof FormItemTopLabel;\n TopAside: typeof FormItemTopAside;\n} = ({\n children,\n top,\n topId,\n topMultiline,\n topComponent: topComponentProp,\n bottom,\n status = 'default',\n removable,\n onRemove,\n removePlaceholder = 'Удалить',\n getRootRef,\n htmlFor,\n bottomId,\n noPadding,\n topNode,\n required = false,\n ...restProps\n}: FormItemProps) => {\n const rootEl = useExternRef(getRootRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const wrappedChildren = (\n <React.Fragment>\n {hasReactNode(topNode) ? (\n topNode\n ) : hasReactNode(top) ? (\n <FormItemTop>\n <FormItemTopLabel\n htmlFor={htmlFor}\n Component={topComponentProp}\n multiline={topMultiline}\n id={topId}\n >\n {top}\n </FormItemTopLabel>\n </FormItemTop>\n ) : null}\n {children}\n {hasReactNode(bottom) && (\n <Footnote\n className={styles['FormItem__bottom']}\n id={bottomId}\n role={status === 'error' ? 'alert' : undefined}\n >\n {bottom}\n </Footnote>\n )}\n </React.Fragment>\n );\n\n const context = useObjectMemo({ required, topMultiline });\n\n return (\n <RootComponent\n {...restProps}\n getRootRef={rootEl}\n baseClassName={classNames(\n styles['FormItem'],\n !noPadding && styles['FormItem--withPadding'],\n 'vkuiInternalFormItem',\n status !== 'default' && stylesStatus[status],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n hasReactNode(top) &&\n classNames(styles['FormItem--withTop'], 'vkuiInternalFormItem--withTop'),\n removable && classNames(styles['FormItem--removable'], 'vkuiInternalFormItem--removable'),\n )}\n >\n <FormItemContext.Provider value={context}>\n {removable ? (\n <Removable\n align=\"start\"\n onRemove={(e) => {\n if (rootEl?.current) {\n onRemove?.(e, rootEl.current);\n }\n }}\n removePlaceholder={removePlaceholder}\n indent={removable === 'indent'}\n >\n <div\n className={classNames(\n styles['FormItem__removable'],\n 'vkuiInternalFormItem__removable',\n )}\n >\n {wrappedChildren}\n </div>\n </Removable>\n ) : (\n wrappedChildren\n )}\n </FormItemContext.Provider>\n </RootComponent>\n );\n};\n\nFormItem.displayName = 'FormItem';\n\nFormItem.Top = FormItemTop;\nFormItem.Top.displayName = 'FormItem.Top';\n\nFormItem.TopLabel = FormItemTopLabel;\nFormItem.TopLabel.displayName = 'FormItem.TopLabel';\n\nFormItem.TopAside = FormItemTopAside;\nFormItem.TopAside.displayName = 'FormItem.TopAside';\n"],"names":["React","classNames","hasReactNode","useAdaptivity","useExternRef","useObjectMemo","Removable","RootComponent","Footnote","FormItemTop","FormItemTopAside","FormItemTopLabel","FormItemContext","styles","sizeYClassNames","none","compact","stylesStatus","error","valid","FormItem","children","top","topId","topMultiline","topComponent","topComponentProp","bottom","status","removable","onRemove","removePlaceholder","getRootRef","htmlFor","bottomId","noPadding","topNode","required","restProps","rootEl","sizeY","wrappedChildren","Fragment","Component","multiline","id","className","role","undefined","context","baseClassName","Provider","value","align","e","current","indent","div","displayName","Top","TopLabel","TopAside"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { RootComponent } from '../RootComponent/RootComponent';
8
8
  import styles from './FormLayoutGroup.module.css';
9
9
  const sizeYClassNames = {
10
10
  none: classNames(styles['FormLayoutGroup--sizeY-none'], 'vkuiInternalFormLayoutGroup--sizeY-none'),
11
- ['compact']: classNames(styles['FormLayoutGroup--sizeY-compact'], 'vkuiInternalFormLayoutGroup--sizeY-compact')
11
+ compact: classNames(styles['FormLayoutGroup--sizeY-compact'], 'vkuiInternalFormLayoutGroup--sizeY-compact')
12
12
  };
13
13
  /**
14
14
  * @see https://vkcom.github.io/VKUI/#/FormLayoutGroup
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FormLayoutGroup/FormLayoutGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Removable, type RemovableProps } from '../Removable/Removable';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './FormLayoutGroup.module.css';\n\nconst sizeYClassNames = {\n none: classNames(\n styles['FormLayoutGroup--sizeY-none'],\n 'vkuiInternalFormLayoutGroup--sizeY-none',\n ),\n ['compact']: classNames(\n styles['FormLayoutGroup--sizeY-compact'],\n 'vkuiInternalFormLayoutGroup--sizeY-compact',\n ),\n};\n\nexport interface FormLayoutGroupProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n RemovableProps {\n mode?: 'vertical' | 'horizontal';\n /**\n * Только для режима horizontal. Дает возможность удалить всю группу `FormItem`.\n *\n * Режим `indent` предназначен для визуального отступа.\n */\n removable?: boolean | 'indent';\n\n /**\n * Дает возможность склеить несколько `FormItem`.\n */\n segmented?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormLayoutGroup\n */\nexport const FormLayoutGroup = ({\n children,\n mode = 'vertical',\n removable,\n segmented,\n removePlaceholder = 'Удалить',\n onRemove,\n getRootRef,\n ...restProps\n}: FormLayoutGroupProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const isRemovable = removable && mode === 'horizontal';\n const rootEl = useExternRef(getRootRef);\n\n return (\n <RootComponent\n getRootRef={rootEl}\n Component=\"fieldset\"\n baseClassName={classNames(\n styles['FormLayoutGroup'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n mode === 'horizontal' &&\n classNames(\n styles['FormLayoutGroup--mode-horizontal'],\n 'vkuiInternalFormLayoutGroup--mode-horizontal',\n ),\n mode === 'vertical' && 'vkuiInternalFormLayoutGroup--mode-vertical',\n isRemovable &&\n classNames(\n styles['FormLayoutGroup--removable'],\n 'vkuiInternalFormLayoutGroup--removable',\n ),\n segmented &&\n classNames(\n styles['FormLayoutGroup--segmented'],\n 'vkuiInternalFormLayoutGroup--segmented',\n ),\n )}\n {...restProps}\n >\n {isRemovable ? (\n <Removable\n className={styles['FormLayoutGroup__removable']}\n align=\"start\"\n removePlaceholder={removePlaceholder}\n onRemove={(e) => {\n if (rootEl?.current) {\n onRemove?.(e, rootEl.current);\n }\n }}\n indent={removable === 'indent'}\n >\n {children}\n </Removable>\n ) : (\n <React.Fragment>\n {children}\n <span className={styles['FormLayoutGroup__offset']} aria-hidden />\n </React.Fragment>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","Removable","RootComponent","styles","sizeYClassNames","none","FormLayoutGroup","children","mode","removable","segmented","removePlaceholder","onRemove","getRootRef","restProps","sizeY","isRemovable","rootEl","Component","baseClassName","className","align","e","current","indent","Fragment","span","aria-hidden"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,YAAY,QAAQ,2BAA2B;AAExD,SAASC,SAAS,QAA6B,yBAAyB;AACxE,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,OAAOC,YAAY,+BAA+B;AAElD,MAAMC,kBAAkB;IACtBC,MAAMP,WACJK,MAAM,CAAC,8BAA8B,EACrC;IAEF,CAAC,UAAU,EAAEL,WACXK,MAAM,CAAC,iCAAiC,EACxC;AAEJ;AAmBA;;CAEC,GACD,OAAO,MAAMG,kBAAkB,CAAC,EAC9BC,QAAQ,EACRC,OAAO,UAAU,EACjBC,SAAS,EACTC,SAAS,EACTC,oBAAoB,SAAS,EAC7BC,QAAQ,EACRC,UAAU,EACV,GAAGC,WACkB;IACrB,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGhB;IAC3B,MAAMiB,cAAcP,aAAaD,SAAS;IAC1C,MAAMS,SAASjB,aAAaa;IAE5B,qBACE,KAACX;QACCW,YAAYI;QACZC,WAAU;QACVC,eAAerB,WACbK,MAAM,CAAC,kBAAkB,EACzBY,UAAU,aAAaX,eAAe,CAACW,MAAM,EAC7CP,SAAS,gBACPV,WACEK,MAAM,CAAC,mCAAmC,EAC1C,iDAEJK,SAAS,cAAc,8CACvBQ,eACElB,WACEK,MAAM,CAAC,6BAA6B,EACpC,2CAEJO,aACEZ,WACEK,MAAM,CAAC,6BAA6B,EACpC;QAGL,GAAGW,SAAS;kBAEZE,4BACC,KAACf;YACCmB,WAAWjB,MAAM,CAAC,6BAA6B;YAC/CkB,OAAM;YACNV,mBAAmBA;YACnBC,UAAU,CAACU;gBACT,IAAIL,QAAQM,SAAS;oBACnBX,WAAWU,GAAGL,OAAOM,OAAO;gBAC9B;YACF;YACAC,QAAQf,cAAc;sBAErBF;2BAGH,MAACV,MAAM4B,QAAQ;;gBACZlB;8BACD,KAACmB;oBAAKN,WAAWjB,MAAM,CAAC,0BAA0B;oBAAEwB,aAAW;;;;;AAKzE,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/FormLayoutGroup/FormLayoutGroup.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Removable, type RemovableProps } from '../Removable/Removable';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './FormLayoutGroup.module.css';\n\nconst sizeYClassNames = {\n none: classNames(\n styles['FormLayoutGroup--sizeY-none'],\n 'vkuiInternalFormLayoutGroup--sizeY-none',\n ),\n compact: classNames(\n styles['FormLayoutGroup--sizeY-compact'],\n 'vkuiInternalFormLayoutGroup--sizeY-compact',\n ),\n};\n\nexport interface FormLayoutGroupProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n RemovableProps {\n mode?: 'vertical' | 'horizontal';\n /**\n * Только для режима horizontal. Дает возможность удалить всю группу `FormItem`.\n *\n * Режим `indent` предназначен для визуального отступа.\n */\n removable?: boolean | 'indent';\n\n /**\n * Дает возможность склеить несколько `FormItem`.\n */\n segmented?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FormLayoutGroup\n */\nexport const FormLayoutGroup = ({\n children,\n mode = 'vertical',\n removable,\n segmented,\n removePlaceholder = 'Удалить',\n onRemove,\n getRootRef,\n ...restProps\n}: FormLayoutGroupProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const isRemovable = removable && mode === 'horizontal';\n const rootEl = useExternRef(getRootRef);\n\n return (\n <RootComponent\n getRootRef={rootEl}\n Component=\"fieldset\"\n baseClassName={classNames(\n styles['FormLayoutGroup'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n mode === 'horizontal' &&\n classNames(\n styles['FormLayoutGroup--mode-horizontal'],\n 'vkuiInternalFormLayoutGroup--mode-horizontal',\n ),\n mode === 'vertical' && 'vkuiInternalFormLayoutGroup--mode-vertical',\n isRemovable &&\n classNames(\n styles['FormLayoutGroup--removable'],\n 'vkuiInternalFormLayoutGroup--removable',\n ),\n segmented &&\n classNames(\n styles['FormLayoutGroup--segmented'],\n 'vkuiInternalFormLayoutGroup--segmented',\n ),\n )}\n {...restProps}\n >\n {isRemovable ? (\n <Removable\n className={styles['FormLayoutGroup__removable']}\n align=\"start\"\n removePlaceholder={removePlaceholder}\n onRemove={(e) => {\n if (rootEl?.current) {\n onRemove?.(e, rootEl.current);\n }\n }}\n indent={removable === 'indent'}\n >\n {children}\n </Removable>\n ) : (\n <React.Fragment>\n {children}\n <span className={styles['FormLayoutGroup__offset']} aria-hidden />\n </React.Fragment>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","Removable","RootComponent","styles","sizeYClassNames","none","compact","FormLayoutGroup","children","mode","removable","segmented","removePlaceholder","onRemove","getRootRef","restProps","sizeY","isRemovable","rootEl","Component","baseClassName","className","align","e","current","indent","Fragment","span","aria-hidden"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,YAAY,QAAQ,2BAA2B;AAExD,SAASC,SAAS,QAA6B,yBAAyB;AACxE,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,OAAOC,YAAY,+BAA+B;AAElD,MAAMC,kBAAkB;IACtBC,MAAMP,WACJK,MAAM,CAAC,8BAA8B,EACrC;IAEFG,SAASR,WACPK,MAAM,CAAC,iCAAiC,EACxC;AAEJ;AAmBA;;CAEC,GACD,OAAO,MAAMI,kBAAkB,CAAC,EAC9BC,QAAQ,EACRC,OAAO,UAAU,EACjBC,SAAS,EACTC,SAAS,EACTC,oBAAoB,SAAS,EAC7BC,QAAQ,EACRC,UAAU,EACV,GAAGC,WACkB;IACrB,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGjB;IAC3B,MAAMkB,cAAcP,aAAaD,SAAS;IAC1C,MAAMS,SAASlB,aAAac;IAE5B,qBACE,KAACZ;QACCY,YAAYI;QACZC,WAAU;QACVC,eAAetB,WACbK,MAAM,CAAC,kBAAkB,EACzBa,UAAU,aAAaZ,eAAe,CAACY,MAAM,EAC7CP,SAAS,gBACPX,WACEK,MAAM,CAAC,mCAAmC,EAC1C,iDAEJM,SAAS,cAAc,8CACvBQ,eACEnB,WACEK,MAAM,CAAC,6BAA6B,EACpC,2CAEJQ,aACEb,WACEK,MAAM,CAAC,6BAA6B,EACpC;QAGL,GAAGY,SAAS;kBAEZE,4BACC,KAAChB;YACCoB,WAAWlB,MAAM,CAAC,6BAA6B;YAC/CmB,OAAM;YACNV,mBAAmBA;YACnBC,UAAU,CAACU;gBACT,IAAIL,QAAQM,SAAS;oBACnBX,WAAWU,GAAGL,OAAOM,OAAO;gBAC9B;YACF;YACAC,QAAQf,cAAc;sBAErBF;2BAGH,MAACX,MAAM6B,QAAQ;;gBACZlB;8BACD,KAACmB;oBAAKN,WAAWlB,MAAM,CAAC,0BAA0B;oBAAEyB,aAAW;;;;;AAKzE,EAAE"}
@@ -7,7 +7,7 @@ import { UnstyledTextField } from '../UnstyledTextField/UnstyledTextField';
7
7
  import styles from './Input.module.css';
8
8
  const sizeYClassNames = {
9
9
  none: styles['Input--sizeY-none'],
10
- ['compact']: styles['Input--sizeY-compact']
10
+ compact: styles['Input--sizeY-compact']
11
11
  };
12
12
  /**
13
13
  * @see https://vkcom.github.io/VKUI/#/Input
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { UnstyledTextField } from '../UnstyledTextField/UnstyledTextField';\nimport styles from './Input.module.css';\n\nconst sizeYClassNames = {\n none: styles['Input--sizeY-none'],\n ['compact']: styles['Input--sizeY-compact'],\n};\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'maxHeight'> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Input\n */\nexport const Input = ({\n type = 'text',\n align = 'left',\n getRef,\n className,\n getRootRef,\n style,\n before,\n after,\n status,\n mode,\n ...restProps\n}: InputProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <FormField\n style={style}\n className={classNames(\n styles['Input'],\n align === 'right' && styles['Input--align-right'],\n align === 'center' && styles['Input--align-center'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles['Input--hasBefore'],\n after && styles['Input--hasAfter'],\n className,\n )}\n getRootRef={getRootRef}\n before={before}\n after={after}\n disabled={restProps.disabled}\n mode={mode}\n status={status}\n >\n <UnstyledTextField\n {...restProps}\n as=\"input\"\n type={type}\n className={styles['Input__el']}\n getRootRef={getRef}\n />\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","FormField","UnstyledTextField","styles","sizeYClassNames","none","Input","type","align","getRef","className","getRootRef","style","before","after","status","mode","restProps","sizeY","disabled","as"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAE1D,SAASC,SAAS,QAA6B,yBAAyB;AACxE,SAASC,iBAAiB,QAAQ,yCAAyC;AAC3E,OAAOC,YAAY,qBAAqB;AAExC,MAAMC,kBAAkB;IACtBC,MAAMF,MAAM,CAAC,oBAAoB;IACjC,CAAC,UAAU,EAAEA,MAAM,CAAC,uBAAuB;AAC7C;AASA;;CAEC,GACD,OAAO,MAAMG,QAAQ,CAAC,EACpBC,OAAO,MAAM,EACbC,QAAQ,MAAM,EACdC,MAAM,EACNC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJ,GAAGC,WACQ;IACX,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGlB;IAE3B,qBACE,KAACC;QACCW,OAAOA;QACPF,WAAWX,WACTI,MAAM,CAAC,QAAQ,EACfK,UAAU,WAAWL,MAAM,CAAC,qBAAqB,EACjDK,UAAU,YAAYL,MAAM,CAAC,sBAAsB,EACnDe,UAAU,aAAad,eAAe,CAACc,MAAM,EAC7CL,UAAUV,MAAM,CAAC,mBAAmB,EACpCW,SAASX,MAAM,CAAC,kBAAkB,EAClCO;QAEFC,YAAYA;QACZE,QAAQA;QACRC,OAAOA;QACPK,UAAUF,UAAUE,QAAQ;QAC5BH,MAAMA;QACND,QAAQA;kBAER,cAAA,KAACb;YACE,GAAGe,SAAS;YACbG,IAAG;YACHb,MAAMA;YACNG,WAAWP,MAAM,CAAC,YAAY;YAC9BQ,YAAYF;;;AAIpB,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { UnstyledTextField } from '../UnstyledTextField/UnstyledTextField';\nimport styles from './Input.module.css';\n\nconst sizeYClassNames = {\n none: styles['Input--sizeY-none'],\n compact: styles['Input--sizeY-compact'],\n};\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'maxHeight'> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Input\n */\nexport const Input = ({\n type = 'text',\n align = 'left',\n getRef,\n className,\n getRootRef,\n style,\n before,\n after,\n status,\n mode,\n ...restProps\n}: InputProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <FormField\n style={style}\n className={classNames(\n styles['Input'],\n align === 'right' && styles['Input--align-right'],\n align === 'center' && styles['Input--align-center'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles['Input--hasBefore'],\n after && styles['Input--hasAfter'],\n className,\n )}\n getRootRef={getRootRef}\n before={before}\n after={after}\n disabled={restProps.disabled}\n mode={mode}\n status={status}\n >\n <UnstyledTextField\n {...restProps}\n as=\"input\"\n type={type}\n className={styles['Input__el']}\n getRootRef={getRef}\n />\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","FormField","UnstyledTextField","styles","sizeYClassNames","none","compact","Input","type","align","getRef","className","getRootRef","style","before","after","status","mode","restProps","sizeY","disabled","as"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,4BAA4B;AAE1D,SAASC,SAAS,QAA6B,yBAAyB;AACxE,SAASC,iBAAiB,QAAQ,yCAAyC;AAC3E,OAAOC,YAAY,qBAAqB;AAExC,MAAMC,kBAAkB;IACtBC,MAAMF,MAAM,CAAC,oBAAoB;IACjCG,SAASH,MAAM,CAAC,uBAAuB;AACzC;AASA;;CAEC,GACD,OAAO,MAAMI,QAAQ,CAAC,EACpBC,OAAO,MAAM,EACbC,QAAQ,MAAM,EACdC,MAAM,EACNC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJ,GAAGC,WACQ;IACX,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGnB;IAE3B,qBACE,KAACC;QACCY,OAAOA;QACPF,WAAWZ,WACTI,MAAM,CAAC,QAAQ,EACfM,UAAU,WAAWN,MAAM,CAAC,qBAAqB,EACjDM,UAAU,YAAYN,MAAM,CAAC,sBAAsB,EACnDgB,UAAU,aAAaf,eAAe,CAACe,MAAM,EAC7CL,UAAUX,MAAM,CAAC,mBAAmB,EACpCY,SAASZ,MAAM,CAAC,kBAAkB,EAClCQ;QAEFC,YAAYA;QACZE,QAAQA;QACRC,OAAOA;QACPK,UAAUF,UAAUE,QAAQ;QAC5BH,MAAMA;QACND,QAAQA;kBAER,cAAA,KAACd;YACE,GAAGgB,SAAS;YACbG,IAAG;YACHb,MAAMA;YACNG,WAAWR,MAAM,CAAC,YAAY;YAC9BS,YAAYF;;;AAIpB,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMvE,eAAO,MAAM,gBAAgB,0HAS1B,qBAAqB,KAAG,KAAK,CAAC,SAyMhC,CAAC"}
1
+ {"version":3,"file":"ModalRootDesktop.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,qBAAqB,EAAoB,MAAM,SAAS,CAAC;AAMvE,eAAO,MAAM,gBAAgB,0HAS1B,qBAAqB,KAAG,KAAK,CAAC,SAqNhC,CAAC"}
@@ -100,7 +100,15 @@ export const ModalRootDesktop = ({ activeModal: activeModalProp, children, noFoc
100
100
  // Анимация закрытия модального окна
101
101
  if (!activeModal) {
102
102
  requestAnimationFrame(()=>{
103
- waitTransitionFinish(prevModalState?.innerElement, ()=>onExited(id), timeout);
103
+ waitTransitionFinish(prevModalState?.innerElement, (event)=>{
104
+ // Исключаем дочерние элементы
105
+ if (event && event.target === prevModalState?.innerElement) {
106
+ onExited(id);
107
+ } else if (!event) {
108
+ // Вызвался по тайм-ауту
109
+ onExited(id);
110
+ }
111
+ }, timeout);
104
112
  animateModalOpacity(prevModalState, false);
105
113
  setMaskOpacity(prevModalState, 0);
106
114
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport type { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n noFocusToDialog = false,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n modalOverlayTestId,\n}: ModalRootWithDOMProps): React.ReactNode => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered: onEnteredProp,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const waitTransitionFinish = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === 'ios' ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const onEntered = ({ id, modalElement }: ModalsStateEntry) => {\n if (!noFocusToDialog && modalElement && !modalElement.contains(document!.activeElement)) {\n modalElement.focus();\n }\n\n onEnteredProp(id);\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal && enteringState) {\n waitTransitionFinish(enteringState.innerElement, () => onEntered(enteringState), timeout);\n animateModalOpacity(enteringState, true);\n setMaskOpacity(enteringState, 1);\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n if (enteringState) {\n onEntered(enteringState);\n }\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(prevModalState?.innerElement, () => onExited(id), timeout);\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n ref={maskElementRef}\n onClick={onExit}\n />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n autoFocus={false}\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["React","classNames","noop","clamp","useObjectMemo","usePrevious","useWaitTransitionFinish","useDOM","getNavId","warnOnce","useConfigProvider","FocusTrap","ModalRootContext","useModalManager","styles","warn","ModalRootDesktop","activeModal","activeModalProp","children","noFocusToDialog","onOpen","onOpened","onClose","onClosed","modalOverlayTestId","maskElementRef","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","hasCustomPanelHeaderAfter","platform","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onEnteredProp","onExited","history","delayEnter","waitTransitionFinish","prevProps","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","toString","modalElement","contains","activeElement","focus","openModal","enteringState","closeModal","prevModalState","useEffect","Provider","value","div","className","data-testid","ref","onClick","map","Modal","modalId","props","key","autoFocus","restoreFocus"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRootDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePrevious } from '../../hooks/usePrevious';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { useDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalRootContext, type ModalRootContextInterface } from './ModalRootContext';\nimport type { ModalRootWithDOMProps, ModalsStateEntry } from './types';\nimport { useModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nexport const ModalRootDesktop = ({\n activeModal: activeModalProp,\n children,\n noFocusToDialog = false,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n modalOverlayTestId,\n}: ModalRootWithDOMProps): React.ReactNode => {\n const maskElementRef = React.useRef<HTMLDivElement>(null);\n const maskAnimationFrame = React.useRef<number | undefined>(undefined);\n const restoreFocusTo = React.useRef<HTMLElement | undefined>(undefined);\n\n const { document } = useDOM();\n const { hasCustomPanelHeaderAfter, platform } = useConfigProvider();\n const {\n activeModal,\n exitingModal,\n onExit,\n getModalState,\n enteringModal,\n onEnter,\n onEntered: onEnteredProp,\n onExited,\n history,\n delayEnter,\n } = useModalManager(activeModalProp, children, onOpen, onOpened, onClose, onClosed, noop);\n\n const waitTransitionFinish = useWaitTransitionFinish();\n const prevProps = usePrevious({\n exitingModal,\n enteringModal,\n activeModal,\n });\n const modalRootContext: ModalRootContextInterface = useObjectMemo({\n updateModalHeight: () => undefined,\n registerModal: ({ id, ...data }) => Object.assign(getModalState(id) ?? {}, data),\n onClose: onExit,\n isInsideModal: true,\n });\n\n const timeout = platform === 'ios' ? 400 : 320;\n const modals = React.Children.toArray(children) as React.ReactElement[];\n\n /* Анимирует сдвиг модального окна */\n const animateModalOpacity = (modalState: ModalsStateEntry | undefined, display: boolean) => {\n if (modalState?.innerElement) {\n modalState.innerElement.style.transition = '';\n modalState.innerElement.style.transitionDelay = display && delayEnter ? `${timeout}ms` : '';\n modalState.innerElement.style.opacity = display ? '1' : '0';\n }\n };\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n const setMaskOpacity = (modalState: ModalsStateEntry, forceOpacity: number | null = null) => {\n if (forceOpacity === null && history?.[0] !== modalState.id) {\n return;\n }\n\n if (maskAnimationFrame.current) {\n cancelAnimationFrame(maskAnimationFrame.current);\n }\n maskAnimationFrame.current = requestAnimationFrame(() => {\n if (maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n }\n });\n };\n\n const onEntered = ({ id, modalElement }: ModalsStateEntry) => {\n if (!noFocusToDialog && modalElement && !modalElement.contains(document!.activeElement)) {\n modalElement.focus();\n }\n\n onEnteredProp(id);\n };\n\n const openModal = () => {\n if (!enteringModal || !prevProps) {\n return;\n }\n\n const enteringState = getModalState(enteringModal);\n onEnter();\n\n // Анимация открытия модального окна\n if (!prevProps.exitingModal) {\n requestAnimationFrame(() => {\n if (enteringModal === enteringModal && enteringState) {\n waitTransitionFinish(enteringState.innerElement, () => onEntered(enteringState), timeout);\n animateModalOpacity(enteringState, true);\n setMaskOpacity(enteringState, 1);\n }\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n requestAnimationFrame(() => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transition = 'none';\n enteringState.innerElement.style.opacity = '1';\n setMaskOpacity(enteringState, 1);\n }\n });\n\n if (enteringState) {\n onEntered(enteringState);\n }\n };\n\n const closeModal = (id: string) => {\n const prevModalState = getModalState(id);\n if (!prevModalState) {\n return;\n }\n\n // Анимация закрытия модального окна\n if (!activeModal) {\n requestAnimationFrame(() => {\n waitTransitionFinish(\n prevModalState?.innerElement,\n (event) => {\n // Исключаем дочерние элементы\n if (event && event.target === prevModalState?.innerElement) {\n onExited(id);\n } else if (!event) {\n // Вызвался по тайм-ауту\n onExited(id);\n }\n },\n timeout,\n );\n animateModalOpacity(prevModalState, false);\n setMaskOpacity(prevModalState, 0);\n });\n\n return;\n }\n\n // Переход между модальными окнами без анимации\n onExited(id);\n };\n\n React.useEffect(() => {\n if (!prevProps) {\n return;\n }\n\n // transition phase 2: animate exiting modal\n if (exitingModal && exitingModal !== prevProps.exitingModal) {\n closeModal(exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (enteringModal && enteringModal !== prevProps.enteringModal) {\n openModal();\n }\n\n // focus restoration\n if (activeModal && !prevProps.activeModal) {\n restoreFocusTo.current = (document?.activeElement ?? undefined) as HTMLElement | undefined;\n }\n if (!activeModal && !exitingModal && restoreFocusTo.current) {\n restoreFocusTo.current.focus();\n restoreFocusTo.current = undefined;\n }\n });\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <ModalRootContext.Provider value={modalRootContext}>\n <div\n className={classNames(\n styles['ModalRoot'],\n hasCustomPanelHeaderAfter && styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n styles['ModalRoot--desktop'],\n )}\n >\n <div\n data-testid={modalOverlayTestId}\n className={styles['ModalRoot__mask']}\n ref={maskElementRef}\n onClick={onExit}\n />\n <div className={styles['ModalRoot__viewport']}>\n {modals.map((Modal: React.ReactElement) => {\n const modalId = getNavId(Modal.props, warn);\n if (modalId !== activeModal && modalId !== exitingModal) {\n return null;\n }\n\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n autoFocus={false}\n restoreFocus={false}\n onClose={onExit}\n timeout={timeout}\n key={key}\n className={styles['ModalRoot__modal']}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </div>\n </ModalRootContext.Provider>\n );\n};\n"],"names":["React","classNames","noop","clamp","useObjectMemo","usePrevious","useWaitTransitionFinish","useDOM","getNavId","warnOnce","useConfigProvider","FocusTrap","ModalRootContext","useModalManager","styles","warn","ModalRootDesktop","activeModal","activeModalProp","children","noFocusToDialog","onOpen","onOpened","onClose","onClosed","modalOverlayTestId","maskElementRef","useRef","maskAnimationFrame","undefined","restoreFocusTo","document","hasCustomPanelHeaderAfter","platform","exitingModal","onExit","getModalState","enteringModal","onEnter","onEntered","onEnteredProp","onExited","history","delayEnter","waitTransitionFinish","prevProps","modalRootContext","updateModalHeight","registerModal","id","data","Object","assign","isInsideModal","timeout","modals","Children","toArray","animateModalOpacity","modalState","display","innerElement","style","transition","transitionDelay","opacity","setMaskOpacity","forceOpacity","current","cancelAnimationFrame","requestAnimationFrame","translateY","translateYCurrent","toString","modalElement","contains","activeElement","focus","openModal","enteringState","closeModal","prevModalState","event","target","useEffect","Provider","value","div","className","data-testid","ref","onClick","map","Modal","modalId","props","key","autoFocus","restoreFocus"],"mappings":"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"}
@@ -12,7 +12,7 @@ import { SelectTypography } from '../SelectTypography/SelectTypography';
12
12
  import styles from '../Select/Select.module.css';
13
13
  const sizeYClassNames = {
14
14
  none: styles['Select--sizeY-none'],
15
- ['compact']: styles['Select--sizeY-compact']
15
+ compact: styles['Select--sizeY-compact']
16
16
  };
17
17
  /**
18
18
  * @see https://vkcom.github.io/VKUI/#/NativeSelect