@vkontakte/vkui 7.5.4 → 7.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) 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/ModalCard/ModalCard.d.ts +1 -1
  92. package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
  93. package/dist/components/ModalCard/ModalCard.js +4 -2
  94. package/dist/components/ModalCard/ModalCard.js.map +1 -1
  95. package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
  96. package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
  97. package/dist/components/ModalCard/ModalCardInternal.js +5 -3
  98. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  99. package/dist/components/ModalCard/types.d.ts +6 -0
  100. package/dist/components/ModalCard/types.d.ts.map +1 -1
  101. package/dist/components/ModalCard/types.js.map +1 -1
  102. package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
  103. package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
  104. package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
  105. package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
  106. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  107. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  108. package/dist/components/ModalPage/ModalPage.js +3 -1
  109. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  110. package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
  111. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  112. package/dist/components/ModalPage/ModalPageInternal.js +5 -3
  113. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  114. package/dist/components/ModalPage/types.d.ts +6 -0
  115. package/dist/components/ModalPage/types.d.ts.map +1 -1
  116. package/dist/components/ModalPage/types.js.map +1 -1
  117. package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
  118. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  119. package/dist/components/ModalRoot/ModalRoot.js +4 -2
  120. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  121. package/dist/components/ModalRoot/types.d.ts +4 -0
  122. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  123. package/dist/components/ModalRoot/types.js.map +1 -1
  124. package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
  125. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  126. package/dist/components/ModalRoot/useModalManager.js +2 -1
  127. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  128. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
  129. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  130. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
  131. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  132. package/dist/components/Popover/Popover.d.ts +1 -1
  133. package/dist/components/Popover/Popover.d.ts.map +1 -1
  134. package/dist/components/Popover/Popover.js.map +1 -1
  135. package/dist/components/Popover/usePopover.d.ts +1 -1
  136. package/dist/components/Popover/usePopover.d.ts.map +1 -1
  137. package/dist/components/Popover/usePopover.js +3 -1
  138. package/dist/components/Popover/usePopover.js.map +1 -1
  139. package/dist/components/Popper/Popper.d.ts +2 -2
  140. package/dist/components/Popper/Popper.d.ts.map +1 -1
  141. package/dist/components/Popper/Popper.js +3 -1
  142. package/dist/components/Popper/Popper.js.map +1 -1
  143. package/dist/components/Select/Select.d.ts +2 -1
  144. package/dist/components/Select/Select.d.ts.map +1 -1
  145. package/dist/components/Select/Select.js +5 -2
  146. package/dist/components/Select/Select.js.map +1 -1
  147. package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
  148. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  149. package/dist/components/SelectionControl/SelectionControl.js +22 -6
  150. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  151. package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
  152. package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
  153. package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
  154. package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
  155. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
  156. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  157. package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  158. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  159. package/dist/components/SimpleCell/SimpleCell.js +29 -8
  160. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  161. package/dist/components/Skeleton/Skeleton.js +1 -1
  162. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  163. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  164. package/dist/components/Tabs/Tabs.js +19 -9
  165. package/dist/components/Tabs/Tabs.js.map +1 -1
  166. package/dist/components/Tabs/TabsController.d.ts +2 -2
  167. package/dist/components/Tabs/TabsController.d.ts.map +1 -1
  168. package/dist/components/Tabs/TabsController.js.map +1 -1
  169. package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
  170. package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
  171. package/dist/components/Tabs/TabsControllerContext.js +4 -0
  172. package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
  173. package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
  174. package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
  175. package/dist/components/Tabs/TabsModeContext.js +1 -2
  176. package/dist/components/Tabs/TabsModeContext.js.map +1 -1
  177. package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
  178. package/dist/components/TabsItem/TabsItem.js +3 -1
  179. package/dist/components/TabsItem/TabsItem.js.map +1 -1
  180. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  181. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  182. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  183. package/dist/components/Tooltip/useTooltip.d.ts +1 -1
  184. package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
  185. package/dist/components/Tooltip/useTooltip.js +3 -1
  186. package/dist/components/Tooltip/useTooltip.js.map +1 -1
  187. package/dist/components/Typography/Caption/Caption.d.ts +2 -0
  188. package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
  189. package/dist/components/Typography/Caption/Caption.js +4 -1
  190. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  191. package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
  192. package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
  193. package/dist/components/Typography/Footnote/Footnote.js +4 -1
  194. package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
  195. package/dist/components/Typography/Typography.d.ts +1 -0
  196. package/dist/components/Typography/Typography.d.ts.map +1 -1
  197. package/dist/components/Typography/Typography.js +7 -1
  198. package/dist/components/Typography/Typography.js.map +1 -1
  199. package/dist/components/View/View.d.ts.map +1 -1
  200. package/dist/components/View/View.js +2 -1
  201. package/dist/components/View/View.js.map +1 -1
  202. package/dist/components/View/ViewInfinite.d.ts.map +1 -1
  203. package/dist/components/View/ViewInfinite.js +2 -1
  204. package/dist/components/View/ViewInfinite.js.map +1 -1
  205. package/dist/components.css +1 -1
  206. package/dist/components.css.map +1 -1
  207. package/dist/cssm/components/Banner/Banner.module.css +1 -6
  208. package/dist/cssm/components/Calendar/Calendar.js +6 -6
  209. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  210. package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
  211. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  212. package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
  213. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  214. package/dist/cssm/components/CalendarRange/utils.js +6 -5
  215. package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
  216. package/dist/cssm/components/Cell/Cell.js +3 -1
  217. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  218. package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
  219. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  220. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
  221. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  222. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
  223. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
  224. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  225. package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  226. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  227. package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
  228. package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
  229. package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
  230. package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
  231. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  232. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
  233. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  234. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  235. package/dist/cssm/components/CustomSelect/helpers.js +62 -0
  236. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  237. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
  238. package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
  239. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
  240. package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
  241. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
  242. package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
  243. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
  244. package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
  245. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
  246. package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
  247. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
  248. package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
  249. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
  250. package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
  251. package/dist/cssm/components/CustomSelect/types.js +3 -0
  252. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  253. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
  254. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  255. package/dist/cssm/components/DateInput/DateInput.js +3 -2
  256. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  257. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
  258. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  259. package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
  260. package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
  261. package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
  262. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  263. package/dist/cssm/components/ModalCard/types.js.map +1 -1
  264. package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
  265. package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
  266. package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
  267. package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
  268. package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
  269. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  270. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
  271. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  272. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  273. package/dist/cssm/components/ModalPage/types.js.map +1 -1
  274. package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
  275. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  276. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  277. package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
  278. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  279. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
  280. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  281. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  282. package/dist/cssm/components/Popover/usePopover.js +2 -1
  283. package/dist/cssm/components/Popover/usePopover.js.map +1 -1
  284. package/dist/cssm/components/Popper/Popper.js +2 -1
  285. package/dist/cssm/components/Popper/Popper.js.map +1 -1
  286. package/dist/cssm/components/Select/Select.js +1 -1
  287. package/dist/cssm/components/Select/Select.js.map +1 -1
  288. package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
  289. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  290. package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
  291. package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
  292. package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
  293. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
  294. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
  295. package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  296. package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
  297. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  298. package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
  299. package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
  300. package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
  301. package/dist/cssm/components/Tabs/Tabs.js +19 -9
  302. package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
  303. package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
  304. package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
  305. package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
  306. package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
  307. package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
  308. package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
  309. package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
  310. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  311. package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
  312. package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
  313. package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
  314. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  315. package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
  316. package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
  317. package/dist/cssm/components/Typography/Typography.js +7 -1
  318. package/dist/cssm/components/Typography/Typography.js.map +1 -1
  319. package/dist/cssm/components/View/View.js +2 -1
  320. package/dist/cssm/components/View/View.js.map +1 -1
  321. package/dist/cssm/components/View/View.module.css +1 -1
  322. package/dist/cssm/components/View/ViewInfinite.js +2 -1
  323. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  324. package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  325. package/dist/cssm/hooks/useCalendar.js +6 -4
  326. package/dist/cssm/hooks/useCalendar.js.map +1 -1
  327. package/dist/cssm/hooks/useFloatingElement.js +3 -2
  328. package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
  329. package/dist/cssm/hooks/useTodayDate.js +3 -2
  330. package/dist/cssm/hooks/useTodayDate.js.map +1 -1
  331. package/dist/cssm/index.js.map +1 -1
  332. package/dist/cssm/lib/accessibility.js +8 -0
  333. package/dist/cssm/lib/accessibility.js.map +1 -1
  334. package/dist/cssm/lib/calendar.js +9 -7
  335. package/dist/cssm/lib/calendar.js.map +1 -1
  336. package/dist/cssm/lib/date.js +66 -3
  337. package/dist/cssm/lib/date.js.map +1 -1
  338. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  339. package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  340. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  341. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
  342. package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  343. package/dist/cssm/lib/utils.js +1 -0
  344. package/dist/cssm/lib/utils.js.map +1 -1
  345. package/dist/cssm/styles/themes.css +1 -1
  346. package/dist/hooks/useCalendar.d.ts.map +1 -1
  347. package/dist/hooks/useCalendar.js +6 -4
  348. package/dist/hooks/useCalendar.js.map +1 -1
  349. package/dist/hooks/useFloatingElement.d.ts +1 -1
  350. package/dist/hooks/useFloatingElement.d.ts.map +1 -1
  351. package/dist/hooks/useFloatingElement.js +3 -2
  352. package/dist/hooks/useFloatingElement.js.map +1 -1
  353. package/dist/hooks/useTodayDate.d.ts.map +1 -1
  354. package/dist/hooks/useTodayDate.js +3 -2
  355. package/dist/hooks/useTodayDate.js.map +1 -1
  356. package/dist/index.d.ts +4 -2
  357. package/dist/index.d.ts.map +1 -1
  358. package/dist/index.js.map +1 -1
  359. package/dist/lib/accessibility.d.ts +1 -1
  360. package/dist/lib/accessibility.d.ts.map +1 -1
  361. package/dist/lib/accessibility.js +8 -0
  362. package/dist/lib/accessibility.js.map +1 -1
  363. package/dist/lib/calendar.d.ts.map +1 -1
  364. package/dist/lib/calendar.js +9 -7
  365. package/dist/lib/calendar.js.map +1 -1
  366. package/dist/lib/date.d.ts +31 -1
  367. package/dist/lib/date.d.ts.map +1 -1
  368. package/dist/lib/date.js +67 -3
  369. package/dist/lib/date.js.map +1 -1
  370. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
  371. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
  372. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
  373. package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
  374. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
  375. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  376. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  377. package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
  378. package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
  379. package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
  380. package/dist/lib/utils.d.ts +1 -0
  381. package/dist/lib/utils.d.ts.map +1 -1
  382. package/dist/lib/utils.js +1 -0
  383. package/dist/lib/utils.js.map +1 -1
  384. package/dist/vkui.css +1 -1
  385. package/dist/vkui.css.map +1 -1
  386. package/package.json +6 -7
  387. package/src/components/Banner/Banner.module.css +1 -6
  388. package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
  389. package/src/components/Calendar/Calendar.tsx +6 -6
  390. package/src/components/CalendarDays/CalendarDays.tsx +3 -3
  391. package/src/components/CalendarRange/CalendarRange.tsx +15 -20
  392. package/src/components/CalendarRange/utils.ts +7 -6
  393. package/src/components/Cell/Cell.tsx +3 -0
  394. package/src/components/Checkbox/Checkbox.tsx +6 -0
  395. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
  396. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
  397. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
  398. package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
  399. package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
  400. package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
  401. package/src/components/ChipsInputBase/types.ts +2 -45
  402. package/src/components/ContentBadge/ContentBadge.tsx +18 -12
  403. package/src/components/ContentCard/ContentCard.tsx +1 -1
  404. package/src/components/CustomSelect/CustomSelect.tsx +216 -562
  405. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
  406. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
  407. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
  408. package/src/components/CustomSelect/helpers.ts +103 -0
  409. package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
  410. package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
  411. package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
  412. package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
  413. package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
  414. package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
  415. package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
  416. package/src/components/CustomSelect/types.ts +38 -0
  417. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
  418. package/src/components/DateInput/DateInput.tsx +9 -3
  419. package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
  420. package/src/components/ModalCard/ModalCard.tsx +2 -0
  421. package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
  422. package/src/components/ModalCard/types.ts +6 -0
  423. package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
  424. package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
  425. package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
  426. package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
  427. package/src/components/ModalPage/ModalPage.module.css +1 -0
  428. package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
  429. package/src/components/ModalPage/ModalPage.tsx +2 -0
  430. package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
  431. package/src/components/ModalPage/types.ts +6 -0
  432. package/src/components/ModalRoot/ModalRoot.tsx +19 -6
  433. package/src/components/ModalRoot/types.ts +5 -0
  434. package/src/components/ModalRoot/useModalManager.tsx +4 -0
  435. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
  436. package/src/components/Popover/Popover.tsx +1 -0
  437. package/src/components/Popover/usePopover.tsx +2 -0
  438. package/src/components/Popper/Popper.tsx +3 -0
  439. package/src/components/Select/Select.tsx +5 -5
  440. package/src/components/SelectionControl/SelectionControl.module.css +6 -3
  441. package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
  442. package/src/components/SelectionControl/SelectionControl.tsx +30 -8
  443. package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
  444. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
  445. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
  446. package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
  447. package/src/components/SimpleCell/SimpleCell.tsx +5 -0
  448. package/src/components/Skeleton/Skeleton.tsx +1 -1
  449. package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
  450. package/src/components/Tabs/Tabs.tsx +16 -12
  451. package/src/components/Tabs/TabsController.ts +2 -2
  452. package/src/components/Tabs/TabsControllerContext.ts +7 -0
  453. package/src/components/Tabs/TabsModeContext.ts +0 -3
  454. package/src/components/TabsItem/TabsItem.tsx +5 -9
  455. package/src/components/Tooltip/Tooltip.tsx +1 -0
  456. package/src/components/Tooltip/useTooltip.tsx +2 -0
  457. package/src/components/Typography/Caption/Caption.tsx +14 -6
  458. package/src/components/Typography/Footnote/Footnote.tsx +10 -6
  459. package/src/components/Typography/Typography.tsx +9 -2
  460. package/src/components/View/View.module.css +1 -1
  461. package/src/components/View/View.tsx +2 -1
  462. package/src/components/View/ViewInfinite.tsx +2 -1
  463. package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
  464. package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
  465. package/src/hooks/useCalendar.ts +6 -4
  466. package/src/hooks/useFloatingElement.tsx +2 -0
  467. package/src/hooks/useTodayDate.ts +3 -2
  468. package/src/index.ts +5 -3
  469. package/src/lib/accessibility.ts +4 -0
  470. package/src/lib/calendar.ts +8 -12
  471. package/src/lib/date.ts +82 -3
  472. package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
  473. package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
  474. package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
  475. package/src/lib/utils.ts +3 -0
