@vkontakte/vkui 6.5.0 → 6.5.2

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 (334) hide show
  1. package/dist/cjs/components/Button/Button.js +1 -1
  2. package/dist/cjs/components/Button/Button.js.map +1 -1
  3. package/dist/cjs/components/Cell/Cell.d.ts.map +1 -1
  4. package/dist/cjs/components/Cell/Cell.js +10 -14
  5. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  6. package/dist/cjs/components/ChipsInputBase/Chip/Chip.js +2 -2
  7. package/dist/cjs/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  8. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +9 -9
  9. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  10. package/dist/cjs/components/Clickable/Clickable.d.ts.map +1 -1
  11. package/dist/cjs/components/Clickable/Clickable.js +1 -1
  12. package/dist/cjs/components/Clickable/Clickable.js.map +1 -1
  13. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +3 -13
  14. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  15. package/dist/cjs/components/CustomSelect/CustomSelect.js +45 -70
  16. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  17. package/dist/cjs/components/CustomSelect/CustomSelectInput.d.ts +4 -2
  18. package/dist/cjs/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  19. package/dist/cjs/components/CustomSelect/CustomSelectInput.js +19 -24
  20. package/dist/cjs/components/CustomSelect/CustomSelectInput.js.map +1 -1
  21. package/dist/cjs/components/CustomSelect/helpers.d.ts +8 -0
  22. package/dist/cjs/components/CustomSelect/helpers.d.ts.map +1 -0
  23. package/dist/cjs/components/CustomSelect/helpers.js +76 -0
  24. package/dist/cjs/components/CustomSelect/helpers.js.map +1 -0
  25. package/dist/cjs/components/CustomSelect/types.d.ts +12 -0
  26. package/dist/cjs/components/CustomSelect/types.d.ts.map +1 -0
  27. package/dist/cjs/components/CustomSelect/types.js +6 -0
  28. package/dist/cjs/components/CustomSelect/types.js.map +1 -0
  29. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  30. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  31. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -14
  32. package/dist/cjs/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  33. package/dist/cjs/components/DateInput/DateInput.d.ts +1 -1
  34. package/dist/cjs/components/DateInput/DateInput.d.ts.map +1 -1
  35. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  36. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +1 -1
  37. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  38. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  39. package/dist/cjs/components/Flex/FlexItem/FlexItem.d.ts +6 -4
  40. package/dist/cjs/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  41. package/dist/cjs/components/Flex/FlexItem/FlexItem.js.map +1 -1
  42. package/dist/cjs/components/Footer/Footer.d.ts +1 -1
  43. package/dist/cjs/components/Footer/Footer.d.ts.map +1 -1
  44. package/dist/cjs/components/Footer/Footer.js +7 -3
  45. package/dist/cjs/components/Footer/Footer.js.map +1 -1
  46. package/dist/cjs/components/FormItem/FormItem.js +2 -2
  47. package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
  48. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  49. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +3 -3
  50. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  51. package/dist/cjs/components/Group/Group.d.ts.map +1 -1
  52. package/dist/cjs/components/Group/Group.js +3 -2
  53. package/dist/cjs/components/Group/Group.js.map +1 -1
  54. package/dist/cjs/components/Link/Link.d.ts +1 -1
  55. package/dist/cjs/components/Link/Link.d.ts.map +1 -1
  56. package/dist/cjs/components/Link/Link.js +3 -5
  57. package/dist/cjs/components/Link/Link.js.map +1 -1
  58. package/dist/cjs/components/Removable/Removable.d.ts +5 -1
  59. package/dist/cjs/components/Removable/Removable.d.ts.map +1 -1
  60. package/dist/cjs/components/Removable/Removable.js +8 -5
  61. package/dist/cjs/components/Removable/Removable.js.map +1 -1
  62. package/dist/cjs/components/RootComponent/RootComponent.d.ts +1 -1
  63. package/dist/cjs/components/RootComponent/RootComponent.d.ts.map +1 -1
  64. package/dist/cjs/components/RootComponent/RootComponent.js +1 -1
  65. package/dist/cjs/components/RootComponent/RootComponent.js.map +1 -1
  66. package/dist/cjs/components/Search/Search.d.ts.map +1 -1
  67. package/dist/cjs/components/Search/Search.js +3 -2
  68. package/dist/cjs/components/Search/Search.js.map +1 -1
  69. package/dist/cjs/components/Select/Select.d.ts.map +1 -1
  70. package/dist/cjs/components/Select/Select.js +1 -2
  71. package/dist/cjs/components/Select/Select.js.map +1 -1
  72. package/dist/cjs/components/SelectTypography/SelectTypography.d.ts +2 -2
  73. package/dist/cjs/components/SelectTypography/SelectTypography.d.ts.map +1 -1
  74. package/dist/cjs/components/SelectTypography/SelectTypography.js.map +1 -1
  75. package/dist/cjs/components/SimpleCell/SimpleCell.d.ts +1 -1
  76. package/dist/cjs/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  77. package/dist/cjs/components/SimpleCell/SimpleCell.js +1 -1
  78. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  79. package/dist/cjs/components/Snackbar/Snackbar.js +2 -2
  80. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  81. package/dist/cjs/components/ToolButton/ToolButton.d.ts +1 -1
  82. package/dist/cjs/components/ToolButton/ToolButton.d.ts.map +1 -1
  83. package/dist/cjs/components/ToolButton/ToolButton.js +1 -3
  84. package/dist/cjs/components/ToolButton/ToolButton.js.map +1 -1
  85. package/dist/cjs/components/View/View.d.ts.map +1 -1
  86. package/dist/cjs/components/View/View.js +16 -32
  87. package/dist/cjs/components/View/View.js.map +1 -1
  88. package/dist/cjs/hooks/useEnsuredControl.d.ts.map +1 -1
  89. package/dist/cjs/hooks/useEnsuredControl.js +27 -3
  90. package/dist/cjs/hooks/useEnsuredControl.js.map +1 -1
  91. package/dist/cjs/hooks/useIsClient.d.ts +1 -1
  92. package/dist/cjs/hooks/useIsClient.js.map +1 -1
  93. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  94. package/dist/components/Button/Button.js +2 -2
  95. package/dist/components/Button/Button.js.map +1 -1
  96. package/dist/components/Cell/Cell.d.ts.map +1 -1
  97. package/dist/components/Cell/Cell.js +11 -15
  98. package/dist/components/Cell/Cell.js.map +1 -1
  99. package/dist/components/ChipsInputBase/Chip/Chip.js +3 -3
  100. package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  101. package/dist/components/ChipsSelect/ChipsSelect.js +9 -9
  102. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  103. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  104. package/dist/components/Clickable/Clickable.js +1 -1
  105. package/dist/components/Clickable/Clickable.js.map +1 -1
  106. package/dist/components/CustomSelect/CustomSelect.d.ts +3 -13
  107. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  108. package/dist/components/CustomSelect/CustomSelect.js +37 -62
  109. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  110. package/dist/components/CustomSelect/CustomSelectInput.d.ts +4 -2
  111. package/dist/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  112. package/dist/components/CustomSelect/CustomSelectInput.js +19 -24
  113. package/dist/components/CustomSelect/CustomSelectInput.js.map +1 -1
  114. package/dist/components/CustomSelect/helpers.d.ts +8 -0
  115. package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
  116. package/dist/components/CustomSelect/helpers.js +48 -0
  117. package/dist/components/CustomSelect/helpers.js.map +1 -0
  118. package/dist/components/CustomSelect/types.d.ts +12 -0
  119. package/dist/components/CustomSelect/types.d.ts.map +1 -0
  120. package/dist/components/CustomSelect/types.js +3 -0
  121. package/dist/components/CustomSelect/types.js.map +1 -0
  122. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  123. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  124. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -14
  125. package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  126. package/dist/components/DateInput/DateInput.d.ts +1 -1
  127. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  128. package/dist/components/DateInput/DateInput.js.map +1 -1
  129. package/dist/components/DateRangeInput/DateRangeInput.d.ts +1 -1
  130. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  131. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  132. package/dist/components/Flex/FlexItem/FlexItem.d.ts +6 -4
  133. package/dist/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  134. package/dist/components/Flex/FlexItem/FlexItem.js.map +1 -1
  135. package/dist/components/Footer/Footer.d.ts +1 -1
  136. package/dist/components/Footer/Footer.d.ts.map +1 -1
  137. package/dist/components/Footer/Footer.js +7 -3
  138. package/dist/components/Footer/Footer.js.map +1 -1
  139. package/dist/components/FormItem/FormItem.js +3 -3
  140. package/dist/components/FormItem/FormItem.js.map +1 -1
  141. package/dist/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  142. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +4 -4
  143. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  144. package/dist/components/Group/Group.d.ts.map +1 -1
  145. package/dist/components/Group/Group.js +3 -2
  146. package/dist/components/Group/Group.js.map +1 -1
  147. package/dist/components/Link/Link.d.ts +1 -1
  148. package/dist/components/Link/Link.d.ts.map +1 -1
  149. package/dist/components/Link/Link.js +4 -6
  150. package/dist/components/Link/Link.js.map +1 -1
  151. package/dist/components/Removable/Removable.d.ts +5 -1
  152. package/dist/components/Removable/Removable.d.ts.map +1 -1
  153. package/dist/components/Removable/Removable.js +9 -6
  154. package/dist/components/Removable/Removable.js.map +1 -1
  155. package/dist/components/RootComponent/RootComponent.d.ts +1 -1
  156. package/dist/components/RootComponent/RootComponent.d.ts.map +1 -1
  157. package/dist/components/RootComponent/RootComponent.js +1 -1
  158. package/dist/components/RootComponent/RootComponent.js.map +1 -1
  159. package/dist/components/Search/Search.d.ts.map +1 -1
  160. package/dist/components/Search/Search.js +3 -2
  161. package/dist/components/Search/Search.js.map +1 -1
  162. package/dist/components/Select/Select.d.ts.map +1 -1
  163. package/dist/components/Select/Select.js +1 -2
  164. package/dist/components/Select/Select.js.map +1 -1
  165. package/dist/components/SelectTypography/SelectTypography.d.ts +2 -2
  166. package/dist/components/SelectTypography/SelectTypography.d.ts.map +1 -1
  167. package/dist/components/SelectTypography/SelectTypography.js.map +1 -1
  168. package/dist/components/SimpleCell/SimpleCell.d.ts +1 -1
  169. package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  170. package/dist/components/SimpleCell/SimpleCell.js +1 -1
  171. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  172. package/dist/components/Snackbar/Snackbar.js +3 -3
  173. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  174. package/dist/components/ToolButton/ToolButton.d.ts +1 -1
  175. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  176. package/dist/components/ToolButton/ToolButton.js +2 -4
  177. package/dist/components/ToolButton/ToolButton.js.map +1 -1
  178. package/dist/components/View/View.d.ts.map +1 -1
  179. package/dist/components/View/View.js +17 -33
  180. package/dist/components/View/View.js.map +1 -1
  181. package/dist/components.css +3 -3
  182. package/dist/components.css.map +1 -1
  183. package/dist/components.js.tmp +260 -263
  184. package/dist/cssm/components/Button/Button.js +2 -2
  185. package/dist/cssm/components/Button/Button.js.map +1 -1
  186. package/dist/cssm/components/Cell/Cell.d.ts.map +1 -1
  187. package/dist/cssm/components/Cell/Cell.js +11 -14
  188. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  189. package/dist/cssm/components/Cell/Cell.module.css +0 -4
  190. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +3 -3
  191. package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
  192. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +9 -9
  193. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  194. package/dist/cssm/components/Clickable/Clickable.d.ts.map +1 -1
  195. package/dist/cssm/components/Clickable/Clickable.js +1 -1
  196. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  197. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +3 -13
  198. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  199. package/dist/cssm/components/CustomSelect/CustomSelect.js +36 -59
  200. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  201. package/dist/cssm/components/CustomSelect/CustomSelectInput.d.ts +4 -2
  202. package/dist/cssm/components/CustomSelect/CustomSelectInput.d.ts.map +1 -1
  203. package/dist/cssm/components/CustomSelect/CustomSelectInput.js +16 -21
  204. package/dist/cssm/components/CustomSelect/CustomSelectInput.js.map +1 -1
  205. package/dist/cssm/components/CustomSelect/CustomSelectInput.module.css +74 -40
  206. package/dist/cssm/components/CustomSelect/helpers.d.ts +8 -0
  207. package/dist/cssm/components/CustomSelect/helpers.d.ts.map +1 -0
  208. package/dist/cssm/components/CustomSelect/helpers.js +44 -0
  209. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
  210. package/dist/cssm/components/CustomSelect/types.d.ts +12 -0
  211. package/dist/cssm/components/CustomSelect/types.d.ts.map +1 -0
  212. package/dist/cssm/components/CustomSelect/types.js +3 -0
  213. package/dist/cssm/components/CustomSelect/types.js.map +1 -0
  214. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts +1 -1
  215. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
  216. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +2 -13
  217. package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
  218. package/dist/cssm/components/DateInput/DateInput.d.ts +1 -1
  219. package/dist/cssm/components/DateInput/DateInput.d.ts.map +1 -1
  220. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  221. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +1 -1
  222. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  223. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  224. package/dist/cssm/components/Flex/FlexItem/FlexItem.d.ts +6 -4
  225. package/dist/cssm/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  226. package/dist/cssm/components/Flex/FlexItem/FlexItem.js.map +1 -1
  227. package/dist/cssm/components/Footer/Footer.d.ts +1 -1
  228. package/dist/cssm/components/Footer/Footer.d.ts.map +1 -1
  229. package/dist/cssm/components/Footer/Footer.js +4 -2
  230. package/dist/cssm/components/Footer/Footer.js.map +1 -1
  231. package/dist/cssm/components/FormField/FormField.module.css +36 -23
  232. package/dist/cssm/components/FormItem/FormItem.js +3 -3
  233. package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
  234. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.d.ts.map +1 -1
  235. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +4 -4
  236. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  237. package/dist/cssm/components/Group/Group.d.ts.map +1 -1
  238. package/dist/cssm/components/Group/Group.js +3 -2
  239. package/dist/cssm/components/Group/Group.js.map +1 -1
  240. package/dist/cssm/components/ImageBase/ImageBase.module.css +0 -4
  241. package/dist/cssm/components/Link/Link.d.ts +1 -1
  242. package/dist/cssm/components/Link/Link.d.ts.map +1 -1
  243. package/dist/cssm/components/Link/Link.js +2 -3
  244. package/dist/cssm/components/Link/Link.js.map +1 -1
  245. package/dist/cssm/components/Removable/Removable.d.ts +5 -1
  246. package/dist/cssm/components/Removable/Removable.d.ts.map +1 -1
  247. package/dist/cssm/components/Removable/Removable.js +7 -5
  248. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  249. package/dist/cssm/components/Removable/Removable.module.css +4 -0
  250. package/dist/cssm/components/RootComponent/RootComponent.d.ts +1 -1
  251. package/dist/cssm/components/RootComponent/RootComponent.d.ts.map +1 -1
  252. package/dist/cssm/components/RootComponent/RootComponent.js +2 -1
  253. package/dist/cssm/components/RootComponent/RootComponent.js.map +1 -1
  254. package/dist/cssm/components/RootComponent/RootComponent.module.css +10 -0
  255. package/dist/cssm/components/Search/Search.d.ts.map +1 -1
  256. package/dist/cssm/components/Search/Search.js +3 -2
  257. package/dist/cssm/components/Search/Search.js.map +1 -1
  258. package/dist/cssm/components/Select/Select.d.ts.map +1 -1
  259. package/dist/cssm/components/Select/Select.js +1 -1
  260. package/dist/cssm/components/Select/Select.js.map +1 -1
  261. package/dist/cssm/components/SelectTypography/SelectTypography.d.ts +2 -2
  262. package/dist/cssm/components/SelectTypography/SelectTypography.d.ts.map +1 -1
  263. package/dist/cssm/components/SelectTypography/SelectTypography.js.map +1 -1
  264. package/dist/cssm/components/SimpleCell/SimpleCell.d.ts +1 -1
  265. package/dist/cssm/components/SimpleCell/SimpleCell.d.ts.map +1 -1
  266. package/dist/cssm/components/SimpleCell/SimpleCell.js +1 -1
  267. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  268. package/dist/cssm/components/SimpleCell/SimpleCell.module.css +4 -0
  269. package/dist/cssm/components/Snackbar/Snackbar.js +3 -3
  270. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  271. package/dist/cssm/components/ToolButton/ToolButton.d.ts +1 -1
  272. package/dist/cssm/components/ToolButton/ToolButton.d.ts.map +1 -1
  273. package/dist/cssm/components/ToolButton/ToolButton.js +2 -3
  274. package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
  275. package/dist/cssm/components/View/View.d.ts.map +1 -1
  276. package/dist/cssm/components/View/View.js +17 -33
  277. package/dist/cssm/components/View/View.js.map +1 -1
  278. package/dist/cssm/hooks/useEnsuredControl.d.ts.map +1 -1
  279. package/dist/cssm/hooks/useEnsuredControl.js +27 -3
  280. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  281. package/dist/cssm/hooks/useIsClient.d.ts +1 -1
  282. package/dist/cssm/hooks/useIsClient.js +1 -1
  283. package/dist/cssm/hooks/useIsClient.js.map +1 -1
  284. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  285. package/dist/cssm/styles/constants.css +2 -3
  286. package/dist/hooks/useEnsuredControl.d.ts.map +1 -1
  287. package/dist/hooks/useEnsuredControl.js +27 -3
  288. package/dist/hooks/useEnsuredControl.js.map +1 -1
  289. package/dist/hooks/useIsClient.d.ts +1 -1
  290. package/dist/hooks/useIsClient.js +1 -1
  291. package/dist/hooks/useIsClient.js.map +1 -1
  292. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  293. package/dist/vkui.css +3 -3
  294. package/dist/vkui.css.map +1 -1
  295. package/dist/vkui.js.tmp +260 -263
  296. package/package.json +1 -1
  297. package/src/components/Button/Button.tsx +2 -2
  298. package/src/components/Cell/Cell.module.css +0 -4
  299. package/src/components/Cell/Cell.tsx +9 -16
  300. package/src/components/ChipsInputBase/Chip/Chip.tsx +3 -3
  301. package/src/components/ChipsSelect/ChipsSelect.tsx +12 -12
  302. package/src/components/Clickable/Clickable.tsx +4 -1
  303. package/src/components/CustomSelect/CustomSelect.tsx +52 -104
  304. package/src/components/CustomSelect/CustomSelectInput.module.css +55 -35
  305. package/src/components/CustomSelect/CustomSelectInput.tsx +25 -36
  306. package/src/components/CustomSelect/helpers.tsx +61 -0
  307. package/src/components/CustomSelect/types.ts +15 -0
  308. package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +3 -17
  309. package/src/components/DateInput/DateInput.tsx +1 -1
  310. package/src/components/DateRangeInput/DateRangeInput.tsx +1 -1
  311. package/src/components/Flex/FlexItem/FlexItem.tsx +6 -4
  312. package/src/components/Footer/Footer.tsx +14 -2
  313. package/src/components/FormField/FormField.module.css +32 -21
  314. package/src/components/FormItem/FormItem.tsx +3 -3
  315. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +4 -8
  316. package/src/components/Group/Group.tsx +3 -2
  317. package/src/components/ImageBase/ImageBase.module.css +0 -4
  318. package/src/components/Link/Link.tsx +1 -3
  319. package/src/components/Removable/Removable.module.css +4 -0
  320. package/src/components/Removable/Removable.tsx +12 -4
  321. package/src/components/RootComponent/RootComponent.module.css +10 -0
  322. package/src/components/RootComponent/RootComponent.tsx +12 -2
  323. package/src/components/Search/Search.tsx +3 -2
  324. package/src/components/Select/Select.tsx +0 -1
  325. package/src/components/SelectTypography/SelectTypography.tsx +2 -5
  326. package/src/components/SimpleCell/SimpleCell.module.css +4 -0
  327. package/src/components/SimpleCell/SimpleCell.tsx +2 -1
  328. package/src/components/Snackbar/Snackbar.tsx +3 -3
  329. package/src/components/ToolButton/ToolButton.tsx +1 -3
  330. package/src/components/View/View.tsx +21 -36
  331. package/src/hooks/useEnsuredControl.ts +38 -4
  332. package/src/hooks/useIsClient.ts +1 -1
  333. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
  334. package/src/styles/constants.css +2 -3
