@vkontakte/vkui 7.5.4 → 7.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/dist/components/Calendar/Calendar.js +6 -6
  2. package/dist/components/Calendar/Calendar.js.map +1 -1
  3. package/dist/components/CalendarDays/CalendarDays.js +3 -3
  4. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  5. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  6. package/dist/components/CalendarRange/CalendarRange.js +16 -14
  7. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  8. package/dist/components/CalendarRange/utils.d.ts.map +1 -1
  9. package/dist/components/CalendarRange/utils.js +6 -5
  10. package/dist/components/CalendarRange/utils.js.map +1 -1
  11. package/dist/components/Cell/Cell.d.ts.map +1 -1
  12. package/dist/components/Cell/Cell.js +6 -3
  13. package/dist/components/Cell/Cell.js.map +1 -1
  14. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts +5 -3
  15. package/dist/components/CellButtonGroup/CellButtonGroup.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.d.ts +4 -0
  17. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  18. package/dist/components/Checkbox/Checkbox.js +4 -2
  19. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  20. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  21. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  22. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +6 -3
  23. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  24. package/dist/components/ChipsInputBase/Chip/Chip.d.ts +41 -2
  25. package/dist/components/ChipsInputBase/Chip/Chip.d.ts.map +1 -1
  26. package/dist/components/ChipsInputBase/Chip/Chip.js +7 -2
  27. package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  28. package/dist/components/ChipsInputBase/types.d.ts +2 -35
  29. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  30. package/dist/components/ChipsInputBase/types.js.map +1 -1
  31. package/dist/components/ContentBadge/ContentBadge.d.ts +1 -1
  32. package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
  33. package/dist/components/ContentBadge/ContentBadge.js +15 -9
  34. package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
  35. package/dist/components/ContentCard/ContentCard.d.ts +1 -1
  36. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  37. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  38. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -27
  39. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  40. package/dist/components/CustomSelect/CustomSelect.js +161 -428
  41. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  42. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +3 -1
  43. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  44. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +25 -5
  45. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  46. package/dist/components/CustomSelect/helpers.d.ts +12 -0
  47. package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
  48. package/dist/components/CustomSelect/helpers.js +63 -0
  49. package/dist/components/CustomSelect/helpers.js.map +1 -0
  50. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts +11 -0
  51. package/dist/components/CustomSelect/hooks/useAfterItems.d.ts.map +1 -0
  52. package/dist/components/CustomSelect/hooks/useAfterItems.js +57 -0
  53. package/dist/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  54. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts +13 -0
  55. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts.map +1 -0
  56. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  57. package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  58. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts +20 -0
  59. package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts.map +1 -0
  60. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  61. package/dist/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  62. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts +13 -0
  63. package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts.map +1 -0
  64. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  65. package/dist/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  66. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts +15 -0
  67. package/dist/components/CustomSelect/hooks/useInputValueController.d.ts.map +1 -0
  68. package/dist/components/CustomSelect/hooks/useInputValueController.js +43 -0
  69. package/dist/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  70. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts +9 -0
  71. package/dist/components/CustomSelect/hooks/useScrollListController.d.ts.map +1 -0
  72. package/dist/components/CustomSelect/hooks/useScrollListController.js +37 -0
  73. package/dist/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  74. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts +18 -0
  75. package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts.map +1 -0
  76. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  77. package/dist/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  78. package/dist/components/CustomSelect/types.d.ts +33 -0
  79. package/dist/components/CustomSelect/types.d.ts.map +1 -0
  80. package/dist/components/CustomSelect/types.js +3 -0
  81. package/dist/components/CustomSelect/types.js.map +1 -0
  82. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  83. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  84. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  85. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  86. package/dist/components/DateInput/DateInput.js +3 -2
  87. package/dist/components/DateInput/DateInput.js.map +1 -1
  88. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  89. package/dist/components/DateRangeInput/DateRangeInput.js +4 -4
  90. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  91. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.d.ts +1 -1
  92. package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  93. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts +3 -2
  94. package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
  95. package/dist/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  96. package/dist/components/ModalCard/ModalCard.d.ts +1 -1
  97. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  98. package/dist/components/ModalCard/ModalCard.js +4 -2
  99. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  100. package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
  101. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
  102. package/dist/components/ModalCard/ModalCardInternal.js +5 -3
  103. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  104. package/dist/components/ModalCard/types.d.ts +8 -0
  105. package/dist/components/ModalCard/types.d.ts.map +1 -1
  106. package/dist/components/ModalCard/types.js.map +1 -1
  107. package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
  108. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
  109. package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
  110. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
  111. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  112. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  113. package/dist/components/ModalPage/ModalPage.js +3 -1
  114. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  115. package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
  116. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  117. package/dist/components/ModalPage/ModalPageInternal.js +5 -3
  118. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  119. package/dist/components/ModalPage/types.d.ts +8 -0
  120. package/dist/components/ModalPage/types.d.ts.map +1 -1
  121. package/dist/components/ModalPage/types.js.map +1 -1
  122. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  123. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  124. package/dist/components/ModalRoot/ModalRoot.js +4 -2
  125. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  126. package/dist/components/ModalRoot/types.d.ts +6 -0
  127. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  128. package/dist/components/ModalRoot/types.js.map +1 -1
  129. package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
  130. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  131. package/dist/components/ModalRoot/useModalManager.js +2 -1
  132. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  133. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
  134. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  135. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
  136. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  137. package/dist/components/Popover/Popover.d.ts +1 -1
  138. package/dist/components/Popover/Popover.d.ts.map +1 -1
  139. package/dist/components/Popover/Popover.js.map +1 -1
  140. package/dist/components/Popover/usePopover.d.ts +1 -1
  141. package/dist/components/Popover/usePopover.d.ts.map +1 -1
  142. package/dist/components/Popover/usePopover.js +3 -1
  143. package/dist/components/Popover/usePopover.js.map +1 -1
  144. package/dist/components/Popper/Popper.d.ts +2 -2
  145. package/dist/components/Popper/Popper.d.ts.map +1 -1
  146. package/dist/components/Popper/Popper.js +3 -1
  147. package/dist/components/Popper/Popper.js.map +1 -1
  148. package/dist/components/Select/Select.d.ts +2 -1
  149. package/dist/components/Select/Select.d.ts.map +1 -1
  150. package/dist/components/Select/Select.js +5 -2
  151. package/dist/components/Select/Select.js.map +1 -1
  152. package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
  153. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  154. package/dist/components/SelectionControl/SelectionControl.js +22 -6
  155. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  156. package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
  157. package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
  158. package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
  159. package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
  160. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
  161. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  162. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  163. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  164. package/dist/components/SimpleCell/SimpleCell.js +29 -8
  165. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  166. package/dist/components/Skeleton/Skeleton.js +1 -1
  167. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  168. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  169. package/dist/components/Tabs/Tabs.js +19 -9
  170. package/dist/components/Tabs/Tabs.js.map +1 -1
  171. package/dist/components/Tabs/TabsController.d.ts +2 -2
  172. package/dist/components/Tabs/TabsController.d.ts.map +1 -1
  173. package/dist/components/Tabs/TabsController.js.map +1 -1
  174. package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
  175. package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
  176. package/dist/components/Tabs/TabsControllerContext.js +4 -0
  177. package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
  178. package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
  179. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
  180. package/dist/components/Tabs/TabsModeContext.js +1 -2
  181. package/dist/components/Tabs/TabsModeContext.js.map +1 -1
  182. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  183. package/dist/components/TabsItem/TabsItem.js +3 -1
  184. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  185. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  186. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  187. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  188. package/dist/components/Tooltip/useTooltip.d.ts +1 -1
  189. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  190. package/dist/components/Tooltip/useTooltip.js +3 -1
  191. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  192. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  193. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  194. package/dist/components/Typography/Caption/Caption.js +4 -1
  195. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  196. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  197. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  198. package/dist/components/Typography/Footnote/Footnote.js +4 -1
  199. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  200. package/dist/components/Typography/Typography.d.ts +1 -0
  201. package/dist/components/Typography/Typography.d.ts.map +1 -1
  202. package/dist/components/Typography/Typography.js +7 -1
  203. package/dist/components/Typography/Typography.js.map +1 -1
  204. package/dist/components/View/View.d.ts.map +1 -1
  205. package/dist/components/View/View.js +2 -1
  206. package/dist/components/View/View.js.map +1 -1
  207. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  208. package/dist/components/View/ViewInfinite.js +2 -1
  209. package/dist/components/View/ViewInfinite.js.map +1 -1
  210. package/dist/components.css +1 -1
  211. package/dist/components.css.map +1 -1
  212. package/dist/cssm/components/Banner/Banner.module.css +1 -6
  213. package/dist/cssm/components/Calendar/Calendar.js +6 -6
  214. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  215. package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
  216. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  217. package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
  218. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  219. package/dist/cssm/components/CalendarRange/utils.js +6 -5
  220. package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
  221. package/dist/cssm/components/Cell/Cell.js +3 -1
  222. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  223. package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
  224. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  225. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
  226. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  227. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
  228. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
  229. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  230. package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  231. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  232. package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
  233. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  234. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  235. package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
  236. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  237. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
  238. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  239. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  240. package/dist/cssm/components/CustomSelect/helpers.js +62 -0
  241. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  242. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
  243. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  244. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  245. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  246. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  247. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  248. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  249. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  250. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
  251. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  252. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
  253. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  254. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  255. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  256. package/dist/cssm/components/CustomSelect/types.js +3 -0
  257. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  258. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  259. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  260. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  261. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  262. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
  263. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  264. package/dist/cssm/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
  265. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.js.map +1 -1
  266. package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
  267. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  268. package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
  269. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  270. package/dist/cssm/components/ModalCard/types.js.map +1 -1
  271. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
  272. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
  273. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
  274. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
  275. package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
  276. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  277. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
  278. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  279. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  280. package/dist/cssm/components/ModalPage/types.js.map +1 -1
  281. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
  282. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  283. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  284. package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
  285. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  286. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
  287. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  288. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  289. package/dist/cssm/components/Popover/usePopover.js +2 -1
  290. package/dist/cssm/components/Popover/usePopover.js.map +1 -1
  291. package/dist/cssm/components/Popper/Popper.js +2 -1
  292. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  293. package/dist/cssm/components/RichCell/RichCell.module.css +4 -2
  294. package/dist/cssm/components/Select/Select.js +1 -1
  295. package/dist/cssm/components/Select/Select.js.map +1 -1
  296. package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
  297. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  298. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
  299. package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
  300. package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
  301. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  302. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  303. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  304. package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
  305. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  306. package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
  307. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  308. package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
  309. package/dist/cssm/components/Tabs/Tabs.js +19 -9
  310. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  311. package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
  312. package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
  313. package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
  314. package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
  315. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
  316. package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
  317. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  318. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  319. package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
  320. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  321. package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
  322. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  323. package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
  324. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  325. package/dist/cssm/components/Typography/Typography.js +7 -1
  326. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  327. package/dist/cssm/components/View/View.js +2 -1
  328. package/dist/cssm/components/View/View.js.map +1 -1
  329. package/dist/cssm/components/View/View.module.css +1 -1
  330. package/dist/cssm/components/View/ViewInfinite.js +2 -1
  331. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  332. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  333. package/dist/cssm/hooks/useCalendar.js +6 -4
  334. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  335. package/dist/cssm/hooks/useFloatingElement.js +3 -2
  336. package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
  337. package/dist/cssm/hooks/useTodayDate.js +3 -2
  338. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  339. package/dist/cssm/index.js.map +1 -1
  340. package/dist/cssm/lib/accessibility.js +8 -0
  341. package/dist/cssm/lib/accessibility.js.map +1 -1
  342. package/dist/cssm/lib/calendar.js +9 -7
  343. package/dist/cssm/lib/calendar.js.map +1 -1
  344. package/dist/cssm/lib/date.js +66 -3
  345. package/dist/cssm/lib/date.js.map +1 -1
  346. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  347. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  348. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  349. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  350. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  351. package/dist/cssm/lib/utils.js +1 -0
  352. package/dist/cssm/lib/utils.js.map +1 -1
  353. package/dist/cssm/styles/dynamicTokens.css +14 -2
  354. package/dist/cssm/styles/themes.css +1 -1
  355. package/dist/hooks/useCalendar.d.ts.map +1 -1
  356. package/dist/hooks/useCalendar.js +6 -4
  357. package/dist/hooks/useCalendar.js.map +1 -1
  358. package/dist/hooks/useFloatingElement.d.ts +1 -1
  359. package/dist/hooks/useFloatingElement.d.ts.map +1 -1
  360. package/dist/hooks/useFloatingElement.js +3 -2
  361. package/dist/hooks/useFloatingElement.js.map +1 -1
  362. package/dist/hooks/useTodayDate.d.ts.map +1 -1
  363. package/dist/hooks/useTodayDate.js +3 -2
  364. package/dist/hooks/useTodayDate.js.map +1 -1
  365. package/dist/index.d.ts +4 -2
  366. package/dist/index.d.ts.map +1 -1
  367. package/dist/index.js.map +1 -1
  368. package/dist/lib/accessibility.d.ts +1 -1
  369. package/dist/lib/accessibility.d.ts.map +1 -1
  370. package/dist/lib/accessibility.js +8 -0
  371. package/dist/lib/accessibility.js.map +1 -1
  372. package/dist/lib/calendar.d.ts.map +1 -1
  373. package/dist/lib/calendar.js +9 -7
  374. package/dist/lib/calendar.js.map +1 -1
  375. package/dist/lib/date.d.ts +31 -1
  376. package/dist/lib/date.d.ts.map +1 -1
  377. package/dist/lib/date.js +67 -3
  378. package/dist/lib/date.js.map +1 -1
  379. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
  380. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  381. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  382. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  383. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
  384. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  385. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  386. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  387. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  388. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  389. package/dist/lib/utils.d.ts +1 -0
  390. package/dist/lib/utils.d.ts.map +1 -1
  391. package/dist/lib/utils.js +1 -0
  392. package/dist/lib/utils.js.map +1 -1
  393. package/dist/vkui.css +1 -1
  394. package/dist/vkui.css.map +1 -1
  395. package/package.json +6 -7
  396. package/src/components/Banner/Banner.module.css +1 -6
  397. package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
  398. package/src/components/Calendar/Calendar.tsx +6 -6
  399. package/src/components/CalendarDays/CalendarDays.tsx +3 -3
  400. package/src/components/CalendarRange/CalendarRange.tsx +15 -20
  401. package/src/components/CalendarRange/utils.ts +7 -6
  402. package/src/components/Cell/Cell.tsx +3 -0
  403. package/src/components/Checkbox/Checkbox.tsx +6 -0
  404. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
  405. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
  406. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
  407. package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  408. package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
  409. package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
  410. package/src/components/ChipsInputBase/types.ts +2 -45
  411. package/src/components/ContentBadge/ContentBadge.tsx +18 -12
  412. package/src/components/ContentCard/ContentCard.tsx +1 -1
  413. package/src/components/CustomSelect/CustomSelect.tsx +216 -562
  414. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  415. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
  416. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
  417. package/src/components/CustomSelect/helpers.ts +103 -0
  418. package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
  419. package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
  420. package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
  421. package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
  422. package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
  423. package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
  424. package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
  425. package/src/components/CustomSelect/types.ts +38 -0
  426. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
  427. package/src/components/DateInput/DateInput.tsx +9 -3
  428. package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
  429. package/src/components/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx +1 -1
  430. package/src/components/MiniInfoCell/MiniInfoCell.tsx +8 -3
  431. package/src/components/ModalCard/ModalCard.tsx +2 -0
  432. package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
  433. package/src/components/ModalCard/types.ts +8 -0
  434. package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
  435. package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
  436. package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
  437. package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
  438. package/src/components/ModalPage/ModalPage.module.css +1 -0
  439. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  440. package/src/components/ModalPage/ModalPage.tsx +2 -0
  441. package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
  442. package/src/components/ModalPage/types.ts +8 -0
  443. package/src/components/ModalRoot/ModalRoot.tsx +19 -6
  444. package/src/components/ModalRoot/types.ts +7 -0
  445. package/src/components/ModalRoot/useModalManager.tsx +4 -0
  446. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
  447. package/src/components/Popover/Popover.tsx +1 -0
  448. package/src/components/Popover/usePopover.tsx +2 -0
  449. package/src/components/Popper/Popper.tsx +3 -0
  450. package/src/components/RichCell/RichCell.module.css +4 -2
  451. package/src/components/RichCell/RichCell.module.css.d.ts.map +1 -1
  452. package/src/components/Select/Select.tsx +5 -5
  453. package/src/components/SelectionControl/SelectionControl.module.css +6 -3
  454. package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
  455. package/src/components/SelectionControl/SelectionControl.tsx +30 -8
  456. package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
  457. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  458. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
  459. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
  460. package/src/components/SimpleCell/SimpleCell.tsx +5 -0
  461. package/src/components/Skeleton/Skeleton.tsx +1 -1
  462. package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
  463. package/src/components/Tabs/Tabs.tsx +16 -12
  464. package/src/components/Tabs/TabsController.ts +2 -2
  465. package/src/components/Tabs/TabsControllerContext.ts +7 -0
  466. package/src/components/Tabs/TabsModeContext.ts +0 -3
  467. package/src/components/TabsItem/TabsItem.tsx +5 -9
  468. package/src/components/Tooltip/Tooltip.tsx +1 -0
  469. package/src/components/Tooltip/useTooltip.tsx +2 -0
  470. package/src/components/Typography/Caption/Caption.tsx +14 -6
  471. package/src/components/Typography/Footnote/Footnote.tsx +10 -6
  472. package/src/components/Typography/Typography.tsx +9 -2
  473. package/src/components/View/View.module.css +1 -1
  474. package/src/components/View/View.tsx +2 -1
  475. package/src/components/View/ViewInfinite.tsx +2 -1
  476. package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  477. package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
  478. package/src/hooks/useCalendar.ts +6 -4
  479. package/src/hooks/useFloatingElement.tsx +2 -0
  480. package/src/hooks/useTodayDate.ts +3 -2
  481. package/src/index.ts +5 -3
  482. package/src/lib/accessibility.ts +4 -0
  483. package/src/lib/calendar.ts +8 -12
  484. package/src/lib/date.ts +82 -3
  485. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
  486. package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
  487. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  488. package/src/lib/utils.ts +3 -0
  489. package/src/styles/dynamicTokens.css +13 -2
