@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
@@ -4,92 +4,69 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
- import { classNames, debounce } from "@vkontakte/vkjs";
7
+ import { classNames } from "@vkontakte/vkjs";
8
+ import { getRequiredValueByKey } from "../../helpers/getValueByKey.js";
8
9
  import { useAdaptivity } from "../../hooks/useAdaptivity.js";
9
10
  import { useExternRef } from "../../hooks/useExternRef.js";
10
- import { useFocusWithin } from "../../hooks/useFocusWithin.js";
11
- import { useStateWithPrev } from "../../hooks/useStateWithPrev.js";
12
11
  import { callMultiple } from "../../lib/callMultiple.js";
13
12
  import { useDOM } from "../../lib/dom.js";
14
13
  import { defaultFilterFn } from "../../lib/select.js";
15
14
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
16
- import { warnOnce } from "../../lib/warnOnce.js";
15
+ import { preventDefault } from "../../lib/utils.js";
17
16
  import { CustomSelectDropdown } from "../CustomSelectDropdown/CustomSelectDropdown.js";
18
17
  import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption.js";
19
- import { DropdownIcon } from "../DropdownIcon/DropdownIcon.js";
20
- import { NOT_SELECTED, remapFromNativeValueToSelectValue, remapFromSelectValueToNativeValue } from "../NativeSelect/NativeSelect.js";
18
+ import { NOT_SELECTED, remapFromNativeValueToSelectValue } from "../NativeSelect/NativeSelect.js";
21
19
  import { Footnote } from "../Typography/Footnote/Footnote.js";
22
20
  import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
23
- import { CustomSelectClearButton } from "./CustomSelectClearButton.js";
24
21
  import { CustomSelectInput } from "./CustomSelectInput/CustomSelectInput.js";
22
+ import { checkMixControlledAndUncontrolledState, checkOptionsValueType, filter, findSelectedIndex, getOptionByValue } from "./helpers.js";
23
+ import { useAfterItems } from "./hooks/useAfterItems.js";
24
+ import { useDropdownOpenedController } from "./hooks/useDropdownOpenedController.js";
25
+ import { useFocusedOptionController } from "./hooks/useFocusedOptionController.js";
26
+ import { useInputKeyboardController } from "./hooks/useInputKeyboardController.js";
27
+ import { useInputValueController } from "./hooks/useInputValueController.js";
28
+ import { useScrollListController } from "./hooks/useScrollListController.js";
29
+ import { useSelectedOptionController } from "./hooks/useSelectedOptionController.js";
25
30
  const sizeYClassNames = {
26
31
  none: "vkuiCustomSelect__sizeYNone",
27
32
  compact: "vkuiCustomSelect__sizeYCompact"
28
33
  };
29
- const findIndexAfter = (options = [], startIndex = -1)=>{
30
- if (startIndex >= options.length - 1) {
31
- return -1;
32
- }
33
- return options.findIndex((option, i)=>i > startIndex && !option.disabled);
34
- };
35
- const findIndexBefore = (options = [], endIndex = options.length)=>{
36
- let result = -1;
37
- if (endIndex <= 0) {
38
- return result;
39
- }
40
- for(let i = endIndex - 1; i >= 0; i--){
41
- let option = options[i];
42
- if (!option.disabled) {
43
- result = i;
44
- break;
45
- }
46
- }
47
- return result;
48
- };
49
- const warn = warnOnce('CustomSelect');
50
- const checkOptionsValueType = (options)=>{
51
- if (new Set(options.map((item)=>typeof item.value)).size > 1) {
52
- warn('Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.', 'error');
53
- }
54
- };
55
- const checkMixControlledAndUncontrolledState = (oldIsControlled, newIsControlled)=>{
56
- if (!oldIsControlled && newIsControlled) {
57
- warn(`Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`, 'error');
58
- }
59
- if (oldIsControlled && !newIsControlled) {
60
- warn(`Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`, 'error');
61
- }
62
- };
63
34
  function defaultRenderOptionFn(_param) {
64
35
  var { option } = _param, props = _object_without_properties(_param, [
65
36
  "option"
66
37
  ]);
67
38
  return /*#__PURE__*/ _jsx(CustomSelectOption, _object_spread({}, props));
68
39
  }