@@ -0,0 +1,132 @@
1
+ import { type ChangeEvent } from 'react';
2
+ import * as React from 'react';
3
+ import { useStateWithPrev } from '../../../hooks/useStateWithPrev';
4
+ import {
5
+ type NativeSelectValue,
6
+ NOT_SELECTED,
7
+ remapFromNativeValueToSelectValue,
8
+ remapFromSelectValueToNativeValue,
9
+ type SelectValue,
10
+ } from '../../NativeSelect/NativeSelect';
11
+ import { type SelectProps } from '../CustomSelect';
12
+
13
+ /* eslint-disable jsdoc/require-jsdoc */
14
+ type UseSelectedOptionControllerProps = Pick<SelectProps, 'value' | 'defaultValue'> & {
15
+ isControlledOutside: boolean;
16
+ allowClearButton: boolean;
17
+ onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;
18
+ };
19
+ /* eslint-enable jsdoc/require-jsdoc */
20
+
21
+ export function useSelectedOptionController({
22
+ value,
23
+ defaultValue,
24
+ isControlledOutside,
25
+ allowClearButton,
26
+ onChange,
27
+ }: UseSelectedOptionControllerProps) {
28
+ const [[nativeSelectValue, prevNativeSelectValue], setNativeSelectValue] =
29
+ useStateWithPrev<NativeSelectValue>(() => {
30
+ if (value !== undefined) {
31
+ return remapFromSelectValueToNativeValue(value);
32
+ }
33
+ if (defaultValue !== undefined) {
34
+ return remapFromSelectValueToNativeValue(defaultValue);
35
+ }
36
+ return NOT_SELECTED.NATIVE;
37
+ });
38
+ const nativeSelectValueRef = React.useRef<NativeSelectValue>(nativeSelectValue);
39
+
40
+ const [selectedOptionValue, setSelectedOptionValue] = React.useState<SelectValue>(() =>
41
+ remapFromNativeValueToSelectValue(nativeSelectValue),
42
+ );
43
+
44
+ const _setNativeSelectValue = React.useCallback(
45
+ (newValue: NativeSelectValue) => {
46
+ setNativeSelectValue(newValue);
47
+ nativeSelectValueRef.current = newValue;
48
+ },
49
+ [setNativeSelectValue],
50
+ );
51
+
52
+ React.useEffect(
53
+ function syncNativeSelectValueWithPropValue() {
54
+ if (value !== undefined) {
55
+ _setNativeSelectValue(remapFromSelectValueToNativeValue(value));
56
+ }
57
+ },
58
+ [value, _setNativeSelectValue],
59
+ );
60
+
61
+ React.useEffect(
62
+ function syncNativeSelectValueWithSelectedOptionValue() {
63
+ const remappedSelectedValue = remapFromSelectValueToNativeValue(selectedOptionValue);
64
+ if (nativeSelectValueRef.current !== remappedSelectedValue) {
65
+ setNativeSelectValue(remappedSelectedValue);
66
+ }
67
+ },
68
+ [selectedOptionValue, setNativeSelectValue],
69
+ );
70
+
71
+ const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {
72
+ // для ситуаций, когда в опциях value это string а value/defaultValue это number
73
+ // и наоборот, приводим значение nativeSelectValue из стейта к строке.
74
+ // ведь nativeSelect всегда возвращает string в onChange, а пользователь
75
+ // может использовать number для опций
76
+ //
77
+ // native select всегда возвращает string в качестве value в onChange
78
+ // Когда селект контролируемый, то пользователь, в onChange может сохранить в свой стейт строку (например '3'), хотя
79
+ // в качестве value опции может использовать число (3),
80
+ // тогда строчное значение value ('3') из стейта пользователя
81
+ // будет передано в CustomSelect, и после синхронизации nativeSelectValue (3) и props.value ('3') и после клика на уже выбранную опцию (3),
82
+ // когда nativeSelectValue обновится на значение опции (число 3),
83
+ // сравнение nativeSelectValue (3) и prevNativeSelectValue ('3') может не сработать лишь из-за того, что они в разных типах.
84
+ const convertedNativeSelectValue =
85
+ typeof nativeSelectValue === 'number' &&
86
+ (typeof value === 'string' || typeof prevNativeSelectValue === 'string')
87
+ ? String(nativeSelectValue)
88
+ : nativeSelectValue;
89
+
90
+ const isCalledWithSameControlledOptionValue =
91
+ isControlledOutside &&
92
+ value === remapFromNativeValueToSelectValue(convertedNativeSelectValue);
93
+
94
+ const isNativeValueChanged =
95
+ convertedNativeSelectValue !== prevNativeSelectValue && prevNativeSelectValue !== undefined;
96
+
97
+ const isTriggeredByClearButton =
98
+ allowClearButton &&
99
+ // Проверяем, что новое значение NOT_SELECTED.NATIVE
100
+ nativeSelectValue === NOT_SELECTED.NATIVE &&
101
+ // Проверяем, что предыдущее значение не undefined(кейс с первой отрисовкой, когда предыдущего значения не было)
102
+ prevNativeSelectValue !== undefined &&
103
+ // Проверяем, что предыдущее значение не NOT_SELECTED.NATIVE(если до этого было уже сброшенное значение)
104
+ prevNativeSelectValue !== NOT_SELECTED.NATIVE;
105
+
106
+ const shouldCallOnChange =
107
+ !isCalledWithSameControlledOptionValue && (isNativeValueChanged || isTriggeredByClearButton);
108
+
109
+ if (!shouldCallOnChange) {
110
+ return;
111
+ }
112
+
113
+ const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);
114
+
115
+ if (e.target.value === NOT_SELECTED.NATIVE) {
116
+ e.target.value = '';
117
+ }
118
+ if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
119
+ e.currentTarget.value = '';
120
+ }
121
+
122
+ onChange?.(e, remappedNativeValue);
123
+ };
124
+
125
+ return {
126
+ selectedOptionValue,
127
+ setSelectedOptionValue,
128
+ nativeSelectValue,
129
+ setNativeSelectValue: _setNativeSelectValue,
130
+ onNativeSelectChange,
131
+ };
132
+ }
@@ -0,0 +1,38 @@
1
+ import type * as React from 'react';
2
+ import { type Alignment, type Side } from '../../lib/floating';
3
+ import { type CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';
4
+ import { type SelectValue } from '../NativeSelect/NativeSelect';
5
+
6
+ /* eslint-disable jsdoc/require-jsdoc */
7
+ export type MousePosition = {
8
+ x: React.MouseEvent['clientX'];
9
+ y: React.MouseEvent['clientY'];
10
+ };
11
+ /* eslint-enable jsdoc/require-jsdoc */
12
+
13
+ export interface CustomSelectOptionInterface {
14
+ /**
15
+ * Значение.
16
+ */
17
+ value: Exclude<SelectValue, null>;
18
+ /**
19
+ * Отображаемый текст.
20
+ */
21
+ label: React.ReactElement | string;
22
+ /**
23
+ * Блокировка взаимодействия с компонентом.
24
+ */
25
+ disabled?: boolean;
26
+ [index: string]: any;
27
+ }
28
+
29
+ export interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>
30
+ extends CustomSelectOptionProps {
31
+ /**
32
+ * Данные об опции.
33
+ */
34
+ option: T;
35
+ }
36
+
37
+ type PopupDirectionSide = Extract<Side, 'top' | 'bottom'>;
38
+ export type PopupDirection = PopupDirectionSide | `${PopupDirectionSide}-${Alignment}`;
@@ -68,6 +68,7 @@ export const CustomSelectDropdown = ({
68
68
  className={noMaxHeight ? undefined : styles.inWithMaxHeight}
69
69
  overscrollBehavior={overscrollBehavior}
70
70
  tabIndex={-1}
71
+ aria-busy={fetching}
71
72
  >
72
73
  {fetching ? (
73
74
  <div className={styles.fetching}>
@@ -8,7 +8,7 @@ import { useAdaptivity } from '../../hooks/useAdaptivity';
8
8
  import { useDateInput } from '../../hooks/useDateInput';
9
9
  import { useExternRef } from '../../hooks/useExternRef';
10
10
  import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
11
- import { format, isMatch, parse } from '../../lib/date';
11
+ import { dateFormatter, dateTimeFormatter, isMatch, parse } from '../../lib/date';
12
12
  import type { PlacementWithAuto } from '../../lib/floating';
13
13
  import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
14
14
  import type { HasRootRef } from '../../types';
@@ -471,7 +471,13 @@ export const DateInput = ({
471
471
  aria-hidden
472
472
  tabIndex={readOnly ? 0 : -1}
473
473
  name={name}
474
- value={value ? format(value, enableTime ? "dd.MM.yyyy'T'HH:mm" : 'dd.MM.yyyy') : ''}
474
+ value={
475
+ value
476
+ ? enableTime
477
+ ? dateTimeFormatter.format(value)
478
+ : dateFormatter.format(value)
479
+ : ''
480
+ }
475
481
  onFocus={handleFieldEnter}
476
482
  />
477
483
  <Text
@@ -557,7 +563,7 @@ export const DateInput = ({
557
563
  )}
558
564
  </Text>
559
565
  {customValue && (
560
- <Text className={styles.customValue} aria-hidden>
566
+ <Text className={styles.customValue} aria-hidden normalize={false}>
561
567
  {customValue}
562
568
  </Text>
563
569
  )}
@@ -3,13 +3,12 @@
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';
8
7
  import { useDateInput } from '../../hooks/useDateInput';
9
8
  import { useCustomEnsuredControl } from '../../hooks/useEnsuredControl';
10
9
  import { useExternRef } from '../../hooks/useExternRef';
11
10
  import { type UseFocusTrapProps } from '../../hooks/useFocusTrap';
12
- import { format, isMatch, parse } from '../../lib/date';
11
+ import { dateFormatter, isMatch, parse } from '../../lib/date';
13
12
  import type { PlacementWithAuto } from '../../lib/floating';
14
13
  import type { HasRootRef } from '../../types';
15
14
  import {
@@ -321,7 +320,7 @@ export const DateRangeInput = ({
321
320
  const end = isEndValid
322
321
  ? parse(formattedEndValue, mask, (valueExists && value?.[1]) || now)
323
322
  : null;
324
- if (start && end && isAfter(end, start)) {
323
+ if (start && end && end > start) {
325
324
  updateValue([start, end]);
326
325
  }
327
326
  },
@@ -466,14 +465,18 @@ export const DateRangeInput = ({
466
465
  tabIndex={readOnly ? 0 : -1}
467
466
  value={
468
467
  value
469
- ? `${value[0] ? format(value[0], 'dd.MM.yyyy') : ''} - ${
470
- value[1] ? format(value[1], 'dd.MM.yyyy') : ''
468
+ ? `${value[0] ? dateFormatter.format(value[0]) : ''} - ${
469
+ value[1] ? dateFormatter.format(value[1]) : ''
471
470
  }`
472
471
  : ''
473
472
  }
474
473
  onFocus={handleFieldEnter}
475
474
  />
476
- <Text className={dateInputStyles.input} onClick={showCalendarOnInputAreaClick}>
475
+ <Text
476
+ className={dateInputStyles.input}
477
+ onClick={showCalendarOnInputAreaClick}
478
+ normalize={false}
479
+ >
477
480
  <NumberInputLike
478
481
  value={internalValue[0]}
479
482
  minValue={1}
@@ -19,6 +19,7 @@ export const ModalCard = ({
19
19
  onClose,
20
20
  onClosed,
21
21
  keepMounted = false,
22
+ disableModalOverlay,
22
23
  ...restProps
23
24
  }: ModalCardProps): React.ReactNode => {
24
25
  const {
@@ -32,6 +33,7 @@ export const ModalCard = ({
32
33
  keepMounted,
33
34
  modalOverlayTestId,
34
35
  noFocusToDialog,
36
+ disableModalOverlay,
35
37
  onOpen,
36
38
  onOpened,
37
39
  onClose,
@@ -73,6 +73,7 @@ export const ModalCardInternal = ({
73
73
  onClose = noop,
74
74
  onClosed,
75
75
  disableFocusTrap,
76
+ disableModalOverlay,
76
77
  ...restProps
77
78
  }: ModalCardInternalProps): ReactNode => {
78
79
  const platform = usePlatform();
@@ -115,7 +116,7 @@ export const ModalCardInternal = ({
115
116
  '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',
116
117
  }
117
118
  : styleProp;
118
- const modalOverlay = (
119
+ const modalOverlay = !disableModalOverlay && (
119
120
  <ModalOverlay
120
121
  getRootRef={setBackdropEl}
121
122
  data-testid={modalOverlayTestId}
@@ -146,7 +147,12 @@ export const ModalCardInternal = ({
146
147
  });
147
148
 
148
149
  return (
149
- <ModalOutlet hidden={hidden} isDesktop={isDesktop} onKeyDown={handleEscKeyDown}>
150
+ <ModalOutlet
151
+ hidden={hidden}
152
+ isDesktop={isDesktop}
153
+ onKeyDown={handleEscKeyDown}
154
+ disableModalOverlay={disableModalOverlay}
155
+ >
150
156
  {modalOverlay}
151
157
  <ModalCardBase
152
158
  {...restProps}
@@ -56,4 +56,10 @@ export interface ModalCardProps
56
56
  * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.
57
57
  */
58
58
  disableFocusTrap?: UseFocusTrapProps['disabled'];
59
+ /**
60
+ * Отключает отображение и взаимодействие с фоном модалки.
61
+ * > При использовании `ModalCard` внутри `ModalRoot` есть особенность использования этого свойства.
62
+ * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#otklyuchenie-zadnego-fona-u-konkretnogo-modalnogo-okna).
63
+ */
64
+ disableModalOverlay?: boolean;
59
65
  }
@@ -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
  .hostDesktop:not([hidden]) {
11
15
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"sources":["./ModalOutlet.module.css"],"names":["host","hostDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aASAC,a,WATA;AAAA;AAAA","file":"ModalOutlet.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ModalOutlet.module.css"],"names":["host","disableModalOverlay","hostDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAQAC,qB,WARA;AAAA,E,aAaAC,a,WAbA;AAAA;AAAA","file":"ModalOutlet.module.css.d.ts","sourceRoot":""}
@@ -6,6 +6,7 @@ import styles from './ModalOutlet.module.css';
6
6
 
7
7
  export interface ModalOutletProps
8
8
  extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'hidden' | 'aria-hidden'> {
9
+ disableModalOverlay?: boolean;
9
10
  hidden?: boolean;
10
11
  isDesktop?: boolean;
11
12
  }
@@ -19,12 +20,18 @@ export const ModalOutlet = ({
19
20
  isDesktop,
20
21
  children,
21
22
  getRootRef,
23
+ disableModalOverlay,
22
24
  ...restProps
23
25
  }: ModalOutletProps) => {
24
26
  return (
25
27
  <div
26
28
  ref={getRootRef}
27
- className={classNames(className, styles.host, isDesktop && styles.hostDesktop)}
29
+ className={classNames(
30
+ className,
31
+ styles.host,
32
+ isDesktop && styles.hostDesktop,
33
+ disableModalOverlay && styles.disableModalOverlay,
34
+ )}
28
35
  hidden={hidden}
29
36
  aria-hidden={hidden}
30
37
  {...restProps}
@@ -1,7 +1,7 @@
1
1
  .host {
2
2
  inset: 0;
3
3
  user-select: none;
4
- background-color: rgb(0, 0, 0, 0.4);
4
+ background-color: var(--vkui--color_overlay_primary);
5
5
  transition: opacity 0.3s linear;
6
6
  will-change: opacity;
7
7
  -webkit-tap-highlight-color: transparent;
@@ -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
 
@@ -1 +1 @@
1
- {"version":3,"sources":["./ModalPage.module.css"],"names":["host","hostMobile","hostMobileSafeAreaInsetTop","hostMobileSafeAreaInsetTopWithCustomOffset","hostDesktop","hostDesktopMaxWidthS","hostDesktopMaxWidthM","hostDesktopMaxWidthL","document","documentMobile","documentStateEnter","documentStateEntering","documentStateExiting","documentStateExited","documentDesktop","children","childrenMobile","childrenDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aASAC,Y,WATA;AAAA,E,aAoBAC,4B,WApBA;AAAA,E,aAwBAC,4C,WAxBA;AAAA,E,aA+BAC,a,WA/BA;AAAA,E,aAkDAC,sB,WAlDA;AAAA,E,aAsDAC,sB,WAtDA;AAAA,E,aA0DAC,sB,WA1DA;AAAA,E,aA8DAC,U,WA9DA;AAAA,E,aA2EAC,gB,WA3EA;AAAA,E,aA4FAA,gB,WA5FA;AAAA,E,aA4FeC,oB,WA5Ff;AAAA,E,aAgGAD,gB,WAhGA;AAAA,E,aAgGeE,uB,WAhGf;AAAA,E,aAqGAF,gB,WArGA;AAAA,E,aAqGeG,sB,WArGf;AAAA,E,aA0GAH,gB,WA1GA;AAAA,E,aA0GeI,qB,WA1Gf;AAAA,E,aA+GAC,iB,WA/GA;AAAA,E,aAoHAA,iB,WApHA;AAAA,E,aAoHgBJ,oB,WApHhB;AAAA,E,aAwHAI,iB,WAxHA;AAAA,E,aAwHgBH,uB,WAxHhB;AAAA,E,aA6HAG,iB,WA7HA;AAAA,E,aA6HgBF,sB,WA7HhB;AAAA,E,aAkIAE,iB,WAlIA;AAAA,E,aAkIgBD,qB,WAlIhB;AAAA,E,aAsIAE,U,WAtIA;AAAA,E,aA0JAC,gB,WA1JA;AAAA,E,aA+JAC,iB,WA/JA;AAAA;AAAA","file":"ModalPage.module.css.d.ts","sourceRoot":""}
1
+ {"version":3,"sources":["./ModalPage.module.css"],"names":["host","hostMobile","hostMobileSafeAreaInsetTop","hostMobileSafeAreaInsetTopWithCustomOffset","hostDesktop","hostDesktopMaxWidthS","hostDesktopMaxWidthM","hostDesktopMaxWidthL","document","documentMobile","documentStateEnter","documentStateEntering","documentStateExiting","documentStateExited","documentDesktop","children","childrenMobile","childrenDesktop"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAUAC,Y,WAVA;AAAA,E,aAqBAC,4B,WArBA;AAAA,E,aAyBAC,4C,WAzBA;AAAA,E,aAgCAC,a,WAhCA;AAAA,E,aAmDAC,sB,WAnDA;AAAA,E,aAuDAC,sB,WAvDA;AAAA,E,aA2DAC,sB,WA3DA;AAAA,E,aA+DAC,U,WA/DA;AAAA,E,aA4EAC,gB,WA5EA;AAAA,E,aA6FAA,gB,WA7FA;AAAA,E,aA6FeC,oB,WA7Ff;AAAA,E,aAiGAD,gB,WAjGA;AAAA,E,aAiGeE,uB,WAjGf;AAAA,E,aAsGAF,gB,WAtGA;AAAA,E,aAsGeG,sB,WAtGf;AAAA,E,aA2GAH,gB,WA3GA;AAAA,E,aA2GeI,qB,WA3Gf;AAAA,E,aAgHAC,iB,WAhHA;AAAA,E,aAqHAA,iB,WArHA;AAAA,E,aAqHgBJ,oB,WArHhB;AAAA,E,aAyHAI,iB,WAzHA;AAAA,E,aAyHgBH,uB,WAzHhB;AAAA,E,aA8HAG,iB,WA9HA;AAAA,E,aA8HgBF,sB,WA9HhB;AAAA,E,aAmIAE,iB,WAnIA;AAAA,E,aAmIgBD,qB,WAnIhB;AAAA,E,aAuIAE,U,WAvIA;AAAA,E,aA2JAC,gB,WA3JA;AAAA,E,aAgKAC,iB,WAhKA;AAAA;AAAA","file":"ModalPage.module.css.d.ts","sourceRoot":""}
@@ -26,6 +26,7 @@ export const ModalPage = ({
26
26
  size = 's',
27
27
  settlingHeight = 50,
28
28
  dynamicContentHeight,
29
+ disableModalOverlay,
29
30
  keepMounted = false,
30
31
  ...restProps
31
32
  }: ModalPageProps) => {
@@ -34,6 +35,7 @@ export const ModalPage = ({
34
35
  open,
35
36
  keepMounted,
36
37
  modalOverlayTestId,
38
+ disableModalOverlay,
37
39
  noFocusToDialog,
38
40
  onOpen,
39
41
  onOpened,
@@ -74,6 +74,7 @@ export const ModalPageInternal = ({
74
74
  onClose = noop,
75
75
  onClosed,
76
76
  disableFocusTrap,
77
+ disableModalOverlay,
77
78
  ...restProps
78
79
  }: ModalPageInternalProps) => {
79
80
  const { hasCustomPanelHeaderAfter } = useConfigProvider();
@@ -121,7 +122,7 @@ export const ModalPageInternal = ({
121
122
  isDesktop ? desktopMaxWidth : 's',
122
123
  );
123
124
 
124
- const modalOverlay = (
125
+ const modalOverlay = !disableModalOverlay && (
125
126
  <ModalOverlay
126
127
  getRootRef={setBackdropEl}
127
128
  data-testid={modalOverlayTestId}
@@ -147,7 +148,12 @@ export const ModalPageInternal = ({
147
148
  useScrollLock(!hidden);
148
149
 
149
150
  return (
150
- <ModalOutlet hidden={hidden} isDesktop={isDesktop} onKeyDown={handleEscKeyDown}>
151
+ <ModalOutlet
152
+ hidden={hidden}
153
+ isDesktop={isDesktop}
154
+ onKeyDown={handleEscKeyDown}
155
+ disableModalOverlay={disableModalOverlay}
156
+ >
151
157
  {modalOverlay}
152
158
  <FocusTrap
153
159
  {...restProps}
@@ -131,4 +131,10 @@ export interface ModalPageProps
131
131
  * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.
132
132
  */
133
133
  disableFocusTrap?: UseFocusTrapProps['disabled'];
134
+ /**
135
+ * Отключает отображение и взаимодействие с фоном модалки.
136
+ * > При использовании `ModalPage` внутри `ModalRoot` есть особенность использования этого свойства.
137
+ * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#otklyuchenie-zadnego-fona-u-konkretnogo-modalnogo-okna).
138
+ */
139
+ disableModalOverlay?: boolean;
134
140
  }
@@ -17,6 +17,7 @@ export const ModalRoot = ({
17
17
  children,
18
18
  modalOverlayTestId,
19
19
  noFocusToDialog,
20
+ disableModalOverlay,
20
21
  usePortal,
21
22
  onOpen,
22
23
  onOpened,
@@ -31,6 +32,7 @@ export const ModalRoot = ({
31
32
  activeModal,
32
33
  modalOverlayTestId,
33
34
  noFocusToDialog,
35
+ disableModalOverlay,
34
36
 
35
37
  // callbacks
36
38
  onOpen,
@@ -56,18 +58,29 @@ export const ModalRoot = ({
56
58
  }
57
59
  : noop,
58
60
  }),
59
- [activeModal, modalOverlayTestId, noFocusToDialog, onClose, onClosed, onOpen, onOpened],
61
+ [
62
+ activeModal,
63
+ disableModalOverlay,
64
+ modalOverlayTestId,
65
+ noFocusToDialog,
66
+ onClose,
67
+ onClosed,
68
+ onOpen,
69
+ onOpened,
70
+ ],
60
71
  );
61
72
  const modalOverlayRef = React.useRef<HTMLDivElement>(null);
62
73
  return (
63
74
  <AppRootPortal usePortal={usePortal}>
64
75
  <ModalRootContext.Provider value={contextValue}>
65
76
  <ModalRootOverlayContext.Provider value={modalOverlayRef}>
66
- <ModalOverlay
67
- position="fixed"
68
- visible={typeof activeModal === 'string'}
69
- getRootRef={modalOverlayRef}
70
- />
77
+ {!disableModalOverlay && (
78
+ <ModalOverlay
79
+ position="fixed"
80
+ visible={typeof activeModal === 'string'}
81
+ getRootRef={modalOverlayRef}
82
+ />
83
+ )}
71
84
  {children}
72
85
  </ModalRootOverlayContext.Provider>
73
86
  </ModalRootContext.Provider>
@@ -124,6 +124,11 @@ type ModalRootBaseProps = {
124
124
  * Будет вызвано при окончательном закрытии активной модалки с её id.
125
125
  */
126
126
  onClosed?: ModalRootCallbackFunction;
127
+
128
+ /**
129
+ * Отключает отображение и взаимодействие с фоном модалки.
130
+ */
131
+ disableModalOverlay?: boolean;
127
132
  };
128
133
 
129
134
  export interface ModalRootProps extends ModalRootBaseProps {
@@ -17,6 +17,7 @@ export interface UseModalManager {
17
17
  keepMounted: boolean;
18
18
  modalOverlayTestId?: string;
19
19
  noFocusToDialog?: boolean;
20
+ disableModalOverlay?: boolean;
20
21
  onOpen?: AnyFunction;
21
22
  onOpened?: AnyFunction;
22
23
  onClose?: AnyFunction;
@@ -27,6 +28,7 @@ export interface UseModalManagerResolvedProps {
27
28
  id: string;
28
29
  open: boolean;
29
30
  noFocusToDialog?: boolean;
31
+ disableModalOverlay?: boolean;
30
32
  modalOverlayTestId?: string;
31
33
  ModalOverlay: React.ComponentType<ModalOverlayProps>;
32
34
  onOpen?: AnyFunction;
@@ -45,6 +47,7 @@ export const useModalManager = ({
45
47
  keepMounted,
46
48
  modalOverlayTestId,
47
49
  noFocusToDialog,
50
+ disableModalOverlay,
48
51
  onOpen,
49
52
  onOpened,
50
53
  onClose,
@@ -78,6 +81,7 @@ export const useModalManager = ({
78
81
  shouldPreserveSnapPoint,
79
82
  noFocusToDialog: noFocusToDialog || context.noFocusToDialog,
80
83
  modalOverlayTestId: modalOverlayTestId || context.modalOverlayTestId,
84
+ disableModalOverlay: disableModalOverlay || context.disableModalOverlay,
81
85
  ModalOverlay: context.isInsideModal ? VisuallyHiddenModalOverlay : ModalOverlay,
82
86
  onOpen: onOpen || getContextCallback(id, context.onOpen),
83
87
  onOpened: onOpened || getContextCallback(id, context.onOpened),
@@ -39,6 +39,7 @@ type AllowedFloatingComponentProps = Pick<
39
39
  | 'children'
40
40
  | 'onPlacementChange'
41
41
  | 'disableFlipMiddleware'
42
+ | 'disableShiftMiddleware'
42
43
  | 'disableFocusTrap'
43
44
  >;
44
45
 
@@ -98,6 +99,7 @@ export const OnboardingTooltip = ({
98
99
  disableArrow = false,
99
100
  onPlacementChange,
100
101
  disableFlipMiddleware = false,
102
+ disableShiftMiddleware = false,
101
103
  overlayLabel = 'Закрыть',
102
104
  title,
103
105
  'aria-label': ariaLabel,
@@ -124,6 +126,7 @@ export const OnboardingTooltip = ({
124
126
  arrowHeight,
125
127
  arrowPadding,
126
128
  disableFlipMiddleware,
129
+ disableShiftMiddleware,
127
130
  });
128
131
  const {
129
132
  x: floatingDataX,
@@ -63,6 +63,7 @@ type AllowedFloatingComponentProps = Pick<
63
63
  | 'children'
64
64
  | 'zIndex'
65
65
  | 'disableFlipMiddleware'
66
+ | 'disableShiftMiddleware'
66
67
  | 'customMiddlewares'
67
68
  | 'strategy'
68
69
  | 'disableFocusTrap'
@@ -43,6 +43,7 @@ export const usePopover = <ElementType extends HTMLElement = HTMLElement>({
43
43
  placement = 'bottom-start',
44
44
  onPlacementChange,
45
45
  disableFlipMiddleware = false,
46
+ disableShiftMiddleware = false,
46
47
  trigger = 'click',
47
48
  strategy,
48
49
  content,
@@ -184,6 +185,7 @@ export const usePopover = <ElementType extends HTMLElement = HTMLElement>({
184
185
  sameWidth,
185
186
  hideWhenReferenceHidden,
186
187
  disableFlipMiddleware,
188
+ disableShiftMiddleware,
187
189
  customMiddlewares,
188
190
 
189
191
  trigger,
@@ -55,6 +55,7 @@ type AllowedFloatingComponentProps = Pick<
55
55
  | 'customMiddlewares'
56
56
  | 'onPlacementChange'
57
57
  | 'disableFlipMiddleware'
58
+ | 'disableShiftMiddleware'
58
59
  | 'flipMiddlewareFallbackAxisSideDirection'
59
60
  >;
60
61
 
@@ -107,6 +108,7 @@ export const Popper = ({
107
108
  arrowPadding = DEFAULT_ARROW_PADDING,
108
109
  customMiddlewares,
109
110
  disableFlipMiddleware = false,
111
+ disableShiftMiddleware = false,
110
112
  flipMiddlewareFallbackAxisSideDirection,
111
113
 
112
114
  // UseFloatingProps
@@ -142,6 +144,7 @@ export const Popper = ({
142
144
  hideWhenReferenceHidden,
143
145
  customMiddlewares,
144
146
  disableFlipMiddleware,
147
+ disableShiftMiddleware,
145
148
  flipMiddlewareFallbackAxisSideDirection,
146
149
  });
147
150
 
@@ -4,11 +4,8 @@ import * as React from 'react';
4
4
  import { classNames } from '@vkontakte/vkjs';
5
5
  import { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';
6
6
  import type { HasOnlyExpectedProps } from '../../types';
7
- import {
8
- CustomSelect,
9
- type CustomSelectOptionInterface,
10
- type SelectProps,
11
- } from '../CustomSelect/CustomSelect';
7
+ import { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';
8
+ import { type CustomSelectOptionInterface } from '../CustomSelect/types';
12
9
  import { NativeSelect, type NativeSelectProps } from '../NativeSelect/NativeSelect';
13
10
  export type SelectType = 'default' | 'plain' | 'accent';
14
11
 
@@ -53,6 +50,9 @@ export const Select = <OptionT extends CustomSelectOptionInterface>({
53
50
  beforeAlign,
54
51
  afterAlign,
55
52
  onInputKeyDown,
53
+ accessible,
54
+ fetchingCompletedLabel,
55
+ fetchingInProgressLabel,
56
56
  ...restProps
57
57
  } = props;
58
58