@@ -3,12 +3,11 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
3
3
  import * as React from "react";
4
4
  import { Icon16Clear, Icon20CalendarOutline } from "@vkontakte/icons";
5
5
  import { classNames } from "@vkontakte/vkjs";
6
- import { isAfter } from "date-fns";
7
6
  import { useAdaptivity } from "../../hooks/useAdaptivity.js";
8
7
  import { useDateInput } from "../../hooks/useDateInput.js";
9
8
  import { useCustomEnsuredControl } from "../../hooks/useEnsuredControl.js";
10
9
  import { useExternRef } from "../../hooks/useExternRef.js";
11
- import { format, isMatch, parse } from "../../lib/date.js";
10
+ import { dateFormatter, isMatch, parse } from "../../lib/date.js";
12
11
  import { CalendarRange } from "../CalendarRange/CalendarRange.js";
13
12
  import { useConfigProvider } from "../ConfigProvider/ConfigProviderContext.js";
14
13
  import { FocusTrap } from "../FocusTrap/FocusTrap.js";
@@ -127,7 +126,7 @@ const CALENDAR_MUTATION_OBSERVER_OPTIONS = {
127
126
  const now = new Date();
128
127
  const start = isStartValid ? parse(formattedStartValue, mask, valueExists && value?.[0] || now) : null;
129
128
  const end = isEndValid ? parse(formattedEndValue, mask, valueExists && value?.[1] || now) : null;
130
- if (start && end && isAfter(end, start)) {
129
+ if (start && end && end > start) {
131
130
  updateValue([
132
131
  start,
133
132
  end
@@ -270,12 +269,13 @@ const CALENDAR_MUTATION_OBSERVER_OPTIONS = {
270
269
  "aria-hidden": true,
271
270
  name: name,
272
271
  tabIndex: readOnly ? 0 : -1,
273
- value: value ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${value[1] ? format(value[1], 'dd.MM.yyyy') : ''}` : '',
272
+ value: value ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${value[1] ? dateFormatter.format(value[1]) : ''}` : '',
274
273
  onFocus: handleFieldEnter
275
274
  }),
276
275
  /*#__PURE__*/ _jsxs(Text, {
277
276
  className: dateInputStyles.input,
278
277
  onClick: showCalendarOnInputAreaClick,
278
+ normalize: false,
279
279
  children: [
280
280
  /*#__PURE__*/ _jsx(NumberInputLike, {
281
281
  value: internalValue[0],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isAfter } from 'date-fns';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\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 CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './DateRangeInput.module.css';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * Label для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean; // TODO [>=8]: включить по умолчанию.\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\nconst CALENDAR_MUTATION_OBSERVER_OPTIONS: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex'],\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible,\n readOnly,\n 'disableCalendar': disableCalendarProp = 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 disableCalendar = readOnly ? true : disableCalendarProp;\n\n const _onChange = React.useCallback(\n (newValue: DateRangeType | null | undefined) => onChange?.(newValue || undefined),\n [onChange],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && isAfter(end, start)) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(undefined), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType | undefined) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(startDate),\n new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value && !readOnly ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${\n value[1] ? format(value[1], 'dd.MM.yyyy') : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text className={dateInputStyles.input} onClick={showCalendarOnInputAreaClick}>\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n captureEscapeKeyboardEvent={false}\n mutationObserverOptions={CALENDAR_MUTATION_OBSERVER_OPTIONS}\n >\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","isAfter","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","format","isMatch","parse","CalendarRange","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","styles","dateInputStyles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","CALENDAR_MUTATION_OBSERVER_OPTIONS","childList","subtree","attributes","attributeFilter","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","disableCalendar","_onChange","useCallback","undefined","updateValue","onInternalValueChange","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","sizeY","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","Intl","DateTimeFormat","weekday","year","month","day","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","onClose","Boolean","captureEscapeKeyboardEvent","mutationObserverOptions","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/DateRangeInput/DateRangeInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon20CalendarOutline } from '@vkontakte/icons';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useDateInput } from '../../hooks/useDateInput';\nimport { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { dateFormatter, isMatch, parse } from '../../lib/date';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport type { HasRootRef } from '../../types';\nimport {\n CalendarRange,\n type CalendarRangeProps,\n type CalendarRangeTestsProps,\n type DateRangeType,\n} from '../CalendarRange/CalendarRange';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { IconButton } from '../IconButton/IconButton';\nimport { InputLikeDivider } from '../InputLike/InputLikeDivider';\nimport { NumberInputLike } from '../NumberInputLike/NumberInputLike';\nimport { Popper } from '../Popper/Popper';\nimport { Text } from '../Typography/Text/Text';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './DateRangeInput.module.css';\nimport dateInputStyles from '../DateInput/DateInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\ntype DateTestsProps = {\n /**\n * Передает атрибут `data-testid` для поля ввода дня.\n */\n day?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода месяца.\n */\n month?: string;\n /**\n * Передает атрибут `data-testid` для поля ввода года.\n */\n year?: string;\n};\n\nexport type DateRangeInputTestsProps = {\n /**\n * Передает атрибуты `data-testid` для полей ввода начальной даты.\n */\n startDateTestsProps?: DateTestsProps;\n /**\n * Передает атрибуты `data-testid` для полей ввода конечной даты.\n */\n endDateTestsProps?: DateTestsProps;\n /**\n * Передает атрибут `data-testid` для кнопки показа календаря.\n */\n showCalendarButtonTestId?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки даты.\n */\n clearButtonTestId?: string;\n};\n\nexport interface DateRangeInputProps\n extends Omit<React.InputHTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'>,\n Pick<\n CalendarRangeProps,\n | 'disablePast'\n | 'disableFuture'\n | 'shouldDisableDate'\n | 'onChange'\n | 'value'\n | 'defaultValue'\n | 'weekStartsOn'\n | 'disablePickers'\n | 'prevMonthLabel'\n | 'nextMonthLabel'\n | 'changeMonthLabel'\n | 'changeYearLabel'\n | 'changeDayLabel'\n | 'prevMonthIcon'\n | 'nextMonthIcon'\n | 'renderDayContent'\n >,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n HasRootRef<HTMLDivElement>,\n Omit<FormFieldProps, 'maxHeight'>,\n DateRangeInputTestsProps {\n /**\n * Передает атрибуты `data-testid` для интерактивных элементов в календаре.\n */\n calendarTestsProps?: CalendarRangeTestsProps;\n /**\n * Расположение календаря относительно поля ввода.\n */\n calendarPlacement?: PlacementWithAuto;\n /**\n * Автоматически закрывать календарь при изменениях.\n */\n closeOnChange?: boolean;\n /**\n * Обработчик изменения состояния открытия календаря.\n */\n onCalendarOpenChanged?: (opened: boolean) => void;\n /**\n * Label для календаря.\n */\n calendarLabel?: string;\n /**\n * Label для кнопки очистки. Делает доступным для ассистивных технологий.\n */\n clearFieldLabel?: string;\n /**\n * Label для кнопки открытия календаря. Делает доступным для ассистивных технологий.\n */\n showCalendarLabel?: string;\n /**\n * Label для ввода дня начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartDayLabel?: string;\n /**\n * Label для ввода месяца начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartMonthLabel?: string;\n /**\n * Label для ввода года начальной даты. Делает доступным для ассистивных технологий.\n */\n changeStartYearLabel?: string;\n /**\n * Label для ввода дня конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndDayLabel?: string;\n /**\n * Label для ввода месяца конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndMonthLabel?: string;\n /**\n * Label для ввода года конечной даты. Делает доступным для ассистивных технологий.\n */\n changeEndYearLabel?: string;\n /**\n * Отключение открытия календаря.\n */\n disableCalendar?: boolean;\n /**\n * Позволяет отключить захват фокуса при появлении календаря.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Включает режим в котором DateRangeInput доступен\n * для ассистивных технологий.\n * В этом режиме:\n * - календарь больше не открывает при фокусе на DateRangeInput;\n * - иконка календаря видна всегда, чтобы пользователи\n * ассистивных технологий могли открыть календарь по клику на иконку;\n * - календарь при открытии получает фокус, клавиатурный\n * фокус зациклен и не выходит за пределы календаря пока календарь не закрыт.\n */\n accessible?: boolean; // TODO [>=8]: включить по умолчанию.\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\nconst CALENDAR_MUTATION_OBSERVER_OPTIONS: MutationObserverInit = {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex'],\n};\n\n/**\n * @see https://vkui.io/components/date-range-input\n */\nexport const DateRangeInput = ({\n shouldDisableDate,\n disableFuture,\n disablePast,\n 'value': valueProp,\n defaultValue,\n onChange,\n 'calendarPlacement': calendarPlacementProp = 'bottom-start',\n style,\n className,\n closeOnChange = true,\n disablePickers,\n getRootRef,\n name,\n autoFocus,\n disabled,\n disableFocusTrap,\n restoreFocus,\n calendarLabel = 'Календарь',\n prevMonthLabel = 'Предыдущий месяц',\n nextMonthLabel = 'Следующий месяц',\n changeMonthLabel = 'Месяц',\n changeYearLabel = 'Год',\n changeStartDayLabel = 'День начала',\n changeStartMonthLabel = 'Месяц начала',\n changeStartYearLabel = 'Год начала',\n changeEndDayLabel = 'День окончания',\n changeEndMonthLabel = 'Месяц окончания',\n changeEndYearLabel = 'Год окончания',\n clearFieldLabel = 'Очистить поле',\n showCalendarLabel = 'Показать календарь',\n 'aria-label': ariaLabel = '',\n prevMonthIcon,\n nextMonthIcon,\n onCalendarOpenChanged,\n renderDayContent,\n calendarTestsProps,\n startDateTestsProps,\n endDateTestsProps,\n clearButtonTestId,\n showCalendarButtonTestId,\n id,\n accessible,\n readOnly,\n 'disableCalendar': disableCalendarProp = 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 disableCalendar = readOnly ? true : disableCalendarProp;\n\n const _onChange = React.useCallback(\n (newValue: DateRangeType | null | undefined) => onChange?.(newValue || undefined),\n [onChange],\n );\n\n const [value, updateValue] = useCustomEnsuredControl<DateRangeType | null | undefined>({\n value: valueProp,\n defaultValue,\n onChange: _onChange,\n });\n\n const onInternalValueChange = React.useCallback(\n (internalValue: string[]) => {\n let isStartValid = true;\n let isEndValid = true;\n for (let i = 0; i <= 2; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isStartValid = false;\n }\n }\n for (let i = 3; i <= 5; i += 1) {\n if (internalValue[i].length < elementsConfig(i).length) {\n isEndValid = false;\n }\n }\n const formattedStartValue = `${internalValue[0]}.${internalValue[1]}.${internalValue[2]}`;\n const formattedEndValue = `${internalValue[3]}.${internalValue[4]}.${internalValue[5]}`;\n const mask = 'dd.MM.yyyy';\n\n if (!isMatch(formattedStartValue, mask)) {\n isStartValid = false;\n }\n if (!isMatch(formattedEndValue, mask)) {\n isEndValid = false;\n }\n\n if (!isStartValid && !isEndValid) {\n return;\n }\n\n const valueExists = Array.isArray(value);\n const now = new Date();\n const start = isStartValid\n ? parse(formattedStartValue, mask, (valueExists && value?.[0]) || now)\n : null;\n const end = isEndValid\n ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)\n : null;\n if (start && end && end > start) {\n updateValue([start, end]);\n }\n },\n [updateValue, value],\n );\n\n const refs = React.useMemo(\n () => [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n [daysStartRef, monthsStartRef, yearsStartRef, daysEndRef, monthsEndRef, yearsEndRef],\n );\n\n const onClear = React.useCallback(() => updateValue(undefined), [updateValue]);\n\n const {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n toggleCalendar,\n internalValue,\n handleKeyDown,\n setFocusedElement,\n handleFieldEnter,\n clear,\n removeFocusFromField,\n } = useDateInput({\n maxElement: 5,\n refs,\n autoFocus,\n disabled: disabled || readOnly,\n elementsConfig,\n onClear,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n accessible,\n });\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const handleRootRef = useExternRef(rootRef, getRootRef);\n\n const onCalendarChange = React.useCallback(\n (newValue: DateRangeType | undefined) => {\n updateValue(newValue);\n if (closeOnChange && newValue?.[1] && newValue[1] !== value?.[1]) {\n removeFocusFromField();\n }\n },\n [updateValue, closeOnChange, value, removeFocusFromField],\n );\n\n // при переключении месяцев высота календаря может меняться,\n // чтобы календарь не прыгал при переключении месяцев каждый раз на\n // лучшую позицию мы запоминаем последнюю удачную, чтобы календарь оставался\n // на ней, пока помещается.\n const [calendarPlacement, setCalendarPlacement] =\n React.useState<PlacementWithAuto>(calendarPlacementProp);\n\n const { locale } = useConfigProvider();\n const currentDateLabel = React.useMemo(() => {\n if (!value) {\n return null;\n }\n const [startDate, endDate] = value;\n if (!startDate || !endDate) {\n return null;\n }\n return [\n new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(startDate),\n new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(endDate),\n ].join(' - ');\n }, [locale, value]);\n\n const currentDateLabelId = React.useId();\n const ariaLabelId = React.useId();\n\n const showCalendarOnInputAreaClick = React.useCallback(() => {\n handleFieldEnter();\n if (accessible) {\n openCalendar();\n }\n }, [handleFieldEnter, openCalendar, accessible]);\n\n return (\n <FormField\n style={style}\n className={classNames(sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n getRootRef={handleRootRef}\n role=\"group\"\n aria-labelledby={`${ariaLabelId} ${currentDateLabelId}`}\n after={\n <>\n {!disableCalendar && (accessible || (!accessible && !value)) ? (\n <IconButton\n hoverMode=\"opacity\"\n label={showCalendarLabel}\n onClick={toggleCalendar}\n data-testid={showCalendarButtonTestId}\n >\n <Icon20CalendarOutline />\n </IconButton>\n ) : null}\n {value && !readOnly ? (\n <IconButton\n hoverMode=\"opacity\"\n label={clearFieldLabel}\n onClick={clear}\n data-testid={clearButtonTestId}\n >\n <Icon16Clear />\n </IconButton>\n ) : null}\n </>\n }\n disabled={disabled}\n {...props}\n >\n <div className={dateInputStyles.wrapper}>\n {ariaLabel && <VisuallyHidden id={ariaLabelId}>{ariaLabel}</VisuallyHidden>}\n {currentDateLabel && (\n <VisuallyHidden id={currentDateLabelId}>{currentDateLabel}</VisuallyHidden>\n )}\n <VisuallyHidden\n id={id}\n Component=\"input\"\n readOnly\n aria-hidden\n name={name}\n tabIndex={readOnly ? 0 : -1}\n value={\n value\n ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${\n value[1] ? dateFormatter.format(value[1]) : ''\n }`\n : ''\n }\n onFocus={handleFieldEnter}\n />\n <Text\n className={dateInputStyles.input}\n onClick={showCalendarOnInputAreaClick}\n normalize={false}\n >\n <NumberInputLike\n value={internalValue[0]}\n minValue={1}\n maxValue={31}\n onKeyDown={readOnly ? undefined : handleKeyDown}\n length={2}\n getRootRef={daysStartRef}\n index={0}\n readOnly={readOnly}\n onElementSelect={setFocusedElement}\n label={changeStartDayLabel}\n data-testid={startDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[1]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsStartRef}\n index={1}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartMonthLabel}\n data-testid={startDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[2]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsStartRef}\n index={2}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeStartYearLabel}\n data-testid={startDateTestsProps?.year}\n />\n <InputLikeDivider>{' — '}</InputLikeDivider>\n <NumberInputLike\n value={internalValue[3]}\n minValue={1}\n maxValue={31}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={daysEndRef}\n index={3}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndDayLabel}\n data-testid={endDateTestsProps?.day}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[4]}\n minValue={1}\n maxValue={12}\n onKeyDown={handleKeyDown}\n length={2}\n getRootRef={monthsEndRef}\n index={4}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndMonthLabel}\n data-testid={endDateTestsProps?.month}\n />\n <InputLikeDivider>.</InputLikeDivider>\n <NumberInputLike\n value={internalValue[5]}\n minValue={1}\n maxValue={275750}\n onKeyDown={handleKeyDown}\n length={4}\n getRootRef={yearsEndRef}\n index={5}\n onElementSelect={setFocusedElement}\n readOnly={readOnly}\n label={changeEndYearLabel}\n data-testid={endDateTestsProps?.year}\n />\n </Text>\n </div>\n {open && !disableCalendar && (\n <Popper\n targetRef={rootRef}\n offsetByMainAxis={8}\n placement={calendarPlacement}\n onPlacementChange={setCalendarPlacement}\n >\n <FocusTrap\n onClose={closeCalendar}\n disabled={disableFocusTrap ?? !accessible}\n restoreFocus={restoreFocus ?? Boolean(accessible)}\n captureEscapeKeyboardEvent={false}\n mutationObserverOptions={CALENDAR_MUTATION_OBSERVER_OPTIONS}\n >\n <CalendarRange\n value={value}\n role=\"dialog\"\n onChange={onCalendarChange}\n aria-label={calendarLabel}\n disablePast={disablePast}\n disableFuture={disableFuture}\n shouldDisableDate={shouldDisableDate}\n getRootRef={calendarRef}\n disablePickers={disablePickers}\n prevMonthLabel={prevMonthLabel}\n nextMonthLabel={nextMonthLabel}\n changeMonthLabel={changeMonthLabel}\n changeYearLabel={changeYearLabel}\n prevMonthIcon={prevMonthIcon}\n nextMonthIcon={nextMonthIcon}\n renderDayContent={renderDayContent}\n {...calendarTestsProps}\n />\n </FocusTrap>\n </Popper>\n )}\n </FormField>\n );\n};\n"],"names":["React","Icon16Clear","Icon20CalendarOutline","classNames","useAdaptivity","useDateInput","useCustomEnsuredControl","useExternRef","dateFormatter","isMatch","parse","CalendarRange","useConfigProvider","FocusTrap","FormField","IconButton","InputLikeDivider","NumberInputLike","Popper","Text","VisuallyHidden","styles","dateInputStyles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","elementsConfig","index","length","min","max","getInternalValue","value","newValue","String","getDate","padStart","getMonth","getFullYear","CALENDAR_MUTATION_OBSERVER_OPTIONS","childList","subtree","attributes","attributeFilter","DateRangeInput","shouldDisableDate","disableFuture","disablePast","valueProp","defaultValue","onChange","calendarPlacementProp","style","className","closeOnChange","disablePickers","getRootRef","name","autoFocus","disabled","disableFocusTrap","restoreFocus","calendarLabel","prevMonthLabel","nextMonthLabel","changeMonthLabel","changeYearLabel","changeStartDayLabel","changeStartMonthLabel","changeStartYearLabel","changeEndDayLabel","changeEndMonthLabel","changeEndYearLabel","clearFieldLabel","showCalendarLabel","ariaLabel","prevMonthIcon","nextMonthIcon","onCalendarOpenChanged","renderDayContent","calendarTestsProps","startDateTestsProps","endDateTestsProps","clearButtonTestId","showCalendarButtonTestId","id","accessible","readOnly","disableCalendarProp","props","daysStartRef","useRef","monthsStartRef","yearsStartRef","daysEndRef","monthsEndRef","yearsEndRef","disableCalendar","_onChange","useCallback","undefined","updateValue","onInternalValueChange","internalValue","isStartValid","isEndValid","i","formattedStartValue","formattedEndValue","mask","valueExists","Array","isArray","now","Date","start","end","refs","useMemo","onClear","rootRef","calendarRef","open","openCalendar","closeCalendar","toggleCalendar","handleKeyDown","setFocusedElement","handleFieldEnter","clear","removeFocusFromField","maxElement","sizeY","handleRootRef","onCalendarChange","calendarPlacement","setCalendarPlacement","useState","locale","currentDateLabel","startDate","endDate","Intl","DateTimeFormat","weekday","year","month","day","format","join","currentDateLabelId","useId","ariaLabelId","showCalendarOnInputAreaClick","role","aria-labelledby","after","hoverMode","label","onClick","data-testid","div","wrapper","Component","aria-hidden","tabIndex","onFocus","input","normalize","minValue","maxValue","onKeyDown","onElementSelect","targetRef","offsetByMainAxis","placement","onPlacementChange","onClose","Boolean","captureEscapeKeyboardEvent","mutationObserverOptions","aria-label"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../../types';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { ImageBaseContext } from '../context';\nimport type { ImageBaseExpectedIconProps } from '../types';\nimport { validateBadgeIcon } from '../validators';\nimport styles from './ImageBaseBadge.module.css';\n\nfunction DevelopmentCheck({ children }: Pick<ImageBaseBadgeProps, 'children'>) {\n const { size } = React.useContext(ImageBaseContext);\n\n if (children) {\n validateBadgeIcon(size, { name: 'children', value: children });\n }\n\n return null;\n}\n\nconst backgroundStyles = {\n stroke: styles.backgroundStroke,\n shadow: styles.backgroundShadow,\n};\n\nexport interface ImageBaseBadgeProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Вид подложки под иконку.\n *\n * - `\"stroke\"` – имитирует вырез (⚠️ если фон под компонентом динамический, то ожидайте баг).\n * - `\"shadow\"` – добавляет небольшую тень.\n */\n background?: 'stroke' | 'shadow';\n /**\n * Принимает иконку.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getBadgeIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n */\n children: React.ReactElement<ImageBaseExpectedIconProps>;\n}\n\n/**\n * Бейдж в правом нижнем углу компонента.\n *\n * > Не используйте при `size < 24`.\n */\nexport const ImageBaseBadge = ({ background = 'shadow', ...restProps }: ImageBaseBadgeProps) => {\n return (\n <>\n <RootComponent\n {...restProps}\n baseClassName={classNames(styles.host, backgroundStyles[background])}\n />\n {process.env.NODE_ENV === 'development' && (\n <DevelopmentCheck>{restProps.children}</DevelopmentCheck>\n )}\n </>\n );\n};\n"],"names":["React","classNames","RootComponent","ImageBaseContext","validateBadgeIcon","styles","DevelopmentCheck","children","size","useContext","name","value","backgroundStyles","stroke","backgroundStroke","shadow","backgroundShadow","ImageBaseBadge","background","restProps","baseClassName","host","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,gBAAgB,QAAQ,gBAAa;AAE9C,SAASC,iBAAiB,QAAQ,mBAAgB;AAClD,OAAOC,YAAY,8BAA8B;AAEjD,SAASC,iBAAiB,EAAEC,QAAQ,EAAyC;IAC3E,MAAM,EAAEC,IAAI,EAAE,GAAGR,MAAMS,UAAU,CAACN;IAElC,IAAII,UAAU;QACZH,kBAAkBI,MAAM;YAAEE,MAAM;YAAYC,OAAOJ;QAAS;IAC9D;IAEA,OAAO;AACT;AAEA,MAAMK,mBAAmB;IACvBC,QAAQR,OAAOS,gBAAgB;IAC/BC,QAAQV,OAAOW,gBAAgB;AACjC;AAwBA;;;;CAIC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAAEC,aAAa,QAAQ,EAAE,GAAGC,WAAgC;IACzF,qBACE;;0BACE,KAACjB;gBACE,GAAGiB,SAAS;gBACbC,eAAenB,WAAWI,OAAOgB,IAAI,EAAET,gBAAgB,CAACM,WAAW;;YAEpEI,QAAQC,GAAG,CAACC,QAAQ,KAAK,+BACxB,KAAClB;0BAAkBa,UAAUZ,QAAQ;;;;AAI7C,EAAE"}
1
+ {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../../types';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { ImageBaseContext } from '../context';\nimport type { ImageBaseExpectedIconProps } from '../types';\nimport { validateBadgeIcon } from '../validators';\nimport styles from './ImageBaseBadge.module.css';\n\nfunction DevelopmentCheck({ children }: Pick<ImageBaseBadgeProps, 'children'>) {\n const { size } = React.useContext(ImageBaseContext);\n\n if (children) {\n validateBadgeIcon(size, { name: 'children', value: children });\n }\n\n return null;\n}\n\nconst backgroundStyles = {\n stroke: styles.backgroundStroke,\n shadow: styles.backgroundShadow,\n};\n\nexport interface ImageBaseBadgeProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Вид подложки под иконку.\n *\n * - `\"stroke\"` – имитирует вырез (⚠️ если фон под компонентом динамический, то ожидайте баг).\n * - `\"shadow\"` – добавляет небольшую тень (⚠️ если фон под компонентом динамический, то ожидайте баг).\n */\n background?: 'stroke' | 'shadow';\n /**\n * Принимает иконку.\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getBadgeIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n */\n children: React.ReactElement<ImageBaseExpectedIconProps>;\n}\n\n/**\n * Бейдж в правом нижнем углу компонента.\n *\n * > Не используйте при `size < 24`.\n */\nexport const ImageBaseBadge = ({ background = 'shadow', ...restProps }: ImageBaseBadgeProps) => {\n return (\n <>\n <RootComponent\n {...restProps}\n baseClassName={classNames(styles.host, backgroundStyles[background])}\n />\n {process.env.NODE_ENV === 'development' && (\n <DevelopmentCheck>{restProps.children}</DevelopmentCheck>\n )}\n </>\n );\n};\n"],"names":["React","classNames","RootComponent","ImageBaseContext","validateBadgeIcon","styles","DevelopmentCheck","children","size","useContext","name","value","backgroundStyles","stroke","backgroundStroke","shadow","backgroundShadow","ImageBaseBadge","background","restProps","baseClassName","host","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,gBAAgB,QAAQ,gBAAa;AAE9C,SAASC,iBAAiB,QAAQ,mBAAgB;AAClD,OAAOC,YAAY,8BAA8B;AAEjD,SAASC,iBAAiB,EAAEC,QAAQ,EAAyC;IAC3E,MAAM,EAAEC,IAAI,EAAE,GAAGR,MAAMS,UAAU,CAACN;IAElC,IAAII,UAAU;QACZH,kBAAkBI,MAAM;YAAEE,MAAM;YAAYC,OAAOJ;QAAS;IAC9D;IAEA,OAAO;AACT;AAEA,MAAMK,mBAAmB;IACvBC,QAAQR,OAAOS,gBAAgB;IAC/BC,QAAQV,OAAOW,gBAAgB;AACjC;AAwBA;;;;CAIC,GACD,OAAO,MAAMC,iBAAiB,CAAC,EAAEC,aAAa,QAAQ,EAAE,GAAGC,WAAgC;IACzF,qBACE;;0BACE,KAACjB;gBACE,GAAGiB,SAAS;gBACbC,eAAenB,WAAWI,OAAOgB,IAAI,EAAET,gBAAgB,CAACM,WAAW;;YAEpEI,QAAQC,GAAG,CAACC,QAAQ,KAAK,+BACxB,KAAClB;0BAAkBa,UAAUZ,QAAQ;;;;AAI7C,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/MiniInfoCell/MiniInfoCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Chevron } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport styles from './MiniInfoCell.module.css';\n\nconst stylesMode = {\n add: styles.modeAdd,\n accent: styles.modeAccent,\n more: styles.modeMore,\n};\n\nconst stylesTextWrap = {\n nowrap: styles.textWrapNowrap,\n full: styles.textWrapFull,\n short: styles.textWrapShort,\n};\n\nexport interface MiniInfoCellProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * Иконка слева.<br />\n * Рекомендуется использовать иконки размера 20.\n */\n before?: React.ReactNode;\n\n /**\n * Содержимое справа.<br />\n * `<UsersStack size=\"s\" />` или `<Avatar size={24} />`.\n */\n after?: React.ReactNode;\n\n /**\n * Тип ячейки:\n *\n * - `base` – базовая ячейка с серой иконкой и серым текстом.<br />\n * В компонент можно передать `Link`, чтобы визуально сделать часть текста ссылкой.\n * - `add` – тип ячейки, который показывает, что взаимодействие с ней должно вызывать действие добавления чего-то.\n * - `more` – взаимодействие с такой ячейкой должно открывать какую-то подробную информацию.\n */\n mode?: 'base' | 'accent' | 'add' | 'more';\n\n /**\n * Тип отображения текста:\n *\n * - `nowrap` – в одну строку, текст не переносится и обрезается.\n * - `short` – максимально отображается 3 строки, остальное обрезается.\n * - `full` – текст отображается полностью. В дизайне это свойство `multiline`.\n */\n textWrap?: 'nowrap' | 'short' | 'full';\n\n /**\n * Передавать `true`, если предполагается переход при нажатии на ячейку.\n */\n chevron?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/mini-info-cell\n */\nexport const MiniInfoCell = ({\n before,\n after,\n children,\n mode = 'base',\n textWrap = 'nowrap',\n chevron = false,\n ...restProps\n}: MiniInfoCellProps): React.ReactNode => {\n const cellClasses = classNames(\n styles.host,\n stylesTextWrap[textWrap],\n mode !== 'base' && stylesMode[mode],\n );\n\n const cellContent = (\n <React.Fragment>\n {hasReactNode(before) && <span className={styles.before}>{before}</span>}\n <div className={styles.middle}>\n <Paragraph className={styles.content} weight={mode === 'more' ? '2' : undefined}>\n {children}\n </Paragraph>\n {chevron && <Icon16Chevron />}\n </div>\n {hasReactNode(after) && <span className={styles.after}>{after}</span>}\n </React.Fragment>\n );\n\n return (\n <Tappable {...restProps} baseClassName={cellClasses}>\n {cellContent}\n </Tappable>\n );\n};\n"],"names":["React","Icon16Chevron","classNames","hasReactNode","Tappable","Paragraph","styles","stylesMode","add","modeAdd","accent","modeAccent","more","modeMore","stylesTextWrap","nowrap","textWrapNowrap","full","textWrapFull","short","textWrapShort","MiniInfoCell","before","after","children","mode","textWrap","chevron","restProps","cellClasses","host","cellContent","Fragment","span","className","div","middle","content","weight","undefined","baseClassName"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAE3D,SAASC,QAAQ,QAAQ,0BAAuB;AAChD,SAASC,SAAS,QAAQ,uCAAoC;AAC9D,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,aAAa;IACjBC,KAAKF,OAAOG,OAAO;IACnBC,QAAQJ,OAAOK,UAAU;IACzBC,MAAMN,OAAOO,QAAQ;AACvB;AAEA,MAAMC,iBAAiB;IACrBC,QAAQT,OAAOU,cAAc;IAC7BC,MAAMX,OAAOY,YAAY;IACzBC,OAAOb,OAAOc,aAAa;AAC7B;AAwCA;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,OAAO,MAAM,EACbC,WAAW,QAAQ,EACnBC,UAAU,KAAK,EACf,GAAGC,WACe;IAClB,MAAMC,cAAc3B,WAClBI,OAAOwB,IAAI,EACXhB,cAAc,CAACY,SAAS,EACxBD,SAAS,UAAUlB,UAAU,CAACkB,KAAK;IAGrC,MAAMM,4BACJ,MAAC/B,MAAMgC,QAAQ;;YACZ7B,aAAamB,yBAAW,KAACW;gBAAKC,WAAW5B,OAAOgB,MAAM;0BAAGA;;0BAC1D,MAACa;gBAAID,WAAW5B,OAAO8B,MAAM;;kCAC3B,KAAC/B;wBAAU6B,WAAW5B,OAAO+B,OAAO;wBAAEC,QAAQb,SAAS,SAAS,MAAMc;kCACnEf;;oBAEFG,yBAAW,KAAC1B;;;YAEdE,aAAaoB,wBAAU,KAACU;gBAAKC,WAAW5B,OAAOiB,KAAK;0BAAGA;;;;IAI5D,qBACE,KAACnB;QAAU,GAAGwB,SAAS;QAAEY,eAAeX;kBACrCE;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/MiniInfoCell/MiniInfoCell.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Icon16Chevron } from '@vkontakte/icons';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { type RootComponentProps } from '../RootComponent/RootComponent';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport styles from './MiniInfoCell.module.css';\n\nconst stylesMode = {\n add: styles.modeAdd,\n accent: styles.modeAccent,\n more: styles.modeMore,\n};\n\nconst stylesTextWrap = {\n nowrap: styles.textWrapNowrap,\n full: styles.textWrapFull,\n short: styles.textWrapShort,\n};\n\nexport interface MiniInfoCellProps\n extends Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hovered' | 'activated' | 'hasHover' | 'hasActive'\n >,\n RootComponentProps<HTMLDivElement> {\n /**\n * Иконка слева.<br />\n * Рекомендуется использовать иконки размера 20.\n */\n before?: React.ReactNode;\n\n /**\n * Содержимое справа.<br />\n * `<UsersStack size=\"s\" />` или `<Avatar size={24} />`.\n */\n after?: React.ReactNode;\n\n /**\n * Тип ячейки:\n *\n * - `base` – базовая ячейка с серой иконкой и серым текстом.<br />\n * В компонент можно передать `Link`, чтобы визуально сделать часть текста ссылкой.\n * - `add` – тип ячейки, который показывает, что взаимодействие с ней должно вызывать действие добавления чего-то.\n * - `more` – взаимодействие с такой ячейкой должно открывать какую-то подробную информацию.\n */\n mode?: 'base' | 'accent' | 'add' | 'more';\n\n /**\n * Тип отображения текста:\n *\n * - `nowrap` – в одну строку, текст не переносится и обрезается.\n * - `short` – максимально отображается 3 строки, остальное обрезается.\n * - `full` – текст отображается полностью. В дизайне это свойство `multiline`.\n */\n textWrap?: 'nowrap' | 'short' | 'full';\n\n /**\n * Передавать `true`, если предполагается переход при нажатии на ячейку.\n */\n chevron?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/mini-info-cell\n */\nexport const MiniInfoCell = ({\n before,\n after,\n children,\n mode = 'base',\n textWrap = 'nowrap',\n chevron = false,\n ...restProps\n}: MiniInfoCellProps): React.ReactNode => {\n const cellClasses = classNames(\n styles.host,\n stylesTextWrap[textWrap],\n mode !== 'base' && stylesMode[mode],\n );\n\n const cellContent = (\n <React.Fragment>\n {hasReactNode(before) && <span className={styles.before}>{before}</span>}\n <div className={styles.middle}>\n <Paragraph className={styles.content} weight={mode === 'more' ? '2' : undefined}>\n {children}\n </Paragraph>\n {chevron && <Icon16Chevron />}\n </div>\n {hasReactNode(after) && <span className={styles.after}>{after}</span>}\n </React.Fragment>\n );\n\n return (\n <Tappable {...restProps} baseClassName={cellClasses}>\n {cellContent}\n </Tappable>\n );\n};\n"],"names":["React","Icon16Chevron","classNames","hasReactNode","Tappable","Paragraph","styles","stylesMode","add","modeAdd","accent","modeAccent","more","modeMore","stylesTextWrap","nowrap","textWrapNowrap","full","textWrapFull","short","textWrapShort","MiniInfoCell","before","after","children","mode","textWrap","chevron","restProps","cellClasses","host","cellContent","Fragment","span","className","div","middle","content","weight","undefined","baseClassName"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAE3D,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,SAAS,QAAQ,uCAAoC;AAC9D,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,aAAa;IACjBC,KAAKF,OAAOG,OAAO;IACnBC,QAAQJ,OAAOK,UAAU;IACzBC,MAAMN,OAAOO,QAAQ;AACvB;AAEA,MAAMC,iBAAiB;IACrBC,QAAQT,OAAOU,cAAc;IAC7BC,MAAMX,OAAOY,YAAY;IACzBC,OAAOb,OAAOc,aAAa;AAC7B;AA6CA;;CAEC,GACD,OAAO,MAAMC,eAAe,CAAC,EAC3BC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,OAAO,MAAM,EACbC,WAAW,QAAQ,EACnBC,UAAU,KAAK,EACf,GAAGC,WACe;IAClB,MAAMC,cAAc3B,WAClBI,OAAOwB,IAAI,EACXhB,cAAc,CAACY,SAAS,EACxBD,SAAS,UAAUlB,UAAU,CAACkB,KAAK;IAGrC,MAAMM,4BACJ,MAAC/B,MAAMgC,QAAQ;;YACZ7B,aAAamB,yBAAW,KAACW;gBAAKC,WAAW5B,OAAOgB,MAAM;0BAAGA;;0BAC1D,MAACa;gBAAID,WAAW5B,OAAO8B,MAAM;;kCAC3B,KAAC/B;wBAAU6B,WAAW5B,OAAO+B,OAAO;wBAAEC,QAAQb,SAAS,SAAS,MAAMc;kCACnEf;;oBAEFG,yBAAW,KAAC1B;;;YAEdE,aAAaoB,wBAAU,KAACU;gBAAKC,WAAW5B,OAAOiB,KAAK;0BAAGA;;;;IAI5D,qBACE,KAACnB;QAAU,GAAGwB,SAAS;QAAEY,eAAeX;kBACrCE;;AAGP,EAAE"}
@@ -5,13 +5,14 @@ import { useModalManager } from "../ModalRoot/useModalManager.js";
5
5
  import { ModalCardInternal } from "./ModalCardInternal.js";
6
6
  /**
7
7
  * @see https://vkui.io/components/modal-card
8
- */ export const ModalCard = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, keepMounted = false, ...restProps })=>{
8
+ */ export const ModalCard = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, keepMounted = false, disableModalOverlay, ...restProps })=>{
9
9
  const { mounted, shouldPreserveSnapPoint: excludedProp, id, ...resolvedProps } = useModalManager({
10
10
  id: nav || idProp,
11
11
  open,
12
12
  keepMounted,
13
13
  modalOverlayTestId,
14
14
  noFocusToDialog,
15
+ disableModalOverlay,
15
16
  onOpen,
16
17
  onOpened,
17
18
  onClose,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalCard/ModalCard.tsx"],"sourcesContent":["'use client';\n\nimport { ModalContext } from '../../context/ModalContext';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalCardInternal } from './ModalCardInternal';\nimport type { ModalCardProps } from './types';\n\n/**\n * @see https://vkui.io/components/modal-card\n */\nexport const ModalCard = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n keepMounted = false,\n ...restProps\n}: ModalCardProps): React.ReactNode => {\n const {\n mounted,\n shouldPreserveSnapPoint: excludedProp,\n id,\n ...resolvedProps\n } = useModalManager({\n id: nav || idProp,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n if (mounted === false) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalCardInternal\n id={id}\n aria-labelledby={`${id}-label`}\n titleId={`${id}-label`}\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n"],"names":["ModalContext","useModalManager","ModalCardInternal","ModalCard","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","keepMounted","restProps","mounted","shouldPreserveSnapPoint","excludedProp","resolvedProps","Provider","value","aria-labelledby","titleId"],"mappings":"AAAA;;AAEA,SAASA,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD;;CAEC,GACD,OAAO,MAAMC,YAAY,CAAC,EACxBC,IAAIC,MAAM,EACVC,GAAG,EACHC,OAAO,KAAK,EACZC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,cAAc,KAAK,EACnB,GAAGC,WACY;IACf,MAAM,EACJC,OAAO,EACPC,yBAAyBC,YAAY,EACrCd,EAAE,EACF,GAAGe,eACJ,GAAGlB,gBAAgB;QAClBG,IAAIE,OAAOD;QACXE;QACAO;QACAN;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,IAAIG,YAAY,OAAO;QACrB,OAAO;IACT;IAEA,qBACE,KAAChB,aAAaoB,QAAQ;QAACC,OAAOjB;kBAC5B,cAAA,KAACF;YACCE,IAAIA;YACJkB,mBAAiB,GAAGlB,GAAG,MAAM,CAAC;YAC9BmB,SAAS,GAAGnB,GAAG,MAAM,CAAC;YACrB,GAAGe,aAAa;YAChB,GAAGJ,SAAS;;;AAIrB,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/ModalCard/ModalCard.tsx"],"sourcesContent":["'use client';\n\nimport { ModalContext } from '../../context/ModalContext';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalCardInternal } from './ModalCardInternal';\nimport type { ModalCardProps } from './types';\n\n/**\n * @see https://vkui.io/components/modal-card\n */\nexport const ModalCard = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n keepMounted = false,\n disableModalOverlay,\n ...restProps\n}: ModalCardProps): React.ReactNode => {\n const {\n mounted,\n shouldPreserveSnapPoint: excludedProp,\n id,\n ...resolvedProps\n } = useModalManager({\n id: nav || idProp,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n disableModalOverlay,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n if (mounted === false) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalCardInternal\n id={id}\n aria-labelledby={`${id}-label`}\n titleId={`${id}-label`}\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n"],"names":["ModalContext","useModalManager","ModalCardInternal","ModalCard","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","keepMounted","disableModalOverlay","restProps","mounted","shouldPreserveSnapPoint","excludedProp","resolvedProps","Provider","value","aria-labelledby","titleId"],"mappings":"AAAA;;AAEA,SAASA,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD;;CAEC,GACD,OAAO,MAAMC,YAAY,CAAC,EACxBC,IAAIC,MAAM,EACVC,GAAG,EACHC,OAAO,KAAK,EACZC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,cAAc,KAAK,EACnBC,mBAAmB,EACnB,GAAGC,WACY;IACf,MAAM,EACJC,OAAO,EACPC,yBAAyBC,YAAY,EACrCf,EAAE,EACF,GAAGgB,eACJ,GAAGnB,gBAAgB;QAClBG,IAAIE,OAAOD;QACXE;QACAO;QACAN;QACAC;QACAM;QACAL;QACAC;QACAC;QACAC;IACF;IAEA,IAAII,YAAY,OAAO;QACrB,OAAO;IACT;IAEA,qBACE,KAACjB,aAAaqB,QAAQ;QAACC,OAAOlB;kBAC5B,cAAA,KAACF;YACCE,IAAIA;YACJmB,mBAAiB,GAAGnB,GAAG,MAAM,CAAC;YAC9BoB,SAAS,GAAGpB,GAAG,MAAM,CAAC;YACrB,GAAGgB,aAAa;YAChB,GAAGJ,SAAS;;;AAIrB,EAAE"}
@@ -32,7 +32,7 @@ const transitionStateClassNames = {
32
32
  * В компоненте заложена вся логика модального окна.
33
33
  *
34
34
  * @private
35
- */ export const ModalCardInternal = ({ icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, ...restProps })=>{
35
+ */ export const ModalCardInternal = ({ icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay, ...restProps })=>{
36
36
  const platform = usePlatform();
37
37
  const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(open, {
38
38
  enableAppear: true,
@@ -66,7 +66,7 @@ const transitionStateClassNames = {
66
66
  ...styleProp,
67
67
  '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px'
68
68
  } : styleProp;
69
- const modalOverlay = /*#__PURE__*/ _jsx(ModalOverlay, {
69
+ const modalOverlay = !disableModalOverlay && /*#__PURE__*/ _jsx(ModalOverlay, {
70
70
  getRootRef: setBackdropEl,
71
71
  "data-testid": modalOverlayTestId,
72
72
  visible: open,
@@ -92,6 +92,7 @@ const transitionStateClassNames = {
92
92
  hidden: hidden,
93
93
  isDesktop: isDesktop,
94
94
  onKeyDown: handleEscKeyDown,
95
+ disableModalOverlay: disableModalOverlay,
95
96
  children: [
96
97
  modalOverlay,
97
98
  /*#__PURE__*/ _jsx(ModalCardBase, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n snapPoint: 'auto',\n sheetCSSProperty: '--vkui_internal_ModalCard--translateY',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onDismiss() {\n onClose?.('swipe-down');\n },\n },\n );\n const handleRef = useExternRef<HTMLDivElement>(setSheetEl, ref, getRootRef);\n const style = keyboardOpened\n ? {\n ...styleProp,\n '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',\n }\n : styleProp;\n const modalOverlay = (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n useFocusTrap(ref, {\n autoFocus: !noFocusToDialog,\n disabled: !opened || hidden || disableFocusTrap,\n restoreFocus,\n });\n\n return (\n <ModalOutlet hidden={hidden} isDesktop={isDesktop} onKeyDown={handleEscKeyDown}>\n {modalOverlay}\n <ModalCardBase\n {...restProps}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n getRootRef={handleRef}\n style={style}\n className={classNames(\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n sizeByPlatformClassNames[platform],\n transitionStateClassNames[transitionState],\n className,\n )}\n onTransitionEnd={onTransitionEnd}\n {...bottomSheetEventHandlers}\n icon={icon}\n title={title}\n titleComponent={titleComponent}\n description={description}\n descriptionComponent={descriptionComponent}\n actions={actions}\n onClose={() => onClose('click-close-button')}\n size={size}\n modalDismissButtonTestId={modalDismissButtonTestId}\n dismissButtonMode={dismissButtonMode}\n dismissLabel={dismissLabel}\n >\n {children}\n </ModalCardBase>\n </ModalOutlet>\n );\n};\n"],"names":["useCallback","classNames","noop","useAdaptivityWithJSMediaQueries","useExternRef","useFocusTrap","usePlatform","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","ModalCardBase","ModalOutlet","ModalOverlay","ModalOverlayDefault","styles","sizeByPlatformClassNames","vkcom","ios","android","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalCardInternal","icon","title","titleComponent","description","descriptionComponent","children","actions","size","open","style","styleProp","className","preventClose","modalOverlayTestId","modalDismissButtonTestId","getRootRef","dismissButtonMode","dismissLabel","noFocusToDialog","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","restProps","platform","transitionState","ref","onTransitionEnd","enableAppear","onEnter","onEntered","onExited","opened","hidden","closable","isDesktop","bottomSheetEnabled","keyboardOpened","setSheetEl","setBackdropEl","bottomSheetEventHandlers","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","handleRef","modalOverlay","data-testid","visible","onClick","handleBackdropClick","event","undefined","handleEscKeyDown","ESCAPE","autoFocus","disabled","onKeyDown","tabIndex","role","aria-modal","host","hostDesktop","hostMobile"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n disableModalOverlay,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n snapPoint: 'auto',\n sheetCSSProperty: '--vkui_internal_ModalCard--translateY',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onDismiss() {\n onClose?.('swipe-down');\n },\n },\n );\n const handleRef = useExternRef<HTMLDivElement>(setSheetEl, ref, getRootRef);\n const style = keyboardOpened\n ? {\n ...styleProp,\n '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',\n }\n : styleProp;\n const modalOverlay = !disableModalOverlay && (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n useFocusTrap(ref, {\n autoFocus: !noFocusToDialog,\n disabled: !opened || hidden || disableFocusTrap,\n restoreFocus,\n });\n\n return (\n <ModalOutlet\n hidden={hidden}\n isDesktop={isDesktop}\n onKeyDown={handleEscKeyDown}\n disableModalOverlay={disableModalOverlay}\n >\n {modalOverlay}\n <ModalCardBase\n {...restProps}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n getRootRef={handleRef}\n style={style}\n className={classNames(\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n sizeByPlatformClassNames[platform],\n transitionStateClassNames[transitionState],\n className,\n )}\n onTransitionEnd={onTransitionEnd}\n {...bottomSheetEventHandlers}\n icon={icon}\n title={title}\n titleComponent={titleComponent}\n description={description}\n descriptionComponent={descriptionComponent}\n actions={actions}\n onClose={() => onClose('click-close-button')}\n size={size}\n modalDismissButtonTestId={modalDismissButtonTestId}\n dismissButtonMode={dismissButtonMode}\n dismissLabel={dismissLabel}\n >\n {children}\n </ModalCardBase>\n </ModalOutlet>\n );\n};\n"],"names":["useCallback","classNames","noop","useAdaptivityWithJSMediaQueries","useExternRef","useFocusTrap","usePlatform","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","ModalCardBase","ModalOutlet","ModalOverlay","ModalOverlayDefault","styles","sizeByPlatformClassNames","vkcom","ios","android","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalCardInternal","icon","title","titleComponent","description","descriptionComponent","children","actions","size","open","style","styleProp","className","preventClose","modalOverlayTestId","modalDismissButtonTestId","getRootRef","dismissButtonMode","dismissLabel","noFocusToDialog","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","disableModalOverlay","restProps","platform","transitionState","ref","onTransitionEnd","enableAppear","onEnter","onEntered","onExited","opened","hidden","closable","isDesktop","bottomSheetEnabled","keyboardOpened","setSheetEl","setBackdropEl","bottomSheetEventHandlers","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","handleRef","modalOverlay","data-testid","visible","onClick","handleBackdropClick","event","undefined","handleEscKeyDown","ESCAPE","autoFocus","disabled","onKeyDown","tabIndex","role","aria-modal","host","hostDesktop","hostMobile"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalCard/types.ts"],"sourcesContent":["import type { UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { UseBottomSheetHandlers } from '../../lib/sheet';\nimport type { ModalCardBaseProps } from '../ModalCardBase/ModalCardBase';\n\nexport type ModalCardCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\nexport interface ModalCardProps\n extends NavIdProps,\n Omit<ModalCardBaseProps, 'id' | 'onClose' | 'onTransitionEnd' | keyof UseBottomSheetHandlers>,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n */\n noFocusToDialog?: boolean;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalCardCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n}\n"],"names":[],"mappings":"AAYA,WA8CC"}
1
+ {"version":3,"sources":["../../../../src/components/ModalCard/types.ts"],"sourcesContent":["import type { UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { UseBottomSheetHandlers } from '../../lib/sheet';\nimport type { ModalCardBaseProps } from '../ModalCardBase/ModalCardBase';\n\nexport type ModalCardCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\nexport interface ModalCardProps\n extends NavIdProps,\n Omit<ModalCardBaseProps, 'id' | 'onClose' | 'onTransitionEnd' | keyof UseBottomSheetHandlers>,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n *\n * > Важно установить фокус после открытия в любое место модалки используя событие `onOpened`, иначе не будет работать закрытие по нажатию `Esc`.\n */\n noFocusToDialog?: boolean;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalCardCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Отключает отображение и взаимодействие с фоном модалки.\n * > При использовании `ModalCard` внутри `ModalRoot` есть особенность использования этого свойства.\n * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#otklyuchenie-zadnego-fona-u-konkretnogo-modalnogo-okna).\n */\n disableModalOverlay?: boolean;\n}\n"],"names":[],"mappings":"AAYA,WAsDC"}
@@ -3,10 +3,10 @@ import { classNames } from "@vkontakte/vkjs";
3
3
  import styles from "./ModalOutlet.module.css";
4
4
  /**
5
5
  * @private
6
- */ export const ModalOutlet = ({ className, hidden, isDesktop, children, getRootRef, ...restProps })=>{
6
+ */ export const ModalOutlet = ({ className, hidden, isDesktop, children, getRootRef, disableModalOverlay, ...restProps })=>{
7
7
  return /*#__PURE__*/ _jsx("div", {
8
8
  ref: getRootRef,
9
- className: classNames(className, styles.host, isDesktop && styles.hostDesktop),
9
+ className: classNames(className, styles.host, isDesktop && styles.hostDesktop, disableModalOverlay && styles.disableModalOverlay),
10
10
  hidden: hidden,
11
11
  "aria-hidden": hidden,
12
12
  ...restProps,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalOutlet/ModalOutlet.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport styles from './ModalOutlet.module.css';\n\nexport interface ModalOutletProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'hidden' | 'aria-hidden'> {\n hidden?: boolean;\n isDesktop?: boolean;\n}\n\n/**\n * @private\n */\nexport const ModalOutlet = ({\n className,\n hidden,\n isDesktop,\n children,\n getRootRef,\n ...restProps\n}: ModalOutletProps) => {\n return (\n <div\n ref={getRootRef}\n className={classNames(className, styles.host, isDesktop && styles.hostDesktop)}\n hidden={hidden}\n aria-hidden={hidden}\n {...restProps}\n >\n {children}\n </div>\n );\n};\n"],"names":["classNames","styles","ModalOutlet","className","hidden","isDesktop","children","getRootRef","restProps","div","ref","host","hostDesktop","aria-hidden"],"mappings":"AAAA,sCAAsC;AAEtC,SAASA,UAAU,QAAQ,kBAAkB;AAE7C,OAAOC,YAAY,2BAA2B;AAQ9C;;CAEC,GACD,OAAO,MAAMC,cAAc,CAAC,EAC1BC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,UAAU,EACV,GAAGC,WACc;IACjB,qBACE,KAACC;QACCC,KAAKH;QACLJ,WAAWH,WAAWG,WAAWF,OAAOU,IAAI,EAAEN,aAAaJ,OAAOW,WAAW;QAC7ER,QAAQA;QACRS,eAAaT;QACZ,GAAGI,SAAS;kBAEZF;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/ModalOutlet/ModalOutlet.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport styles from './ModalOutlet.module.css';\n\nexport interface ModalOutletProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'hidden' | 'aria-hidden'> {\n disableModalOverlay?: boolean;\n hidden?: boolean;\n isDesktop?: boolean;\n}\n\n/**\n * @private\n */\nexport const ModalOutlet = ({\n className,\n hidden,\n isDesktop,\n children,\n getRootRef,\n disableModalOverlay,\n ...restProps\n}: ModalOutletProps) => {\n return (\n <div\n ref={getRootRef}\n className={classNames(\n className,\n styles.host,\n isDesktop && styles.hostDesktop,\n disableModalOverlay && styles.disableModalOverlay,\n )}\n hidden={hidden}\n aria-hidden={hidden}\n {...restProps}\n >\n {children}\n </div>\n );\n};\n"],"names":["classNames","styles","ModalOutlet","className","hidden","isDesktop","children","getRootRef","disableModalOverlay","restProps","div","ref","host","hostDesktop","aria-hidden"],"mappings":"AAAA,sCAAsC;AAEtC,SAASA,UAAU,QAAQ,kBAAkB;AAE7C,OAAOC,YAAY,2BAA2B;AAS9C;;CAEC,GACD,OAAO,MAAMC,cAAc,CAAC,EAC1BC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,UAAU,EACVC,mBAAmB,EACnB,GAAGC,WACc;IACjB,qBACE,KAACC;QACCC,KAAKJ;QACLJ,WAAWH,WACTG,WACAF,OAAOW,IAAI,EACXP,aAAaJ,OAAOY,WAAW,EAC/BL,uBAAuBP,OAAOO,mBAAmB;QAEnDJ,QAAQA;QACRU,eAAaV;QACZ,GAAGK,SAAS;kBAEZH;;AAGP,EAAE"}
@@ -6,6 +6,10 @@
6
6
  isolation: isolate;
7
7
  }
8
8
 
9
+ .disableModalOverlay {
10
+ pointer-events: none;
11
+ }
12
+
9
13
  /* Desktop */
10
14
 
11
15
  .hostDesktop:not([hidden]) {
@@ -3,7 +3,7 @@
3
3
  -webkit-user-select: none;
4
4
  -moz-user-select: none;
5
5
  user-select: none;
6
- background-color: rgb(0, 0, 0, 0.4);
6
+ background-color: var(--vkui--color_overlay_primary);
7
7
  transition: opacity 0.3s linear;
8
8
  will-change: opacity;
9
9
  -webkit-tap-highlight-color: transparent;
@@ -9,12 +9,13 @@ import { ModalPageInternal } from "./ModalPageInternal.js";
9
9
  const snapPointCache = new Map();
10
10
  /**
11
11
  * @see https://vkui.io/components/modal-page
12
- */ export const ModalPage = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, size = 's', settlingHeight = 50, dynamicContentHeight, keepMounted = false, ...restProps })=>{
12
+ */ export const ModalPage = ({ id: idProp, nav, open = false, modalOverlayTestId, noFocusToDialog, onOpen, onOpened, onClose, onClosed, size = 's', settlingHeight = 50, dynamicContentHeight, disableModalOverlay, keepMounted = false, ...restProps })=>{
13
13
  const { mounted, shouldPreserveSnapPoint, id, ...resolvedProps } = useModalManager({
14
14
  id: nav || idProp,
15
15
  open,
16
16
  keepMounted,
17
17
  modalOverlayTestId,
18
+ disableModalOverlay,
18
19
  noFocusToDialog,
19
20
  onOpen,
20
21
  onOpened,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalPage/ModalPage.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { ModalContext } from '../../context/ModalContext';\nimport { inRange } from '../../helpers/range';\nimport { SNAP_POINT_DETENTS, SNAP_POINT_SAFE_RANGE, type SnapPoint } from '../../lib/sheet';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalPageInternal } from './ModalPageInternal';\nimport type { ModalPageProps } from './types';\n\nconst snapPointCache = new Map<string, Exclude<SnapPoint, 'auto'>>();\n\n/**\n * @see https://vkui.io/components/modal-page\n */\nexport const ModalPage = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n size = 's',\n settlingHeight = 50,\n dynamicContentHeight,\n keepMounted = false,\n ...restProps\n}: ModalPageProps) => {\n const { mounted, shouldPreserveSnapPoint, id, ...resolvedProps } = useModalManager({\n id: nav || idProp,\n open,\n keepMounted,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n const snapPoint = useMemo((): SnapPoint => {\n if (dynamicContentHeight) {\n return 'auto';\n }\n\n if (shouldPreserveSnapPoint) {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n return snapPointCached;\n }\n\n const nextSnapPoint = transformSettlingHeightToSnapPoint(settlingHeight);\n snapPointCache.set(id, nextSnapPoint);\n\n return nextSnapPoint;\n } else {\n snapPointCache.delete(id);\n }\n\n return transformSettlingHeightToSnapPoint(settlingHeight);\n }, [id, shouldPreserveSnapPoint, dynamicContentHeight, settlingHeight]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalPageInternal\n id={id}\n size={size}\n aria-labelledby={`${id}-label`}\n snapPoint={snapPoint}\n onSnapPointChange={\n snapPoint !== 'auto' && shouldPreserveSnapPoint\n ? (snapPoint) => {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n snapPointCached.initial = snapPoint;\n snapPointCache.set(id, snapPointCached);\n }\n }\n : undefined\n }\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n\nfunction transformSettlingHeightToSnapPoint(settlingHeight: number): Exclude<SnapPoint, 'auto'> {\n const currentSnapPoint = Math.min(\n Math.max(settlingHeight, SNAP_POINT_SAFE_RANGE.LOWER),\n SNAP_POINT_DETENTS.LARGE,\n );\n\n return {\n initial: currentSnapPoint,\n detents: inRange(currentSnapPoint, SNAP_POINT_SAFE_RANGE.LOWER, SNAP_POINT_SAFE_RANGE.HIGHEST)\n ? [SNAP_POINT_DETENTS.MIN, currentSnapPoint, SNAP_POINT_DETENTS.LARGE]\n : [SNAP_POINT_DETENTS.MIN, currentSnapPoint],\n };\n}\n"],"names":["useMemo","ModalContext","inRange","SNAP_POINT_DETENTS","SNAP_POINT_SAFE_RANGE","useModalManager","ModalPageInternal","snapPointCache","Map","ModalPage","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","size","settlingHeight","dynamicContentHeight","keepMounted","restProps","mounted","shouldPreserveSnapPoint","resolvedProps","snapPoint","snapPointCached","get","nextSnapPoint","transformSettlingHeightToSnapPoint","set","delete","Provider","value","aria-labelledby","onSnapPointChange","initial","undefined","currentSnapPoint","Math","min","max","LOWER","LARGE","detents","HIGHEST","MIN"],"mappings":"AAAA;;AAEA,SAASA,OAAO,QAAQ,QAAQ;AAChC,SAASC,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,OAAO,QAAQ,yBAAsB;AAC9C,SAASC,kBAAkB,EAAEC,qBAAqB,QAAwB,2BAAkB;AAC5F,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD,MAAMC,iBAAiB,IAAIC;AAE3B;;CAEC,GACD,OAAO,MAAMC,YAAY,CAAC,EACxBC,IAAIC,MAAM,EACVC,GAAG,EACHC,OAAO,KAAK,EACZC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,OAAO,GAAG,EACVC,iBAAiB,EAAE,EACnBC,oBAAoB,EACpBC,cAAc,KAAK,EACnB,GAAGC,WACY;IACf,MAAM,EAAEC,OAAO,EAAEC,uBAAuB,EAAEhB,EAAE,EAAE,GAAGiB,eAAe,GAAGtB,gBAAgB;QACjFK,IAAIE,OAAOD;QACXE;QACAU;QACAT;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,MAAMS,YAAY5B,QAAQ;QACxB,IAAIsB,sBAAsB;YACxB,OAAO;QACT;QAEA,IAAII,yBAAyB;YAC3B,MAAMG,kBAAkBtB,eAAeuB,GAAG,CAACpB;YAE3C,IAAImB,iBAAiB;gBACnB,OAAOA;YACT;YAEA,MAAME,gBAAgBC,mCAAmCX;YACzDd,eAAe0B,GAAG,CAACvB,IAAIqB;YAEvB,OAAOA;QACT,OAAO;YACLxB,eAAe2B,MAAM,CAACxB;QACxB;QAEA,OAAOsB,mCAAmCX;IAC5C,GAAG;QAACX;QAAIgB;QAAyBJ;QAAsBD;KAAe;IAEtE,IAAI,CAACI,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,KAACxB,aAAakC,QAAQ;QAACC,OAAO1B;kBAC5B,cAAA,KAACJ;YACCI,IAAIA;YACJU,MAAMA;YACNiB,mBAAiB,GAAG3B,GAAG,MAAM,CAAC;YAC9BkB,WAAWA;YACXU,mBACEV,cAAc,UAAUF,0BACpB,CAACE;gBACC,MAAMC,kBAAkBtB,eAAeuB,GAAG,CAACpB;gBAE3C,IAAImB,iBAAiB;oBACnBA,gBAAgBU,OAAO,GAAGX;oBAC1BrB,eAAe0B,GAAG,CAACvB,IAAImB;gBACzB;YACF,IACAW;YAEL,GAAGb,aAAa;YAChB,GAAGH,SAAS;;;AAIrB,EAAE;AAEF,SAASQ,mCAAmCX,cAAsB;IAChE,MAAMoB,mBAAmBC,KAAKC,GAAG,CAC/BD,KAAKE,GAAG,CAACvB,gBAAgBjB,sBAAsByC,KAAK,GACpD1C,mBAAmB2C,KAAK;IAG1B,OAAO;QACLP,SAASE;QACTM,SAAS7C,QAAQuC,kBAAkBrC,sBAAsByC,KAAK,EAAEzC,sBAAsB4C,OAAO,IACzF;YAAC7C,mBAAmB8C,GAAG;YAAER;YAAkBtC,mBAAmB2C,KAAK;SAAC,GACpE;YAAC3C,mBAAmB8C,GAAG;YAAER;SAAiB;IAChD;AACF"}
1
+ {"version":3,"sources":["../../../../src/components/ModalPage/ModalPage.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { ModalContext } from '../../context/ModalContext';\nimport { inRange } from '../../helpers/range';\nimport { SNAP_POINT_DETENTS, SNAP_POINT_SAFE_RANGE, type SnapPoint } from '../../lib/sheet';\nimport { useModalManager } from '../ModalRoot/useModalManager';\nimport { ModalPageInternal } from './ModalPageInternal';\nimport type { ModalPageProps } from './types';\n\nconst snapPointCache = new Map<string, Exclude<SnapPoint, 'auto'>>();\n\n/**\n * @see https://vkui.io/components/modal-page\n */\nexport const ModalPage = ({\n id: idProp,\n nav,\n open = false,\n modalOverlayTestId,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n size = 's',\n settlingHeight = 50,\n dynamicContentHeight,\n disableModalOverlay,\n keepMounted = false,\n ...restProps\n}: ModalPageProps) => {\n const { mounted, shouldPreserveSnapPoint, id, ...resolvedProps } = useModalManager({\n id: nav || idProp,\n open,\n keepMounted,\n modalOverlayTestId,\n disableModalOverlay,\n noFocusToDialog,\n onOpen,\n onOpened,\n onClose,\n onClosed,\n });\n\n const snapPoint = useMemo((): SnapPoint => {\n if (dynamicContentHeight) {\n return 'auto';\n }\n\n if (shouldPreserveSnapPoint) {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n return snapPointCached;\n }\n\n const nextSnapPoint = transformSettlingHeightToSnapPoint(settlingHeight);\n snapPointCache.set(id, nextSnapPoint);\n\n return nextSnapPoint;\n } else {\n snapPointCache.delete(id);\n }\n\n return transformSettlingHeightToSnapPoint(settlingHeight);\n }, [id, shouldPreserveSnapPoint, dynamicContentHeight, settlingHeight]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <ModalContext.Provider value={id}>\n <ModalPageInternal\n id={id}\n size={size}\n aria-labelledby={`${id}-label`}\n snapPoint={snapPoint}\n onSnapPointChange={\n snapPoint !== 'auto' && shouldPreserveSnapPoint\n ? (snapPoint) => {\n const snapPointCached = snapPointCache.get(id);\n\n if (snapPointCached) {\n snapPointCached.initial = snapPoint;\n snapPointCache.set(id, snapPointCached);\n }\n }\n : undefined\n }\n {...resolvedProps}\n {...restProps}\n />\n </ModalContext.Provider>\n );\n};\n\nfunction transformSettlingHeightToSnapPoint(settlingHeight: number): Exclude<SnapPoint, 'auto'> {\n const currentSnapPoint = Math.min(\n Math.max(settlingHeight, SNAP_POINT_SAFE_RANGE.LOWER),\n SNAP_POINT_DETENTS.LARGE,\n );\n\n return {\n initial: currentSnapPoint,\n detents: inRange(currentSnapPoint, SNAP_POINT_SAFE_RANGE.LOWER, SNAP_POINT_SAFE_RANGE.HIGHEST)\n ? [SNAP_POINT_DETENTS.MIN, currentSnapPoint, SNAP_POINT_DETENTS.LARGE]\n : [SNAP_POINT_DETENTS.MIN, currentSnapPoint],\n };\n}\n"],"names":["useMemo","ModalContext","inRange","SNAP_POINT_DETENTS","SNAP_POINT_SAFE_RANGE","useModalManager","ModalPageInternal","snapPointCache","Map","ModalPage","id","idProp","nav","open","modalOverlayTestId","noFocusToDialog","onOpen","onOpened","onClose","onClosed","size","settlingHeight","dynamicContentHeight","disableModalOverlay","keepMounted","restProps","mounted","shouldPreserveSnapPoint","resolvedProps","snapPoint","snapPointCached","get","nextSnapPoint","transformSettlingHeightToSnapPoint","set","delete","Provider","value","aria-labelledby","onSnapPointChange","initial","undefined","currentSnapPoint","Math","min","max","LOWER","LARGE","detents","HIGHEST","MIN"],"mappings":"AAAA;;AAEA,SAASA,OAAO,QAAQ,QAAQ;AAChC,SAASC,YAAY,QAAQ,gCAA6B;AAC1D,SAASC,OAAO,QAAQ,yBAAsB;AAC9C,SAASC,kBAAkB,EAAEC,qBAAqB,QAAwB,2BAAkB;AAC5F,SAASC,eAAe,QAAQ,kCAA+B;AAC/D,SAASC,iBAAiB,QAAQ,yBAAsB;AAGxD,MAAMC,iBAAiB,IAAIC;AAE3B;;CAEC,GACD,OAAO,MAAMC,YAAY,CAAC,EACxBC,IAAIC,MAAM,EACVC,GAAG,EACHC,OAAO,KAAK,EACZC,kBAAkB,EAClBC,eAAe,EACfC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,OAAO,GAAG,EACVC,iBAAiB,EAAE,EACnBC,oBAAoB,EACpBC,mBAAmB,EACnBC,cAAc,KAAK,EACnB,GAAGC,WACY;IACf,MAAM,EAAEC,OAAO,EAAEC,uBAAuB,EAAEjB,EAAE,EAAE,GAAGkB,eAAe,GAAGvB,gBAAgB;QACjFK,IAAIE,OAAOD;QACXE;QACAW;QACAV;QACAS;QACAR;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,MAAMU,YAAY7B,QAAQ;QACxB,IAAIsB,sBAAsB;YACxB,OAAO;QACT;QAEA,IAAIK,yBAAyB;YAC3B,MAAMG,kBAAkBvB,eAAewB,GAAG,CAACrB;YAE3C,IAAIoB,iBAAiB;gBACnB,OAAOA;YACT;YAEA,MAAME,gBAAgBC,mCAAmCZ;YACzDd,eAAe2B,GAAG,CAACxB,IAAIsB;YAEvB,OAAOA;QACT,OAAO;YACLzB,eAAe4B,MAAM,CAACzB;QACxB;QAEA,OAAOuB,mCAAmCZ;IAC5C,GAAG;QAACX;QAAIiB;QAAyBL;QAAsBD;KAAe;IAEtE,IAAI,CAACK,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,KAACzB,aAAamC,QAAQ;QAACC,OAAO3B;kBAC5B,cAAA,KAACJ;YACCI,IAAIA;YACJU,MAAMA;YACNkB,mBAAiB,GAAG5B,GAAG,MAAM,CAAC;YAC9BmB,WAAWA;YACXU,mBACEV,cAAc,UAAUF,0BACpB,CAACE;gBACC,MAAMC,kBAAkBvB,eAAewB,GAAG,CAACrB;gBAE3C,IAAIoB,iBAAiB;oBACnBA,gBAAgBU,OAAO,GAAGX;oBAC1BtB,eAAe2B,GAAG,CAACxB,IAAIoB;gBACzB;YACF,IACAW;YAEL,GAAGb,aAAa;YAChB,GAAGH,SAAS;;;AAIrB,EAAE;AAEF,SAASQ,mCAAmCZ,cAAsB;IAChE,MAAMqB,mBAAmBC,KAAKC,GAAG,CAC/BD,KAAKE,GAAG,CAACxB,gBAAgBjB,sBAAsB0C,KAAK,GACpD3C,mBAAmB4C,KAAK;IAG1B,OAAO;QACLP,SAASE;QACTM,SAAS9C,QAAQwC,kBAAkBtC,sBAAsB0C,KAAK,EAAE1C,sBAAsB6C,OAAO,IACzF;YAAC9C,mBAAmB+C,GAAG;YAAER;YAAkBvC,mBAAmB4C,KAAK;SAAC,GACpE;YAAC5C,mBAAmB+C,GAAG;YAAER;SAAiB;IAChD;AACF"}
@@ -3,6 +3,7 @@
3
3
  inline-size: 100%;
4
4
  block-size: var(--vkui_internal_ModalPage--userHeight);
5
5
  margin-inline: auto;
6
+ pointer-events: initial;
6
7
  outline: none;
7
8
  }
8
9
 
@@ -28,7 +28,7 @@ const transitionStateClassNames = {
28
28
  * В компоненте заложена вся логика модального окна.
29
29
  *
30
30
  * @private
31
- */ export const ModalPageInternal = ({ open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel = 'Закрыть', outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, ...restProps })=>{
31
+ */ export const ModalPageInternal = ({ open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel = 'Закрыть', outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay, ...restProps })=>{
32
32
  const { hasCustomPanelHeaderAfter } = useConfigProvider();
33
33
  const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(open, {
34
34
  enableAppear: true,
@@ -65,7 +65,7 @@ const transitionStateClassNames = {
65
65
  const handleSheetRef = useExternRef(setSheetEl, ref);
66
66
  const handleSheetScrollRef = useExternRef(setSheetScrollEl, getModalContentRef);
67
67
  const [desktopMaxWidthClassName, desktopMaxWidthStyle] = resolveDesktopMaxWidth(isDesktop ? desktopMaxWidth : 's');
68
- const modalOverlay = /*#__PURE__*/ _jsx(ModalOverlay, {
68
+ const modalOverlay = !disableModalOverlay && /*#__PURE__*/ _jsx(ModalOverlay, {
69
69
  getRootRef: setBackdropEl,
70
70
  "data-testid": modalOverlayTestId,
71
71
  visible: open,
@@ -86,6 +86,7 @@ const transitionStateClassNames = {
86
86
  hidden: hidden,
87
87
  isDesktop: isDesktop,
88
88
  onKeyDown: handleEscKeyDown,
89
+ disableModalOverlay: disableModalOverlay,
89
90
  children: [
90
91
  modalOverlay,
91
92
  /*#__PURE__*/ _jsx(FocusTrap, {