69
- const handleOptionDown = (e)=>{
70
- e.preventDefault();
71
- };
72
- function findSelectedIndex(options = [], value) {
73
- if (value === NOT_SELECTED.CUSTOM) {
74
- return -1;
75
- }
76
- var _options_findIndex;
77
- return (_options_findIndex = options.findIndex((item)=>{
78
- value = typeof item.value === 'number' ? Number(value) : value;
79
- return item.value === value;
80
- })) !== null && _options_findIndex !== void 0 ? _options_findIndex : -1;
81
- }
82
- const filter = (options, inputValue, filterFn)=>{
83
- return typeof filterFn === 'function' ? options.filter((option)=>filterFn(inputValue, option)) : options;
84
- };
85
- /* eslint-enable jsdoc/require-jsdoc */ function isMousePositionChanged(event, prevPosition) {
40
+ function isMousePositionChanged(event, prevPosition) {
86
41
  return Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1;
87
42
  }
43
+ const FETCH_STATUS_RESET_DELAY = 2000;
44
+ const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = 'Список опций загружается...', fetchingCompletedLabel = `Загружено опций: ${options.length}` })=>{
45
+ const [status, setStatus] = React.useState('none');
46
+ const content = getRequiredValueByKey(status, {
47
+ fetching: fetchingInProgressLabel,
48
+ loaded: typeof fetchingCompletedLabel === 'function' ? fetchingCompletedLabel(options.length) : fetchingCompletedLabel,
49
+ none: ''
50
+ });
51
+ useIsomorphicLayoutEffect(function updateStatus() {
52
+ if (fetching) {
53
+ setStatus('fetching');
54
+ } else {
55
+ setStatus('loaded');
56
+ setTimeout(()=>setStatus('none'), FETCH_STATUS_RESET_DELAY);
57
+ }
58
+ }, [
59
+ fetching
60
+ ]);
61
+ return /*#__PURE__*/ _jsx(VisuallyHidden, {
62
+ "aria-live": "polite",
63
+ children: content
64
+ });
65
+ };
88
66
  /**
89
67
  * @see https://vkui.io/components/custom-select
90
68
  */ export function CustomSelect(props) {
91
- const [opened, setOpened] = React.useState(false);
92
- const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, 'onInputChange': onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', searchable = false, 'renderOption': renderOptionProp = defaultRenderOptionFn, 'options': optionsProp, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, 'icon': iconProp, ClearButton = CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, 'aria-labelledby': ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior, onInputKeyDown, readOnly } = props, restProps = _object_without_properties(props, [
69
+ const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, 'onInputChange': onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', searchable = false, 'renderOption': renderOptionProp = defaultRenderOptionFn, 'options': options, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, 'icon': iconProp, ClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, 'aria-labelledby': ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior, 'onInputKeyDown': onInputKeyDownProp, readOnly, accessible = false, fetchingInProgressLabel, fetchingCompletedLabel } = props, restProps = _object_without_properties(props, [
93
70
  "before",
94
71
  "name",
95
72
  "className",
@@ -124,71 +101,92 @@ const filter = (options, inputValue, filterFn)=>{
124
101
  "required",
125
102
  "getSelectInputRef",
126
103
  "overscrollBehavior",
127
- "onInputKeyDown",
128
- "readOnly"
104
+ 'onInputKeyDown',
105
+ "readOnly",
106
+ "accessible",
107
+ "fetchingInProgressLabel",
108
+ "fetchingCompletedLabel"
129
109
  ]);
130
110
  if (process.env.NODE_ENV === 'development') {
131
- checkOptionsValueType(optionsProp);
111
+ checkOptionsValueType(options);
132
112
  }
133
113
  const { sizeY = 'none' } = useAdaptivity();
134
114
  const containerRef = React.useRef(null);
135
115
  const handleRootRef = useExternRef(containerRef, getRootRef);
136
- const scrollBoxRef = React.useRef(null);
137
116
  const selectElRef = useExternRef(getRef);