@@ -6,67 +6,29 @@ import * as React from 'react';
6
6
  import { classNames, debounce } from '@vkontakte/vkjs';
7
7
  import { useAdaptivity } from '../../hooks/useAdaptivity';
8
8
  import { useExternRef } from '../../hooks/useExternRef';
9
- import { useFocusWithin } from '../../hooks/useFocusWithin';
10
9
  import { useDOM } from '../../lib/dom';
11
10
  import { defaultFilterFn } from '../../lib/select';
12
11
  import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
13
12
  import { warnOnce } from '../../lib/warnOnce';
14
13
  import { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';
15
- import { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';
16
14
  import { DropdownIcon } from '../DropdownIcon/DropdownIcon';
17
15
  import { Footnote } from '../Typography/Footnote/Footnote';
18
- import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
19
16
  import { CustomSelectClearButton } from './CustomSelectClearButton';
20
17
  import { CustomSelectInput } from './CustomSelectInput';
18
+ import { calculateInputValueFromOptions, defaultRenderOptionFn, findIndexAfter, findIndexBefore, findSelectedIndex } from './helpers';
21
19
  const sizeYClassNames = {
22
20
  none: "vkuiCustomSelect--sizeY-none",
23
21
  ['compact']: "vkuiCustomSelect--sizeY-compact"
24
22
  };
25
- const findIndexAfter = (options = [], startIndex = -1)=>{
26
- if (startIndex >= options.length - 1) {
27
- return -1;
28
- }
29
- return options.findIndex((option, i)=>i > startIndex && !option.disabled);
30
- };
31
- const findIndexBefore = (options = [], endIndex = options.length)=>{
32
- let result = -1;
33
- if (endIndex <= 0) {
34
- return result;
35
- }
36
- for(let i = endIndex - 1; i >= 0; i--){
37
- let option = options[i];
38
- if (!option.disabled) {
39
- result = i;
40
- break;
41
- }
42
- }
43
- return result;
44
- };
45
23
  const warn = warnOnce('CustomSelect');
46
24
  const checkOptionsValueType = (options)=>{
47
25
  if (new Set(options.map((item)=>typeof item.value)).size > 1) {
48
26
  warn('Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.', 'error');
49
27
  }
50
28
  };
51
- function defaultRenderOptionFn(_param) {
52
- var { option } = _param, props = _object_without_properties(_param, [
53
- "option"
54
- ]);
55
- return /*#__PURE__*/ _jsx(CustomSelectOption, _object_spread({}, props));
56
- }
57
29
  const handleOptionDown = (e)=>{
58
30
  e.preventDefault();
59
31
  };
60
- function findSelectedIndex(options = [], value, withClear) {
61
- if (withClear && value === '') {
62
- return -1;
63
- }
64
- var _options_findIndex;
65
- return (_options_findIndex = options.findIndex((item)=>{
66
- value = typeof item.value === 'number' ? Number(value) : value;
67
- return item.value === value;
68
- })) !== null && _options_findIndex !== void 0 ? _options_findIndex : -1;
69
- }
70
32
  const filter = (options, inputValue, filterFn)=>{
71
33
  return typeof filterFn === 'function' ? options.filter((option)=>filterFn(inputValue, option)) : options;
72
34
  };
@@ -123,11 +85,11 @@ const filter = (options, inputValue, filterFn)=>{
123
85
  const optionsWrapperRef = React.useRef(null);
124
86
  const [focusedOptionIndex, setFocusedOptionIndex] = React.useState(-1);
125
87
  const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);
126
- const [inputValue, setInputValue] = React.useState('');
127
88
  const [nativeSelectValue, setNativeSelectValue] = React.useState(()=>{
128
89
  var _props_value, _ref;
129
90
  return (_ref = (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : defaultValue) !== null && _ref !== void 0 ? _ref : allowClearButton ? '' : undefined;
130
91
  });
92
+ const [inputValue, setInputValue] = React.useState(()=>calculateInputValueFromOptions(optionsProp, nativeSelectValue));
131
93
  const [popperPlacement, setPopperPlacement] = React.useState(popupDirection);
132
94
  const [options, setOptions] = React.useState(optionsProp);
133
95
  var _props_value;
@@ -161,7 +123,7 @@ const filter = (options, inputValue, filterFn)=>{
161
123
  options,
162
124
  selectedOptionIndex
163
125
  ]);
164
- const openedClassNames = React.useMemo(()=>opened && dropdownOffsetDistance === 0 && ((popperPlacement === null || popperPlacement === void 0 ? void 0 : popperPlacement.includes('top')) ? "vkuiCustomSelect--pop-up" : "vkuiCustomSelect--pop-down") || undefined, [
126
+ const openedClassNames = React.useMemo(()=>opened && dropdownOffsetDistance === 0 && (popperPlacement.includes('top') ? "vkuiCustomSelect--pop-up" : "vkuiCustomSelect--pop-down") || undefined, [
165
127
  dropdownOffsetDistance,
166
128
  opened,
167
129
  popperPlacement
@@ -245,7 +207,6 @@ const filter = (options, inputValue, filterFn)=>{
245
207
  * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.
246
208
  */ const close = React.useCallback(()=>{
247
209
  resetKeyboardInput();
248
- setInputValue('');
249
210
  setOpened(false);
250
211
  resetFocusedOption();
251
212
  onClose === null || onClose === void 0 ? void 0 : onClose();
@@ -256,8 +217,8 @@ const filter = (options, inputValue, filterFn)=>{
256
217
  ]);
257
218
  const selectOption = React.useCallback((index)=>{
258
219
  const item = options[index];
259
- setNativeSelectValue(item === null || item === void 0 ? void 0 : item.value);
260
220
  close();
221
+ setNativeSelectValue(item === null || item === void 0 ? void 0 : item.value);
261
222
  const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && props.value !== nativeSelectValue && nativeSelectValue === (item === null || item === void 0 ? void 0 : item.value);
262
223
  if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {
263
224
  var _selectElRef_current;
@@ -301,9 +262,12 @@ const filter = (options, inputValue, filterFn)=>{
301
262
  bubbles: true
302
263
  });
303
264
  (_selectElRef_current = selectElRef.current) === null || _selectElRef_current === void 0 ? void 0 : _selectElRef_current.dispatchEvent(event);
265
+ setInputValue(calculateInputValueFromOptions(optionsProp, nativeSelectValue));
304
266
  }, [
305
267
  close,
306
- selectElRef
268
+ selectElRef,
269
+ optionsProp,
270
+ nativeSelectValue
307
271
  ]);
308
272
  const onFocus = React.useCallback(()=>{
309
273
  var _selectElRef_current;
@@ -343,21 +307,38 @@ const filter = (options, inputValue, filterFn)=>{
343
307
  focusedOptionIndex,
344
308
  options
345
309
  ]);
346
- React.useEffect(function updateOptionsAndSelectedOptionIndex() {
347
- var _props_value, _ref;
348
- const value = (_ref = (_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : nativeSelectValue) !== null && _ref !== void 0 ? _ref : defaultValue;
310
+ React.useEffect(function filterOptions() {
349
311
  const options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
350
312
  setOptions(options);
351
- setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));
352
313
  }, [
353
314
  filterFn,
354
315
  inputValue,
355
- nativeSelectValue,
356
316
  optionsProp,
357
- defaultValue,
358
- props.value,
359
- searchable,
360
- allowClearButton
317
+ searchable
318
+ ]);
319
+ var _props_value1, _ref;
320
+ const selectValue = (_ref = (_props_value1 = props.value) !== null && _props_value1 !== void 0 ? _props_value1 : nativeSelectValue) !== null && _ref !== void 0 ? _ref : defaultValue;
321
+ React.useEffect(function updateSelectedOptionIndexOnValueChange() {
322
+ setSelectedOptionIndex(findSelectedIndex(options, selectValue, allowClearButton));
323
+ }, [
324
+ selectValue,
325
+ allowClearButton,
326
+ options
327
+ ]);
328
+ const prevSelectValueRef = React.useRef(selectValue);
329
+ React.useEffect(function updateInputValueOnSelectValueChange() {
330
+ if (prevSelectValueRef.current === selectValue) {
331
+ return;
332
+ }
333
+ setInputValue(calculateInputValueFromOptions(optionsProp, selectValue));
334
+ }, [
335
+ selectValue,
336
+ optionsProp
337
+ ]);
338
+ React.useEffect(function updatePrevSelectValue() {
339
+ prevSelectValueRef.current = selectValue;
340
+ }, [
341
+ selectValue
361
342
  ]);
362
343
  const onNativeSelectChange = (e)=>{
363
344
  const newSelectedOptionIndex = findSelectedIndex(options, e.currentTarget.value, allowClearButton);
@@ -621,14 +602,12 @@ const filter = (options, inputValue, filterFn)=>{
621
602
  const selectInputAriaProps = {
622
603
  'role': 'combobox',
623
604
  'aria-controls': popupAriaId,
624
- 'aria-owns': popupAriaId,
625
605
  'aria-expanded': opened,
626
606
  ['aria-activedescendant']: ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,
627
607
  'aria-labelledby': ariaLabelledBy,
628
608
  'aria-haspopup': 'listbox',
629
609
  'aria-autocomplete': 'none'
630
610
  };
631
- const focusWithin = useFocusWithin(handleRootRef);
632
611
  return /*#__PURE__*/ _jsxs("div", {
633
612
  className: classNames("vkuiCustomSelect", sizeY !== 'regular' && sizeYClassNames[sizeY], className),
634
613
  style: style,
@@ -636,10 +615,6 @@ const filter = (options, inputValue, filterFn)=>{
636
615
  onClick: passClickAndFocusToInputOnClick,
637
616
  onMouseDown: preventInputBlurWhenClickInsideFocusedSelectArea,
638
617
  children: [
639
- focusWithin && selected && !opened && /*#__PURE__*/ _jsx(VisuallyHidden, {
640
- "aria-live": "polite",
641
- children: selected.label
642
- }),
643
618
  /*#__PURE__*/ _jsx(CustomSelectInput, _object_spread_props(_object_spread({
644
619
  autoComplete: "off",
645
620
  autoCapitalize: "none",
@@ -650,7 +625,7 @@ const filter = (options, inputValue, filterFn)=>{
650
625
  onFocus: onFocus,
651
626
  onBlur: onBlur,
652
627
  className: openedClassNames,
653
- readOnly: !searchable,
628
+ searchable: searchable,
654
629
  fetching: fetching,
655
630
  value: inputValue,
656
631
  onKeyUp: handleKeyUp,
@@ -660,7 +635,7 @@ const filter = (options, inputValue, filterFn)=>{
660
635
  before: before,
661
636
  after: afterIcons,
662
637
  selectType: selectType,
663
- children: selected === null || selected === void 0 ? void 0 : selected.label
638
+ selectedOptionLabel: selected === null || selected === void 0 ? void 0 : selected.label
664
639
  })),
665
640
  /*#__PURE__*/ _jsxs("select", {
666
641
  ref: selectElRef,
@@ -685,7 +660,7 @@ const filter = (options, inputValue, filterFn)=>{
685
660
  }),
686
661
  opened && /*#__PURE__*/ _jsx(CustomSelectDropdown, {
687
662
  targetRef: containerRef,
688
- placement: popupDirection,
663
+ placement: popperPlacement,
689
664
  scrollBoxRef: setScrollBoxRef,
690
665
  onPlacementChange: setPopperPlacement,
691
666
  onMouseLeave: resetFocusedOption,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport {\n calculateInputValueFromOptions,\n defaultRenderOptionFn,\n findIndexAfter,\n findIndexBefore,\n findSelectedIndex,\n} from './helpers';\nimport type { CustomSelectOptionInterface, CustomSelectRenderOption } from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport type { CustomSelectClearButtonProps, CustomSelectOptionInterface, CustomSelectRenderOption };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n\n const [inputValue, setInputValue] = React.useState(() =>\n calculateInputValueFromOptions(optionsProp, nativeSelectValue),\n );\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n close();\n setNativeSelectValue(item?.value);\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n\n setInputValue(calculateInputValueFromOptions(optionsProp, nativeSelectValue));\n }, [close, selectElRef, optionsProp, nativeSelectValue]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function filterOptions() {\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n },\n [filterFn, inputValue, optionsProp, searchable],\n );\n\n const selectValue = props.value ?? nativeSelectValue ?? defaultValue;\n React.useEffect(\n function updateSelectedOptionIndexOnValueChange() {\n setSelectedOptionIndex(findSelectedIndex(options, selectValue, allowClearButton));\n },\n [selectValue, allowClearButton, options],\n );\n\n const prevSelectValueRef = React.useRef(selectValue);\n React.useEffect(\n function updateInputValueOnSelectValueChange() {\n if (prevSelectValueRef.current === selectValue) {\n return;\n }\n setInputValue(calculateInputValueFromOptions(optionsProp, selectValue));\n },\n [selectValue, optionsProp],\n );\n React.useEffect(\n function updatePrevSelectValue() {\n prevSelectValueRef.current = selectValue;\n },\n [selectValue],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n searchable={searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n selectedOptionLabel={selected?.label}\n />\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","DropdownIcon","Footnote","CustomSelectClearButton","CustomSelectInput","calculateInputValueFromOptions","defaultRenderOptionFn","findIndexAfter","findIndexBefore","findSelectedIndex","sizeYClassNames","none","warn","checkOptionsValueType","options","Set","map","item","value","size","handleOptionDown","e","preventDefault","filter","inputValue","filterFn","option","CustomSelect","props","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","icon","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","nativeSelectValue","setNativeSelectValue","setInputValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","length","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","disabled","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","filterOptions","selectValue","updateSelectedOptionIndexOnValueChange","prevSelectValueRef","updateInputValueOnSelectValueChange","updatePrevSelectValue","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","autoComplete","autoCapitalize","autoCorrect","spellCheck","onKeyUp","onKeyDown","after","selectedOptionLabel","select","aria-hidden","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
@@ -2,15 +2,17 @@ import * as React from 'react';
2
2
  import { HasAlign, HasRef, HasRootRef } from '../../types';
3
3
  import { FormFieldProps } from '../FormField/FormField';
4
4
  import type { SelectType } from '../Select/Select';
5
- export interface CustomSelectInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasAlign, Omit<FormFieldProps, 'mode' | 'type'> {
5
+ export interface CustomSelectInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasAlign, Omit<FormFieldProps, 'mode' | 'type' | 'maxHeight'> {
6
6
  selectType?: SelectType;
7
7
  multiline?: boolean;
8
8
  labelTextTestId?: string;
9
9
  fetching?: boolean;
10
+ searchable?: boolean;
11
+ selectedOptionLabel?: React.ReactElement | string;
10
12
  }
11
13
  /**
12
14
  * @since 5.10.0
13
15
  * @private
14
16
  */
15
- export declare const CustomSelectInput: ({ align, getRef, className, getRootRef, style, before, after, status, children, placeholder, selectType, multiline, disabled, fetching, labelTextTestId, ...restProps }: CustomSelectInputProps) => React.ReactNode;
17
+ export declare const CustomSelectInput: ({ align, getRef, className, getRootRef, style, before, after, status, selectedOptionLabel, selectType, multiline, disabled, fetching, labelTextTestId, searchable, ...restInputProps }: CustomSelectInputProps) => React.ReactNode;
16
18
  //# sourceMappingURL=CustomSelectInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelectInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD,MAAM,WAAW,sBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,4KAiB3B,sBAAsB,KAAG,KAAK,CAAC,SA8EjC,CAAC"}
1
+ {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/CustomSelectInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAa,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUnD,MAAM,WAAW,sBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;CACnD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,2LAiB3B,sBAAsB,KAAG,KAAK,CAAC,SAmEjC,CAAC"}
@@ -6,12 +6,10 @@ import * as React from 'react';
6
6
  import { classNames } from '@vkontakte/vkjs';
7
7
  import { useAdaptivity } from '../../hooks/useAdaptivity';
8
8
  import { useExternRef } from '../../hooks/useExternRef';
9
- import { useFocusWithin } from '../../hooks/useFocusWithin';
10
9
  import { usePlatform } from '../../hooks/usePlatform';
11
10
  import { getFormFieldModeFromSelectType } from '../../lib/select';
12
11
  import { FormField } from '../FormField/FormField';
13
12
  import { SelectTypography } from '../SelectTypography/SelectTypography';
14
- import { Text } from '../Typography/Text/Text';
15
13
  import { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';
16
14
  const sizeYClassNames = {
17
15
  none: "vkuiCustomSelectInput--sizeY-none",
@@ -21,7 +19,7 @@ const sizeYClassNames = {
21
19
  * @since 5.10.0
22
20
  * @private
23
21
  */ export const CustomSelectInput = (_param)=>{
24
- var { align = 'left', getRef, className, getRootRef, style, before, after, status, children, placeholder, selectType = 'default', multiline, disabled, fetching, labelTextTestId } = _param, restProps = _object_without_properties(_param, [
22
+ var { align = 'left', getRef, className, getRootRef, style, before, after, status, selectedOptionLabel, selectType = 'default', multiline, disabled, fetching, labelTextTestId, searchable } = _param, restInputProps = _object_without_properties(_param, [
25
23
  "align",
26
24
  "getRef",
27
25
  "className",
@@ -30,35 +28,32 @@ const sizeYClassNames = {
30
28
  "before",
31
29
  "after",
32
30
  "status",
33
- "children",
34
- "placeholder",
31
+ "selectedOptionLabel",
35
32
  "selectType",
36
33
  "multiline",
37
34
  "disabled",
38
35
  "fetching",
39
- "labelTextTestId"
36
+ "labelTextTestId",
37
+ "searchable"
40
38
  ]);
41
39
  const { sizeY = 'none' } = useAdaptivity();
42
- const title = children || placeholder;
43
- const showLabelOrPlaceholder = !Boolean(restProps.value);
44
40
  const handleRootRef = useExternRef(getRootRef);
45
- const focusWithin = useFocusWithin(handleRootRef);
46
- const input = /*#__PURE__*/ _jsx(Text, _object_spread_props(_object_spread({
41
+ const platform = usePlatform();
42
+ const input = /*#__PURE__*/ _jsx(SelectTypography, _object_spread_props(_object_spread({
43
+ selectType: selectType,
47
44
  type: "text"
48
- }, restProps), {
45
+ }, restInputProps), {
49
46
  disabled: disabled && !fetching,
50
- readOnly: restProps.readOnly || disabled && fetching,
47
+ readOnly: restInputProps.readOnly || !searchable || disabled && fetching,
51
48
  Component: "input",
52
49
  normalize: false,
53
- className: classNames("vkuiCustomSelectInput__el", (restProps.readOnly || showLabelOrPlaceholder && !focusWithin) && "vkuiCustomSelectInput__el--cursor-pointer"),
54
- getRootRef: getRef,
55
- placeholder: children ? '' : placeholder
50
+ className: "vkuiCustomSelectInput__input",
51
+ getRootRef: getRef
56
52
  }));
57
- const platform = usePlatform();
58
53
  return /*#__PURE__*/ _jsx(FormField, {
59
54
  Component: "div",
60
55
  style: style,
61
- className: classNames("vkuiCustomSelectInput", align === 'right' && "vkuiCustomSelectInput--align-right", align === 'center' && "vkuiCustomSelectInput--align-center", !children && "vkuiCustomSelectInput--empty", multiline && "vkuiCustomSelectInput--multiline", sizeY !== 'regular' && sizeYClassNames[sizeY], before && "vkuiCustomSelectInput--hasBefore", after && "vkuiCustomSelectInput--hasAfter", className),
56
+ className: classNames("vkuiCustomSelectInput", align === 'right' && "vkuiCustomSelectInput--align-right", align === 'center' && "vkuiCustomSelectInput--align-center", !selectedOptionLabel && "vkuiCustomSelectInput--empty", multiline && "vkuiCustomSelectInput--multiline", sizeY !== 'regular' && sizeYClassNames[sizeY], before && "vkuiCustomSelectInput--hasBefore", after && "vkuiCustomSelectInput--hasAfter", className),
62
57
  getRootRef: handleRootRef,
63
58
  before: before,
64
59
  after: after,
@@ -68,20 +63,20 @@ const sizeYClassNames = {
68
63
  children: /*#__PURE__*/ _jsxs("div", {
69
64
  className: "vkuiCustomSelectInput__input-group",
70
65
  children: [
66
+ !searchable && platform === 'ios' ? /*#__PURE__*/ _jsx(VisuallyHidden, {
67
+ children: input
68
+ }) : input,
71
69
  /*#__PURE__*/ _jsx("div", {
72
- className: classNames("vkuiCustomSelectInput__container", className),
70
+ className: classNames("vkuiCustomSelectInput__label-wrapper", className),
73
71
  tabIndex: -1,
74
72
  "aria-hidden": true,
75
73
  "data-testid": labelTextTestId,
76
74
  children: /*#__PURE__*/ _jsx(SelectTypography, {
77
75
  selectType: selectType,
78
- className: "vkuiCustomSelectInput__title",
79
- children: showLabelOrPlaceholder && title
76
+ className: "vkuiCustomSelectInput__label",
77
+ children: selectedOptionLabel || restInputProps.placeholder
80
78
  })
81
- }),
82
- restProps.readOnly && platform === 'ios' ? /*#__PURE__*/ _jsx(VisuallyHidden, {
83
- children: input
84
- }) : input
79
+ })
85
80
  ]
86
81
  })
87
82
  });