138
- const optionsWrapperRef = React.useRef(null);
139
- const scrollPerformedRef = React.useRef(false);
140
- const [focusedOptionIndex, setFocusedOptionIndex] = React.useState(-1);
141
- const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);
142
- const [inputValue, setInputValue] = React.useState('');
143
- const [[nativeSelectValue, prevNativeSelectValue], setNativeSelectValue] = useStateWithPrev(()=>{
144
- if (props.value !== undefined) {
145
- return remapFromSelectValueToNativeValue(props.value);
146
- }
147
- if (defaultValue !== undefined) {
148
- return remapFromSelectValueToNativeValue(defaultValue);
117
+ const selectInputRef = useExternRef(getSelectInputRef);
118
+ const propsValue = React.useMemo(()=>{
119
+ var _getOptionByValue;
120
+ if (props.value === undefined) {
121
+ return undefined;
149
122
  }
150
- return NOT_SELECTED.NATIVE;
151
- });
152
- const [popperPlacement, setPopperPlacement] = React.useState(popupDirection);
153
- const options = React.useMemo(()=>{
154
- return filter(optionsProp, inputValue, filterFn);
123
+ var _getOptionByValue_value;
124
+ return (_getOptionByValue_value = (_getOptionByValue = getOptionByValue(options, props.value)) === null || _getOptionByValue === void 0 ? void 0 : _getOptionByValue.value) !== null && _getOptionByValue_value !== void 0 ? _getOptionByValue_value : null;
155
125
  }, [
126
+ options,
127
+ props.value
128
+ ]);
129
+ const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);
130
+ const [popperPlacement, setPopperPlacement] = React.useState(popupDirection);
131
+ const { nativeSelectValue, setNativeSelectValue, selectedOptionValue, setSelectedOptionValue, onNativeSelectChange } = useSelectedOptionController({
132
+ value: propsValue,
133
+ defaultValue,
134
+ isControlledOutside,
135
+ allowClearButton,
136
+ onChange
137
+ });
138
+ const selected = React.useMemo(()=>options.find((option)=>option.value === selectedOptionValue), [
139
+ options,
140
+ selectedOptionValue
141
+ ]);
142
+ const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } = useInputValueController({
143
+ options,
144
+ accessible,
145
+ selectedValue: selectedOptionValue,
146
+ onInputChange: onInputChangeProp
147
+ });
148
+ const filteredOptions = React.useMemo(()=>filter(options, searchable ? inputValue : '', filterFn), [
156
149
  filterFn,
157
150
  inputValue,
158
- optionsProp
151
+ options,
152
+ searchable
159
153
  ]);
160
- var _props_value, _ref;
161
- const [selectedOptionIndex, setSelectedOptionIndex] = React.useState(findSelectedIndex(options, (_ref = (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : defaultValue) !== null && _ref !== void 0 ? _ref : null));
162
- React.useEffect(function updateOptionsIndexes() {
163
- const value = props.value !== undefined ? props.value : remapFromNativeValueToSelectValue(nativeSelectValue);
164
- const selectedIndex = findSelectedIndex(options, value);
165
- setSelectedOptionIndex(selectedIndex);
166
- setFocusedOptionIndex(selectedIndex);
154
+ const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();
155
+ const { focusedOptionValue, setFocusedOptionValue, resetFocusedOption, focusOptionByIndex, focusOption, selectFocusedValue } = useFocusedOptionController({
156
+ selectedOptionValue,
157
+ filteredOptions,
158
+ scrollToElement
159
+ });
160
+ const scrollToSelectedOption = ()=>{
161
+ scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);
162
+ };
163
+ const { opened, open, close, toggleOpened } = useDropdownOpenedController({
164
+ onOpen: callMultiple(selectFocusedValue, onOpen),
165
+ onOpened: scrollToSelectedOption,
166
+ onClose,
167
+ onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue
168
+ });
169
+ React.useEffect(function updateOptionsValue() {
170
+ const value = propsValue !== undefined ? propsValue : remapFromNativeValueToSelectValue(nativeSelectValue);
171
+ setSelectedOptionValue(value);
172
+ setFocusedOptionValue(value);
167
173
  }, [
168
- props.value,
174
+ propsValue,
169
175
  nativeSelectValue,
170
- options,
171
- filterFn
176
+ setFocusedOptionValue,
177
+ setSelectedOptionValue
172
178
  ]);
173
179
  React.useEffect(function syncIsControlledState() {
174
180
  setIsControlledOutside((oldIsControlled)=>{
175
- const newIsControlled = props.value !== undefined;
181
+ const newIsControlled = propsValue !== undefined;
176
182
  checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);
177
183
  return newIsControlled;
178
184
  });
179
185
  }, [
180
- props.value
181
- ]);
182
- React.useEffect(function syncNativeSelectValueWithPropValue() {
183
- if (props.value !== undefined) {
184
- setNativeSelectValue(remapFromSelectValueToNativeValue(props.value));
185
- }
186
- }, [
187
- props.value,
188
- setNativeSelectValue
186
+ propsValue
189
187
  ]);
190
188
  useIsomorphicLayoutEffect(()=>{
191
- if (options.some(({ value })=>nativeSelectValue === value) || allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE) {
189
+ if (filteredOptions.some(({ value })=>nativeSelectValue === value) || allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE) {
192
190
  var _selectElRef_current;
193
191
  const event = new Event('change', {
194
192
  bubbles: true
@@ -198,117 +196,15 @@ const filter = (options, inputValue, filterFn)=>{
198
196
  }, [
199
197
  nativeSelectValue
200
198
  ]);
201
- const selected = React.useMemo(()=>{
202
- if (!options.length) {
203
- return null;
204
- }
205
- return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;
206
- }, [
207
- options,
208
- selectedOptionIndex
209
- ]);
210
199
  const openedClassNames = React.useMemo(()=>opened && dropdownOffsetDistance === 0 && (popperPlacement.includes('top') ? "vkuiCustomSelect__popUp" : "vkuiCustomSelect__popDown") || undefined, [
211
200
  dropdownOffsetDistance,
212
201
  opened,
213
202
  popperPlacement
214
203
  ]);
215
- const scrollToElement = React.useCallback((index, center = false)=>{
216
- const dropdown = scrollBoxRef.current;
217
- const optionsWrapper = optionsWrapperRef.current;
218
- const item = dropdown && optionsWrapper ? optionsWrapper.children[index] : null;
219
- if (!item || !dropdown) {
220
- return;
221
- }
222
- const dropdownHeight = dropdown.offsetHeight;
223
- const scrollTop = dropdown.scrollTop;
224
- const itemTop = item.offsetTop;
225
- const itemHeight = item.offsetHeight;
226
- if (center) {
227
- dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
228
- } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
229
- dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
230
- } else if (itemTop < scrollTop) {
231
- dropdown.scrollTop = itemTop;
232
- }
233
- }, []);
234
- const focusOptionByIndex = React.useCallback((index, scrollTo = true)=>{
235
- var _options_length;
236
- if (index === undefined || index < 0 || index > ((_options_length = options.length) !== null && _options_length !== void 0 ? _options_length : 0) - 1) {
237
- return;
238
- }
239
- const option = options[index];
240
- if (option === null || option === void 0 ? void 0 : option.disabled) {
241
- return;
242
- }
243
- if (scrollTo) {
244
- scrollToElement(index);
245
- }
246
- setFocusedOptionIndex(index);
247
- }, [
248
- options,
249
- scrollToElement
250
- ]);
251
- const isValidIndex = React.useCallback((index)=>{
252
- var _options_length;
253
- return index >= 0 && index < ((_options_length = options.length) !== null && _options_length !== void 0 ? _options_length : 0);
254
- }, [
255
- options.length
256
- ]);
257
- useIsomorphicLayoutEffect(()=>{
258
- if (!opened) {
259
- scrollPerformedRef.current = false;
260
- return;
261
- }
262
- if (scrollPerformedRef.current) {
263
- return;
264
- }
265
- const isIndexValid = selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex);
266
- if (scrollBoxRef.current && isIndexValid) {
267
- scrollPerformedRef.current = true;
268
- scrollToElement(selectedOptionIndex, true);
269
- }
270
- }, [
271
- opened,
272
- selectedOptionIndex,
273
- scrollToElement,
274
- isValidIndex
275
- ]);
276
- const [keyboardInput, setKeyboardInput] = React.useState('');
277
- const resetKeyboardInput = React.useCallback(()=>{
278
- setKeyboardInput('');
279
- }, []);
280
- const resetFocusedOption = React.useCallback(()=>{
281
- setFocusedOptionIndex(-1);
282
- }, []);
283
- const onKeyboardInput = React.useCallback((key)=>{
284
- if (!opened) {
285
- setOpened(true);
286
- }
287
- resetFocusedOption();
288
- const fullInput = keyboardInput + key;
289
- setKeyboardInput(fullInput);
290
- }, [
291
- keyboardInput,
292
- opened,
293
- resetFocusedOption
294
- ]);
295
- const close = React.useCallback(()=>{
296
- resetKeyboardInput();
297
- setInputValue('');
298
- setOpened(false);
299
- resetFocusedOption();
300
- onClose === null || onClose === void 0 ? void 0 : onClose();
301
- }, [
302
- onClose,
303
- resetKeyboardInput,
304
- resetFocusedOption
305
- ]);
306
- const selectOption = React.useCallback((index)=>{
307
- const item = options[index];
308
- var _item_value;
309
- setNativeSelectValue((_item_value = item === null || item === void 0 ? void 0 : item.value) !== null && _item_value !== void 0 ? _item_value : NOT_SELECTED.NATIVE);
204
+ const selectOption = React.useCallback((value)=>{
205
+ setNativeSelectValue(value !== null && value !== void 0 ? value : NOT_SELECTED.NATIVE);
310
206
  close();
311
- const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && props.value !== nativeSelectValue && nativeSelectValue === (item === null || item === void 0 ? void 0 : item.value);
207
+ const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;
312
208
  if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {
313
209
  var _selectElRef_current;
314
210
  const event = new Event('change', {
@@ -318,33 +214,31 @@ const filter = (options, inputValue, filterFn)=>{
318
214
  }
319
215
  }, [
320
216
  close,
321
- options,
322
- selectElRef,
217
+ setNativeSelectValue,
323
218
  isControlledOutside,
324
- props.value,
219
+ propsValue,
325
220
  nativeSelectValue,
326
- setNativeSelectValue
221
+ selectElRef
327
222
  ]);
328
223
  const selectFocused = React.useCallback(()=>{
329
- if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {
224
+ if (focusedOptionValue === null) {
330
225
  return;
331
226
  }
332
- selectOption(focusedOptionIndex);
227
+ selectOption(focusedOptionValue);
333
228
  }, [
334
- focusedOptionIndex,
335
- isValidIndex,
229
+ focusedOptionValue,
336
230
  selectOption
337
231
  ]);
338
- const open = React.useCallback(()=>{
339
- setOpened(true);
340
- setFocusedOptionIndex(selectedOptionIndex);
341
- if (typeof onOpen === 'function') {
342
- onOpen();
343
- }
344
- }, [
345
- onOpen,
346
- selectedOptionIndex
347
- ]);
232
+ const onInputKeyDown = useInputKeyboardController({
233
+ opened,
234
+ open,
235
+ close,
236
+ resetFocusedOption,
237
+ selectFocused,
238
+ focusOption,
239
+ scrollBoxRef,
240
+ onInputKeyDown: onInputKeyDownProp
241
+ });
348
242
  const onBlur = React.useCallback(()=>{
349
243
  var _selectElRef_current;
350
244
  close();
@@ -365,148 +259,15 @@ const filter = (options, inputValue, filterFn)=>{
365
259
  }, [
366
260
  selectElRef
367
261
  ]);
368
- const onClick = React.useCallback(()=>{
369
- if (opened) {
370
- close();
371
- } else {
372
- open();
373
- }
374
- }, [
375
- close,
376
- open,
377
- opened
378
- ]);
379
- const handleKeyUp = React.useMemo(()=>debounce(resetKeyboardInput, 1000), [
380
- resetKeyboardInput
381
- ]);
382
- const focusOption = React.useCallback((type)=>{
383
- let index = focusedOptionIndex;
384
- if (type === 'next') {
385
- const nextIndex = findIndexAfter(options, index);
386
- index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index
387
- } else if (type === 'prev') {
388
- const beforeIndex = findIndexBefore(options, index);
389
- index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index
390
- }
391
- focusOptionByIndex(index);
392
- }, [
393
- focusOptionByIndex,
394
- focusedOptionIndex,
395
- options
396
- ]);
397
- const onNativeSelectChange = (e)=>{
398
- // для ситуаций, когда в опциях value это string а value/defaultValue это number
399
- // и наоборот, приводим значение nativeSelectValue из стейта к строке.
400
- // ведь nativeSelect всегда возвращает string в onChange, а пользователь
401
- // может использовать number для опций
402
- //
403
- // native select всегда возвращает string в качестве value в onChange
404
- // Когда селект контролируемый, то пользователь, в onChange может сохранить в свой стейт строку (например '3'), хотя
405
- // в качестве value опции может использовать число (3),
406
- // тогда строчное значение value ('3') из стейта пользователя
407
- // будет передано в CustomSelect, и после синхронизации nativeSelectValue (3) и props.value ('3') и после клика на уже выбранную опцию (3),
408
- // когда nativeSelectValue обновится на значение опции (число 3),
409
- // сравнение nativeSelectValue (3) и prevNativeSelectValue ('3') может не сработать лишь из-за того, что они в разных типах.
410
- const convertedNativeSelectValue = typeof nativeSelectValue === 'number' && (typeof props.value === 'string' || typeof prevNativeSelectValue === 'string') ? String(nativeSelectValue) : nativeSelectValue;
411
- const isCalledWithSameControlledOptionValue = isControlledOutside && props.value === remapFromNativeValueToSelectValue(convertedNativeSelectValue);
412
- const isNativeValueChanged = convertedNativeSelectValue !== prevNativeSelectValue && prevNativeSelectValue !== undefined;
413
- const isTriggeredByClearButton = allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE;
414
- const shouldCallOnChange = !isCalledWithSameControlledOptionValue && (isNativeValueChanged || isTriggeredByClearButton);
415
- if (!shouldCallOnChange) {
416
- return;
417
- }
418
- const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);
419
- if (e.target.value === NOT_SELECTED.NATIVE) {
420
- e.target.value = '';
421
- }
422
- if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
423
- e.currentTarget.value = '';
424
- }
425
- onChange === null || onChange === void 0 ? void 0 : onChange(e, remappedNativeValue);
426
- };
427
- const onInputChange = React.useCallback((e)=>{
428
- onInputChangeProp && onInputChangeProp(e);
429
- setInputValue(e.target.value);
430
- }, [
431
- onInputChangeProp
432
- ]);
433
- const areOptionsShown = React.useCallback(()=>{
434
- return scrollBoxRef.current !== null;
435
- }, []);
436
- const handleKeyDownSelect = React.useCallback((event)=>{
437
- if (event.key.length === 1 && event.key !== ' ') {
438
- onKeyboardInput(event.key);
439
- return;
440
- }
441
- [
442
- 'ArrowUp',
443
- 'ArrowDown',
444
- 'Escape',
445
- 'Enter'
446
- ].includes(event.key) && areOptionsShown() && event.preventDefault();
447
- switch(event.key){
448
- case 'ArrowUp':
449
- if (opened) {
450
- areOptionsShown() && focusOption('prev');
451
- } else {
452
- open();
453
- }
454
- break;
455
- case 'ArrowDown':
456
- if (opened) {
457
- areOptionsShown() && focusOption('next');
458
- } else {
459
- open();
460
- }
461
- break;
462
- case 'Escape':
463
- close();
464
- break;
465
- case 'Backspace':
466
- case 'Delete':
467
- {
468
- if (!opened) {
469
- setOpened(true);
470
- }
471
- resetFocusedOption();
472
- break;
473
- }
474
- case 'Enter':
475
- case 'Spacebar':
476
- case ' ':
477
- if (opened) {
478
- areOptionsShown() && selectFocused();
479
- } else {
480
- open();
481
- }
482
- break;
483
- }
484
- }, [
485
- areOptionsShown,
486
- close,
487
- focusOption,
488
- onKeyboardInput,
489
- open,
490
- opened,
491
- selectFocused,
492
- resetFocusedOption
493
- ]);
494
- const handleInputKeydown = React.useCallback((event)=>{
495
- onInputKeyDown === null || onInputKeyDown === void 0 ? void 0 : onInputKeyDown(event, opened);
496
- }, [
497
- opened,
498
- onInputKeyDown
499
- ]);
500
- const _onInputKeyDown = callMultiple(handleKeyDownSelect, handleInputKeydown);
501
262
  const handleOptionClick = React.useCallback((e)=>{
502
263
  var _e_currentTarget_parentNode;
503
264
  const index = Array.prototype.indexOf.call((_e_currentTarget_parentNode = e.currentTarget.parentNode) === null || _e_currentTarget_parentNode === void 0 ? void 0 : _e_currentTarget_parentNode.children, e.currentTarget);
504
- const option = options[index];
265
+ const option = filteredOptions[index];
505
266
  if (option && !option.disabled) {
506
- selectOption(index);
267
+ selectOption(option.value);
507
268
  }
508
269
  }, [
509
- options,
270
+ filteredOptions,
510
271
  selectOption
511
272
  ]);
512
273
  const lastMousePositionRef = React.useRef({
@@ -522,8 +283,8 @@ const filter = (options, inputValue, filterFn)=>{
522
283
  ]);
523
284
  const popupAriaId = React.useId();
524
285
  const renderOption = React.useCallback((option, index)=>{
525
- const hovered = index === focusedOptionIndex;
526
- const selected = index === selectedOptionIndex;
286
+ const hovered = option.value === focusedOptionValue;
287
+ const selected = option.value === selectedOptionValue;
527
288
  return /*#__PURE__*/ _jsx(React.Fragment, {
528
289
  children: renderOptionProp(_object_spread({
529
290
  option,
@@ -532,7 +293,7 @@ const filter = (options, inputValue, filterFn)=>{
532
293
  selected,
533
294
  disabled: option.disabled,
534
295
  onClick: handleOptionClick,
535
- onMouseDown: handleOptionDown,
296
+ onMouseDown: preventDefault,
536
297
  // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.
537
298
  // Потому что если при навигации с клавиатуры курсор наведён на
538
299
  // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter
@@ -545,17 +306,17 @@ const filter = (options, inputValue, filterFn)=>{
545
306
  }, option))
546
307
  }, `${typeof option.value}-${option.value}`);
547
308
  }, [
548
- focusedOptionIndex,
549
- handleOptionClick,
550
- focusOptionOnMouseMove,
309
+ focusedOptionValue,
310
+ selectedOptionValue,
551
311
  renderOptionProp,
552
- selectedOptionIndex,
553
- popupAriaId
312
+ handleOptionClick,
313
+ popupAriaId,
314
+ focusOptionOnMouseMove
554
315
  ]);
555
316
  const resolvedContent = React.useMemo(()=>{
556
- const defaultDropdownContent = options.length > 0 ? /*#__PURE__*/ _jsx("div", {
317
+ const defaultDropdownContent = filteredOptions.length > 0 ? /*#__PURE__*/ _jsx("div", {
557
318
  ref: optionsWrapperRef,
558
- children: options.map(renderOption)
319
+ children: filteredOptions.map(renderOption)
559
320
  }) : /*#__PURE__*/ _jsx(Footnote, {
560
321
  className: "vkuiCustomSelect__empty",
561
322
  children: emptyText
@@ -569,55 +330,27 @@ const filter = (options, inputValue, filterFn)=>{
569
330
  }
570
331
  }, [
571
332
  emptyText,
572
- options,
333
+ filteredOptions,
334
+ optionsWrapperRef,
573
335
  renderDropdown,
574
336
  renderOption
575
337
  ]);
576
- const selectInputRef = useExternRef(getSelectInputRef);
577
- const controlledValueSet = isControlledOutside && props.value !== NOT_SELECTED.CUSTOM;
578
- const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;
579
- const clearButtonShown = allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);
580
- const clearButton = React.useMemo(()=>{
581
- if (!clearButtonShown) {
582
- return null;
583
- }
584
- return /*#__PURE__*/ _jsx(ClearButton, {
585
- className: iconProp === undefined ? "vkuiCustomSelect__clearIcon" : undefined,
586
- onClick: function clearSelectState() {
587
- setNativeSelectValue(NOT_SELECTED.NATIVE);
588
- setInputValue('');
589
- selectInputRef.current && selectInputRef.current.focus();
590
- },
591
- disabled: restProps.disabled,
592
- "data-testid": clearButtonTestId
593
- });
594
- }, [
595
- clearButtonShown,
338
+ const afterItems = useAfterItems({
339
+ value: propsValue,
340
+ nativeSelectValue,
341
+ isControlledOutside,
342
+ opened,
343
+ allowClearButton,
596
344
  ClearButton,
597
- iconProp,
598
- restProps.disabled,
345
+ onClearButtonClick: ()=>{
346
+ setNativeSelectValue(NOT_SELECTED.NATIVE);
347
+ resetInputValue();
348
+ selectInputRef.current && selectInputRef.current.focus();
349
+ },
599
350
  clearButtonTestId,
600
- setNativeSelectValue,
601
- selectInputRef
602
- ]);
603
- const icon = React.useMemo(()=>{
604
- if (iconProp !== undefined) {
605
- return iconProp;
606
- }
607
- return /*#__PURE__*/ _jsx(DropdownIcon, {
608
- className: clearButtonShown ? "vkuiCustomSelect__dropdownIcon" : undefined,
609
- opened: opened
610
- });
611
- }, [
612
- clearButtonShown,
613
- iconProp,
614
- opened
615
- ]);
616
- const afterIcons = !readOnly && (icon || clearButtonShown) && /*#__PURE__*/ _jsxs(React.Fragment, {
617
- children: [
618
- clearButton,
619
- icon
620
- ]
351
+ disabled: restProps.disabled,
352
+ readOnly,
353
+ icon: iconProp
621
354
  });
622
355
  const { document } = useDOM();
623
356
  const passClickAndFocusToInputOnClick = React.useCallback((e)=>{
@@ -653,19 +386,16 @@ const filter = (options, inputValue, filterFn)=>{
653
386
  e.preventDefault();
654
387
  }
655
388
  };
656
- const ariaActiveDescendantOptionIndex = focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;
657
- const ariaActiveDescendantId = ariaActiveDescendantOptionIndex !== undefined ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value : null;
389
+ const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;
658
390
  const selectInputAriaProps = {
659
391
  'role': 'combobox',
660
392
  'aria-controls': popupAriaId,
661
- 'aria-owns': popupAriaId,
662
393
  'aria-expanded': opened,
663
394
  'aria-activedescendant': ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,
664
395
  'aria-labelledby': ariaLabelledBy,
665
396
  'aria-haspopup': 'listbox',
666
397
  'aria-autocomplete': 'none'
667
398
  };
668
- const focusWithin = useFocusWithin(handleRootRef);
669
399
  const resetOptionFocusOnMouseLeave = React.useCallback((event)=>{
670
400
  // В Хроме eсли мышка пользователя находится над инпутом селекта,
671
401
  // и он с клавиатуры открывает опции, причём одна из опций
@@ -693,10 +423,6 @@ const filter = (options, inputValue, filterFn)=>{
693
423
  };
694
424
  },
695
425
  children: [
696
- focusWithin && selected && !opened && /*#__PURE__*/ _jsx(VisuallyHidden, {
697
- "aria-live": "polite",
698
- children: selected.label
699
- }),
700
426
  /*#__PURE__*/ _jsx(CustomSelectInput, _object_spread_props(_object_spread({
701
427
  autoComplete: "off",
702
428
  autoCapitalize: "none",
@@ -709,16 +435,23 @@ const filter = (options, inputValue, filterFn)=>{
709
435
  className: openedClassNames,
710
436
  readOnly: readOnly || !searchable,
711
437
  fetching: fetching,
438
+ searchable: searchable,
439
+ accessible: accessible,
712
440
  value: inputValue,
713
- onKeyUp: handleKeyUp,
714
- onKeyDown: !readOnly ? _onInputKeyDown : undefined,
441
+ onKeyDown: !readOnly ? onInputKeyDown : undefined,
715
442
  onChange: onInputChange,
716
- onClick: !readOnly ? onClick : undefined,
443
+ onClick: !readOnly ? toggleOpened : undefined,
717
444
  before: before,
718
- after: afterIcons,
445
+ after: afterItems,
719
446
  selectType: selectType,
720
447
  children: selected === null || selected === void 0 ? void 0 : selected.label
721
448
  })),
449
+ /*#__PURE__*/ _jsx(FetchingStatus, {
450
+ fetching: fetching,
451
+ options: filteredOptions,
452
+ fetchingInProgressLabel: fetchingInProgressLabel,
453
+ fetchingCompletedLabel: fetchingCompletedLabel
454
+ }),
722
455
  /*#__PURE__*/ _jsxs("select", {
723
456
  tabIndex: -1,
724
457
  ref: selectElRef,
@@ -736,7 +469,7 @@ const filter = (options, inputValue, filterFn)=>{
736
469
  (allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && /*#__PURE__*/ _jsx("option", {
737
470
  value: NOT_SELECTED.NATIVE
738
471
  }, NOT_SELECTED.NATIVE),
739
- optionsProp.map((item)=>/*#__PURE__*/ _jsx("option", {
472
+ options.map((item)=>/*#__PURE__*/ _jsx("option", {
740
473
  value: item.value
741
474
  }, `${item.value}`))
742
475
  ]