@vkontakte/vkui 7.8.2 → 7.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/components/Box/Box.d.ts +11 -0
  2. package/dist/components/Box/Box.d.ts.map +1 -0
  3. package/dist/components/Box/Box.js +25 -0
  4. package/dist/components/Box/Box.js.map +1 -0
  5. package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
  6. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  7. package/dist/components/CarouselBase/CarouselBase.js +6 -4
  8. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  9. package/dist/components/CarouselBase/constants.d.ts +1 -1
  10. package/dist/components/CarouselBase/constants.d.ts.map +1 -1
  11. package/dist/components/CarouselBase/constants.js +1 -1
  12. package/dist/components/CarouselBase/constants.js.map +1 -1
  13. package/dist/components/CarouselBase/hooks.d.ts +3 -1
  14. package/dist/components/CarouselBase/hooks.d.ts.map +1 -1
  15. package/dist/components/CarouselBase/hooks.js +46 -6
  16. package/dist/components/CarouselBase/hooks.js.map +1 -1
  17. package/dist/components/CarouselBase/types.d.ts +12 -0
  18. package/dist/components/CarouselBase/types.d.ts.map +1 -1
  19. package/dist/components/CarouselBase/types.js.map +1 -1
  20. package/dist/components/Checkbox/Checkbox.d.ts +11 -2
  21. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  22. package/dist/components/Checkbox/Checkbox.js +44 -10
  23. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  24. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +16 -3
  25. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  26. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js +32 -19
  27. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
  28. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  29. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  30. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +39 -10
  31. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  32. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  33. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  34. package/dist/components/ChipsInput/ChipsInput.js +32 -13
  35. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  36. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
  37. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  38. package/dist/components/ChipsInputBase/ChipsInputBase.js +52 -26
  39. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  40. package/dist/components/ChipsInputBase/types.d.ts +13 -4
  41. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  42. package/dist/components/ChipsInputBase/types.js.map +1 -1
  43. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  44. package/dist/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  45. package/dist/components/ChipsSelect/ChipsSelect.js +67 -38
  46. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  47. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -2
  48. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  49. package/dist/components/CustomSelect/CustomSelect.js +99 -50
  50. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  51. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +6 -2
  52. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  53. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +38 -20
  54. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  55. package/dist/components/CustomSelect/helpers.d.ts +1 -0
  56. package/dist/components/CustomSelect/helpers.d.ts.map +1 -1
  57. package/dist/components/CustomSelect/helpers.js +11 -0
  58. package/dist/components/CustomSelect/helpers.js.map +1 -1
  59. package/dist/components/Div/Div.d.ts +3 -0
  60. package/dist/components/Div/Div.d.ts.map +1 -1
  61. package/dist/components/Div/Div.js +11 -1
  62. package/dist/components/Div/Div.js.map +1 -1
  63. package/dist/components/File/File.d.ts +16 -3
  64. package/dist/components/File/File.d.ts.map +1 -1
  65. package/dist/components/File/File.js +29 -17
  66. package/dist/components/File/File.js.map +1 -1
  67. package/dist/components/Input/Input.d.ts +16 -3
  68. package/dist/components/Input/Input.d.ts.map +1 -1
  69. package/dist/components/Input/Input.js +28 -13
  70. package/dist/components/Input/Input.js.map +1 -1
  71. package/dist/components/NativeSelect/NativeSelect.d.ts +17 -3
  72. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  73. package/dist/components/NativeSelect/NativeSelect.js +37 -14
  74. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  75. package/dist/components/Radio/Radio.d.ts +18 -3
  76. package/dist/components/Radio/Radio.d.ts.map +1 -1
  77. package/dist/components/Radio/Radio.js +31 -11
  78. package/dist/components/Radio/Radio.js.map +1 -1
  79. package/dist/components/Radio/RadioInput/RadioInput.d.ts +16 -3
  80. package/dist/components/Radio/RadioInput/RadioInput.d.ts.map +1 -1
  81. package/dist/components/Radio/RadioInput/RadioInput.js +22 -11
  82. package/dist/components/Radio/RadioInput/RadioInput.js.map +1 -1
  83. package/dist/components/Search/Search.d.ts +16 -3
  84. package/dist/components/Search/Search.d.ts.map +1 -1
  85. package/dist/components/Search/Search.js +50 -28
  86. package/dist/components/Search/Search.js.map +1 -1
  87. package/dist/components/Select/Select.d.ts.map +1 -1
  88. package/dist/components/Select/Select.js +10 -4
  89. package/dist/components/Select/Select.js.map +1 -1
  90. package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
  91. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  92. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  93. package/dist/components/Snackbar/Snackbar.d.ts +10 -1
  94. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  95. package/dist/components/Snackbar/Snackbar.js +20 -6
  96. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  97. package/dist/components/SplitLayout/SplitLayout.d.ts +16 -3
  98. package/dist/components/SplitLayout/SplitLayout.d.ts.map +1 -1
  99. package/dist/components/SplitLayout/SplitLayout.js +24 -9
  100. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  101. package/dist/components/Switch/Switch.d.ts +16 -3
  102. package/dist/components/Switch/Switch.d.ts.map +1 -1
  103. package/dist/components/Switch/Switch.js +32 -20
  104. package/dist/components/Switch/Switch.js.map +1 -1
  105. package/dist/components/Textarea/Textarea.d.ts +16 -3
  106. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  107. package/dist/components/Textarea/Textarea.js +36 -18
  108. package/dist/components/Textarea/Textarea.js.map +1 -1
  109. package/dist/components/WriteBar/WriteBar.d.ts +16 -3
  110. package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
  111. package/dist/components/WriteBar/WriteBar.js +28 -11
  112. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  113. package/dist/components.css +1 -1
  114. package/dist/components.css.map +1 -1
  115. package/dist/cssm/components/Box/Box.js +19 -0
  116. package/dist/cssm/components/Box/Box.js.map +1 -0
  117. package/dist/cssm/components/CarouselBase/CarouselBase.js +4 -4
  118. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  119. package/dist/cssm/components/CarouselBase/constants.js +1 -1
  120. package/dist/cssm/components/CarouselBase/constants.js.map +1 -1
  121. package/dist/cssm/components/CarouselBase/hooks.js +46 -6
  122. package/dist/cssm/components/CarouselBase/hooks.js.map +1 -1
  123. package/dist/cssm/components/CarouselBase/types.js.map +1 -1
  124. package/dist/cssm/components/Checkbox/Checkbox.js +29 -6
  125. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  126. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js +24 -13
  127. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
  128. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +24 -6
  129. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  130. package/dist/cssm/components/ChipsInput/ChipsInput.js +25 -11
  131. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  132. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +30 -12
  133. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  134. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  135. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +49 -30
  136. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  137. package/dist/cssm/components/CustomSelect/CustomSelect.js +73 -41
  138. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  139. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +20 -9
  140. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  141. package/dist/cssm/components/CustomSelect/helpers.js +11 -0
  142. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -1
  143. package/dist/cssm/components/Div/Div.js +11 -1
  144. package/dist/cssm/components/Div/Div.js.map +1 -1
  145. package/dist/cssm/components/File/File.js +20 -7
  146. package/dist/cssm/components/File/File.js.map +1 -1
  147. package/dist/cssm/components/Input/Input.js +20 -7
  148. package/dist/cssm/components/Input/Input.js.map +1 -1
  149. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
  150. package/dist/cssm/components/NativeSelect/NativeSelect.js +25 -8
  151. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  152. package/dist/cssm/components/Radio/Radio.js +28 -8
  153. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  154. package/dist/cssm/components/Radio/RadioInput/RadioInput.js +18 -6
  155. package/dist/cssm/components/Radio/RadioInput/RadioInput.js.map +1 -1
  156. package/dist/cssm/components/Search/Search.js +34 -17
  157. package/dist/cssm/components/Search/Search.js.map +1 -1
  158. package/dist/cssm/components/Select/Select.js +9 -1
  159. package/dist/cssm/components/Select/Select.js.map +1 -1
  160. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  161. package/dist/cssm/components/Snackbar/Snackbar.js +11 -2
  162. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  163. package/dist/cssm/components/SplitLayout/SplitLayout.js +22 -8
  164. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  165. package/dist/cssm/components/Switch/Switch.js +29 -17
  166. package/dist/cssm/components/Switch/Switch.js.map +1 -1
  167. package/dist/cssm/components/Textarea/Textarea.js +22 -8
  168. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  169. package/dist/cssm/components/WriteBar/WriteBar.js +24 -9
  170. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  171. package/dist/cssm/hooks/useMergeProps.js +38 -0
  172. package/dist/cssm/hooks/useMergeProps.js.map +1 -0
  173. package/dist/cssm/index.js +2 -0
  174. package/dist/cssm/index.js.map +1 -1
  175. package/dist/cssm/lib/animation/useCSSTransition.js +1 -1
  176. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  177. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  178. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  179. package/dist/cssm/lib/fx.js +55 -8
  180. package/dist/cssm/lib/fx.js.map +1 -1
  181. package/dist/cssm/lib/layouts/gaps.js.map +1 -1
  182. package/dist/cssm/lib/layouts/helpers.js +21 -0
  183. package/dist/cssm/lib/layouts/helpers.js.map +1 -0
  184. package/dist/cssm/lib/layouts/index.js +1 -0
  185. package/dist/cssm/lib/layouts/index.js.map +1 -1
  186. package/dist/cssm/lib/layouts/layoutProps.js +89 -0
  187. package/dist/cssm/lib/layouts/layoutProps.js.map +1 -0
  188. package/dist/cssm/lib/layouts/resolveLayoutProps.js +36 -0
  189. package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -0
  190. package/dist/cssm/lib/layouts/types.js +3 -0
  191. package/dist/cssm/lib/layouts/types.js.map +1 -0
  192. package/dist/cssm/lib/warnOnce.js +1 -1
  193. package/dist/cssm/lib/warnOnce.js.map +1 -1
  194. package/dist/cssm/styles/layout.css +922 -0
  195. package/dist/hooks/useMergeProps.d.ts +6 -0
  196. package/dist/hooks/useMergeProps.d.ts.map +1 -0
  197. package/dist/hooks/useMergeProps.js +42 -0
  198. package/dist/hooks/useMergeProps.js.map +1 -0
  199. package/dist/index.d.ts +3 -0
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/lib/animation/useCSSTransition.js +1 -1
  204. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  205. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  206. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  207. package/dist/lib/fx.d.ts +8 -1
  208. package/dist/lib/fx.d.ts.map +1 -1
  209. package/dist/lib/fx.js +55 -8
  210. package/dist/lib/fx.js.map +1 -1
  211. package/dist/lib/layouts/gaps.d.ts +4 -5
  212. package/dist/lib/layouts/gaps.d.ts.map +1 -1
  213. package/dist/lib/layouts/gaps.js.map +1 -1
  214. package/dist/lib/layouts/helpers.d.ts +17 -0
  215. package/dist/lib/layouts/helpers.d.ts.map +1 -0
  216. package/dist/lib/layouts/helpers.js +21 -0
  217. package/dist/lib/layouts/helpers.js.map +1 -0
  218. package/dist/lib/layouts/index.d.ts +2 -0
  219. package/dist/lib/layouts/index.d.ts.map +1 -1
  220. package/dist/lib/layouts/index.js +1 -0
  221. package/dist/lib/layouts/index.js.map +1 -1
  222. package/dist/lib/layouts/layoutProps.d.ts +33 -0
  223. package/dist/lib/layouts/layoutProps.d.ts.map +1 -0
  224. package/dist/lib/layouts/layoutProps.js +89 -0
  225. package/dist/lib/layouts/layoutProps.js.map +1 -0
  226. package/dist/lib/layouts/resolveLayoutProps.d.ts +18 -0
  227. package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -0
  228. package/dist/lib/layouts/resolveLayoutProps.js +35 -0
  229. package/dist/lib/layouts/resolveLayoutProps.js.map +1 -0
  230. package/dist/lib/layouts/types.d.ts +123 -0
  231. package/dist/lib/layouts/types.d.ts.map +1 -0
  232. package/dist/lib/layouts/types.js +3 -0
  233. package/dist/lib/layouts/types.js.map +1 -0
  234. package/dist/lib/warnOnce.js +1 -1
  235. package/dist/lib/warnOnce.js.map +1 -1
  236. package/dist/vkui.css +1 -1
  237. package/dist/vkui.css.map +1 -1
  238. package/package.json +2 -2
  239. package/src/components/Box/Box.tsx +26 -0
  240. package/src/components/CarouselBase/CarouselBase.tsx +11 -4
  241. package/src/components/CarouselBase/constants.ts +1 -1
  242. package/src/components/CarouselBase/hooks.ts +31 -6
  243. package/src/components/CarouselBase/types.ts +13 -0
  244. package/src/components/Checkbox/Checkbox.tsx +57 -7
  245. package/src/components/Checkbox/CheckboxInput/CheckboxInput.tsx +51 -18
  246. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +36 -6
  247. package/src/components/ChipsInput/ChipsInput.tsx +38 -11
  248. package/src/components/ChipsInputBase/ChipsInputBase.tsx +60 -17
  249. package/src/components/ChipsInputBase/types.ts +15 -4
  250. package/src/components/ChipsSelect/ChipsSelect.tsx +71 -33
  251. package/src/components/CustomSelect/CustomSelect.tsx +135 -45
  252. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +48 -17
  253. package/src/components/CustomSelect/helpers.ts +23 -0
  254. package/src/components/Div/Div.tsx +13 -3
  255. package/src/components/File/File.tsx +48 -11
  256. package/src/components/Input/Input.tsx +51 -14
  257. package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
  258. package/src/components/NativeSelect/NativeSelect.tsx +57 -18
  259. package/src/components/Radio/Radio.tsx +51 -8
  260. package/src/components/Radio/RadioInput/RadioInput.tsx +35 -11
  261. package/src/components/Search/Search.tsx +80 -29
  262. package/src/components/Select/Select.tsx +22 -3
  263. package/src/components/SelectionControl/SelectionControl.tsx +2 -1
  264. package/src/components/Snackbar/Snackbar.tsx +35 -5
  265. package/src/components/SplitLayout/SplitLayout.tsx +46 -12
  266. package/src/components/Switch/Switch.tsx +62 -31
  267. package/src/components/Textarea/Textarea.tsx +58 -14
  268. package/src/components/WriteBar/WriteBar.tsx +59 -13
  269. package/src/hooks/useMergeProps.ts +66 -0
  270. package/src/index.ts +3 -0
  271. package/src/lib/animation/useCSSTransition.ts +1 -1
  272. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
  273. package/src/lib/fx.ts +63 -8
  274. package/src/lib/layouts/gaps.ts +4 -5
  275. package/src/lib/layouts/helpers.ts +24 -0
  276. package/src/lib/layouts/index.ts +13 -0
  277. package/src/lib/layouts/layoutProps.ts +75 -0
  278. package/src/lib/layouts/resolveLayoutProps.ts +51 -0
  279. package/src/lib/layouts/types.ts +142 -0
  280. package/src/lib/warnOnce.ts +1 -1
  281. package/src/styles/layout.css +1 -0
  282. package/src/styles/layout.css.d.ts.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport type { NativeSelectProps, SelectValue } from '../NativeSelect/NativeSelect';\nimport { NOT_SELECTED, remapFromNativeValueToSelectValue } from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { type CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n } else {\n if (status === 'fetching') {\n setStatus('loaded');\n setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n }\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\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<HTMLInputElement>) => void;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `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 /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction;\n /**\n * Обработчик открытия выпадающего списка.\n */\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 * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean;\n /**\n * Тип отображения компонента.\n */\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n /**\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: (e: React.KeyboardEvent, isOpen: boolean) => void;\n /**\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string);\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\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 searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': options,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton,\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 'onInputKeyDown': onInputKeyDownProp,\n readOnly,\n accessible = false,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const selectElRef = useExternRef(getRef);\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (props.value === undefined) {\n return undefined;\n }\n return getOptionByValue(options, props.value)?.value ?? null;\n }, [options, props.value]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onInputChangeProp,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const { opened, open, close, toggleOpened } = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const onInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\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 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 = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\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: preventDefault,\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 ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: restProps.disabled,\n readOnly,\n icon: iconProp,\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 selectInputRef.current.focus();\n }\n }\n },\n [document, 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 ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\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 const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n onMouseMove={function updateLastMousePosition(e) {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n }}\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={readOnly || !searchable}\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n value={inputValue}\n onKeyDown={!readOnly ? onInputKeyDown : undefined}\n onChange={onInputChange}\n onClick={!readOnly ? toggleOpened : undefined}\n before={before}\n after={afterItems}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <select\n tabIndex={-1}\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.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.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={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\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","getRequiredValueByKey","useAdaptivity","useExternRef","callMultiple","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","Footnote","VisuallyHidden","CustomSelectInput","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","sizeYClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","setTimeout","aria-live","CustomSelect","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","forceDropdownPortal","selectType","searchable","renderOptionProp","emptyText","filterFn","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","onInputKeyDownProp","readOnly","accessible","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","value","undefined","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","onInputKeyDown","onBlur","onFocus","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","disabled","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","label","onClick","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","ref","map","afterItems","onClearButtonClick","focus","icon","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","autoComplete","autoCapitalize","autoCorrect","spellCheck","onKeyDown","after","select","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { getRequiredValueByKey } from '../../helpers/getValueByKey';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { preventDefault } from '../../lib/utils';\nimport { type HasDataAttribute, type HasRootRef } from '../../types';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport { CustomSelectOption } from '../CustomSelectOption/CustomSelectOption';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n type NativeSelectProps,\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n type SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport { type CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport {\n checkDeprecatedProps,\n checkMixControlledAndUncontrolledState,\n checkOptionsValueType,\n filter,\n findSelectedIndex,\n getOptionByValue,\n} from './helpers';\nimport { useAfterItems } from './hooks/useAfterItems';\nimport { useDropdownOpenedController } from './hooks/useDropdownOpenedController';\nimport { useFocusedOptionController } from './hooks/useFocusedOptionController';\nimport { useInputKeyboardController } from './hooks/useInputKeyboardController';\nimport { useInputValueController } from './hooks/useInputValueController';\nimport { useScrollListController } from './hooks/useScrollListController';\nimport { useSelectedOptionController } from './hooks/useSelectedOptionController';\nimport type {\n CustomSelectOptionInterface,\n CustomSelectRenderOption,\n MousePosition,\n PopupDirection,\n} from './types';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nfunction isMousePositionChanged(event: React.MouseEvent, prevPosition: MousePosition) {\n return (\n Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1\n );\n}\n\nconst FETCH_STATUS_RESET_DELAY = 2000;\n\nconst FetchingStatus = ({\n fetching = false,\n options,\n fetchingInProgressLabel = 'Список опций загружается...',\n fetchingCompletedLabel = `Загружено опций: ${options.length}`,\n}: Pick<\n SelectProps,\n 'fetching' | 'fetchingInProgressLabel' | 'fetchingCompletedLabel' | 'options'\n>) => {\n const [status, setStatus] = React.useState<'fetching' | 'loaded' | 'none'>('none');\n\n const content = getRequiredValueByKey(status, {\n fetching: fetchingInProgressLabel,\n loaded:\n typeof fetchingCompletedLabel === 'function'\n ? fetchingCompletedLabel(options.length)\n : fetchingCompletedLabel,\n none: '',\n });\n\n useIsomorphicLayoutEffect(\n function updateStatus() {\n if (fetching) {\n setStatus('fetching');\n } else {\n if (status === 'fetching') {\n setStatus('loaded');\n setTimeout(() => setStatus('none'), FETCH_STATUS_RESET_DELAY);\n }\n }\n },\n [fetching],\n );\n\n return <VisuallyHidden aria-live=\"polite\">{content}</VisuallyHidden>;\n};\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends Omit<NativeSelectProps, 'slotProps'>,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `select`: свойства для прокидывания в нативный `select`;\n * - `input`: свойства для прокидывания в нативный `input`.\n */\n slotProps?: NativeSelectProps['slotProps'] & {\n input?: React.InputHTMLAttributes<HTMLInputElement> &\n HasDataAttribute &\n HasRootRef<HTMLInputElement>;\n };\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\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<HTMLInputElement>) => void;\n /**\n * Список опций в списке.\n */\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n /**\n * Направление раскрытия выпадающего списка.\n */\n popupDirection?: PopupDirection;\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkui.io/components/custom-select#custom-select-option-api).\n *\n * > ⚠️ Важно: свойство опции `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 /**\n * Обработчик закрытия выпадающего списка.\n */\n onClose?: VoidFunction;\n /**\n * Обработчик открытия выпадающего списка.\n */\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 * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка.\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента.\n */\n dropdownAutoWidth?: boolean;\n /**\n * Использовать Portal для рендеринга выпадающего списка.\n */\n forceDropdownPortal?: boolean;\n /**\n * Тип отображения компонента.\n */\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию.\n */\n noMaxHeight?: boolean;\n /**\n * Передает атрибут `data-testid` для элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { 'data-testid': ... } }`.\n *\n * Передает атрибут `data-testid` для нативного элемента `select`.\n */\n nativeSelectTestId?: string;\n /**\n * Обработчик события `keyDown` в поле ввода.\n */\n onInputKeyDown?: (e: React.KeyboardEvent, isOpen: boolean) => void;\n /**\n * Включает режим в котором выбранное значение `CustomSelect` читается скринридерами корректно.\n * В данном режиме введенное в поле ввода значение не сбрасывается при потере фокуса.\n */\n accessible?: boolean /* TODO [>=v8] включить по умолчанию */;\n /**\n * Текстовая метка для индикации процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Список опций загружается...\"`.\n */\n fetchingInProgressLabel?: string;\n /**\n * Текстовая метка для индикации завершения процесса загрузки данных для пользователей скринридерами. По умолчанию: `\"Загружено опций: ${options.length}\"`.\n */\n fetchingCompletedLabel?: string | ((optionsCount: number) => string);\n}\n\n/**\n * @see https://vkui.io/components/custom-select\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const {\n style,\n className,\n getRootRef,\n before,\n name,\n getRef,\n popupDirection = 'bottom',\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n labelTextTestId,\n multiline,\n placeholder,\n status,\n forceDropdownPortal,\n align,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': options,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton,\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 'onInputKeyDown': onInputKeyDownProp,\n accessible = false,\n fetchingInProgressLabel,\n fetchingCompletedLabel,\n 'value': selectValue,\n\n slotProps,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(options);\n checkDeprecatedProps(props);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const {\n onClick: onRootClick,\n onMouseMove: onRootMouseMove,\n onMouseDown: onRootMouseDown,\n getRootRef: rootRef,\n ...rootRest\n } = useMergeProps(\n {\n style,\n className,\n getRootRef,\n },\n slotProps?.root,\n );\n\n const { getRootRef: getSelectRef, ...selectRest } = useMergeProps(\n {\n getRootRef: getRef,\n onBlur: props.onBlur,\n onFocus: props.onFocus,\n onClick: props.onClick,\n },\n slotProps?.select,\n );\n\n const {\n getRootRef: getInputRef,\n onChange: onChangeInput,\n onFocus: onInputFocus,\n onBlur: onInputBlur,\n onKeyDown: onNativeInputKeyDown,\n onClick: onNativeInputClick,\n readOnly,\n ...inputRest\n } = useMergeProps(\n {\n getRootRef: getSelectInputRef,\n onChange: onInputChangeProp,\n // Приводим типы так как в CustomSelect типы в rest определены как React.SelectHTMLAttributes<HTMLSelectElement>\n // Хотя эти свойства прокидываются в input\n ...(restProps as React.InputHTMLAttributes<HTMLInputElement>),\n },\n slotProps?.input,\n );\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, rootRef);\n const selectElRef = useExternRef(getSelectRef);\n const selectInputRef = useExternRef(getInputRef);\n\n const propsValue = React.useMemo<SelectValue | undefined>(() => {\n if (selectValue === undefined) {\n return undefined;\n }\n return getOptionByValue(options, selectValue)?.value ?? null;\n }, [options, selectValue]);\n\n const [isControlledOutside, setIsControlledOutside] = React.useState(selectValue !== undefined);\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n\n const {\n nativeSelectValue,\n setNativeSelectValue,\n selectedOptionValue,\n setSelectedOptionValue,\n onNativeSelectChange,\n } = useSelectedOptionController({\n value: propsValue,\n defaultValue,\n isControlledOutside,\n allowClearButton,\n onChange,\n });\n\n const selected = React.useMemo(\n () => options.find((option) => option.value === selectedOptionValue),\n [options, selectedOptionValue],\n );\n\n const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } =\n useInputValueController({\n options,\n accessible,\n selectedValue: selectedOptionValue,\n onInputChange: onChangeInput,\n });\n\n const filteredOptions = React.useMemo(\n () => filter(options, searchable ? inputValue : '', filterFn),\n [filterFn, inputValue, options, searchable],\n );\n\n const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();\n\n const {\n focusedOptionValue,\n setFocusedOptionValue,\n resetFocusedOption,\n focusOptionByIndex,\n focusOption,\n selectFocusedValue,\n } = useFocusedOptionController({\n selectedOptionValue,\n filteredOptions,\n scrollToElement,\n });\n\n const scrollToSelectedOption = () => {\n scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);\n };\n\n const { opened, open, close, toggleOpened } = useDropdownOpenedController({\n onOpen: callMultiple(selectFocusedValue, onOpen),\n onOpened: scrollToSelectedOption,\n onClose,\n onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue,\n });\n\n React.useEffect(\n function updateOptionsValue() {\n const value =\n propsValue !== undefined\n ? propsValue\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n setSelectedOptionValue(value);\n setFocusedOptionValue(value);\n },\n [propsValue, nativeSelectValue, setFocusedOptionValue, setSelectedOptionValue],\n );\n\n React.useEffect(\n function syncIsControlledState() {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = propsValue !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n },\n [propsValue],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (\n filteredOptions.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const selectOption = React.useCallback(\n (value: Exclude<SelectValue, null>) => {\n setNativeSelectValue(value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, setNativeSelectValue, isControlledOutside, propsValue, nativeSelectValue, selectElRef],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionValue === null) {\n return;\n }\n\n selectOption(focusedOptionValue);\n }, [focusedOptionValue, selectOption]);\n\n const handleInputKeyDown = useInputKeyboardController({\n opened,\n open,\n close,\n resetFocusedOption,\n selectFocused,\n focusOption,\n scrollBoxRef,\n onInputKeyDown: onInputKeyDownProp,\n });\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 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 = filteredOptions[index];\n\n if (option && !option.disabled) {\n selectOption(option.value);\n }\n },\n [filteredOptions, selectOption],\n );\n\n const lastMousePositionRef = React.useRef<MousePosition>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n if (isMousePositionChanged(e, lastMousePositionRef.current)) {\n focusOptionByIndex(index, false);\n }\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = option.value === focusedOptionValue;\n const selected = option.value === selectedOptionValue;\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: preventDefault,\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 ...option,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionValue,\n selectedOptionValue,\n renderOptionProp,\n handleOptionClick,\n popupAriaId,\n focusOptionOnMouseMove,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n filteredOptions.length > 0 ? (\n <div ref={optionsWrapperRef}>{filteredOptions.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, filteredOptions, optionsWrapperRef, renderDropdown, renderOption]);\n\n const afterItems = useAfterItems({\n value: propsValue,\n nativeSelectValue,\n isControlledOutside,\n opened,\n allowClearButton,\n ClearButton,\n onClearButtonClick: () => {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n resetInputValue();\n selectInputRef.current && selectInputRef.current.focus();\n },\n clearButtonTestId,\n disabled: restProps.disabled,\n readOnly,\n icon: iconProp,\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 selectInputRef.current.focus();\n }\n }\n },\n [document, 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 ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;\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 const resetOptionFocusOnMouseLeave = React.useCallback(\n (event: React.MouseEvent) => {\n // В Хроме eсли мышка пользователя находится над инпутом селекта,\n // и он с клавиатуры открывает опции, причём одна из опций\n // уже выбрана, то видно, как выбранная опция получает фокус,\n // но потом сразу же его теряет.\n // Связано это с тем, что в этот момент вызывается onMouseLeave, на который у нас\n // завязан сброс состония фокуса у опции. По хорошему фокус должен оставаться.\n // Нам не интересен вызов onMouseLeave если мышка при этом не двигалась.\n if (isMousePositionChanged(event, lastMousePositionRef.current)) {\n resetFocusedOption();\n }\n },\n [resetFocusedOption],\n );\n\n const updateLastMousePosition = (e: React.MouseEvent) => {\n lastMousePositionRef.current = { x: e.clientX, y: e.clientY };\n };\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY])}\n getRootRef={handleRootRef}\n onClick={callMultiple(onRootClick, passClickAndFocusToInputOnClick)}\n onMouseDown={callMultiple(onRootMouseDown, preventInputBlurWhenClickInsideFocusedSelectArea)}\n onMouseMove={callMultiple(onRootMouseMove, updateLastMousePosition)}\n {...rootRest}\n >\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n fetching={fetching}\n searchable={searchable}\n accessible={accessible}\n before={before}\n after={afterItems}\n selectType={selectType}\n align={align}\n status={status}\n placeholder={placeholder}\n multiline={multiline}\n labelTextTestId={labelTextTestId}\n slotProps={{\n root: { className: openedClassNames },\n input: {\n getRootRef: selectInputRef,\n onChange: onInputChange,\n onFocus: callMultiple(onFocus, onInputFocus),\n onBlur: callMultiple(onBlur, onInputFocus),\n onKeyDown: !readOnly\n ? callMultiple(handleInputKeyDown, onNativeInputKeyDown)\n : onNativeInputKeyDown,\n onClick: !readOnly\n ? callMultiple(toggleOpened, onNativeInputClick)\n : onNativeInputClick,\n value: inputValue,\n readOnly: readOnly || !searchable,\n ...selectInputAriaProps,\n ...inputRest,\n },\n }}\n >\n {selected?.label}\n </CustomSelectInput>\n\n <FetchingStatus\n fetching={fetching}\n options={filteredOptions}\n fetchingInProgressLabel={fetchingInProgressLabel}\n fetchingCompletedLabel={fetchingCompletedLabel}\n />\n <RootComponent\n Component=\"select\"\n baseClassName={styles.control}\n tabIndex={-1}\n name={name}\n value={nativeSelectValue}\n aria-hidden\n data-testid={nativeSelectTestId}\n required={required}\n onChange={onNativeSelectChange}\n getRootRef={selectElRef}\n {...selectRest}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {options.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </RootComponent>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={scrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetOptionFocusOnMouseLeave}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </RootComponent>\n );\n}\n"],"names":["React","classNames","getRequiredValueByKey","useAdaptivity","useExternRef","useMergeProps","callMultiple","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","preventDefault","CustomSelectDropdown","CustomSelectOption","NOT_SELECTED","remapFromNativeValueToSelectValue","RootComponent","Footnote","VisuallyHidden","CustomSelectInput","checkDeprecatedProps","checkMixControlledAndUncontrolledState","checkOptionsValueType","filter","findSelectedIndex","getOptionByValue","useAfterItems","useDropdownOpenedController","useFocusedOptionController","useInputKeyboardController","useInputValueController","useScrollListController","useSelectedOptionController","sizeYClassNames","none","compact","defaultRenderOptionFn","option","props","isMousePositionChanged","event","prevPosition","Math","abs","x","clientX","y","clientY","FETCH_STATUS_RESET_DELAY","FetchingStatus","fetching","options","fetchingInProgressLabel","fetchingCompletedLabel","length","status","setStatus","useState","content","loaded","updateStatus","setTimeout","aria-live","CustomSelect","style","className","getRootRef","before","name","getRef","popupDirection","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","labelTextTestId","multiline","placeholder","forceDropdownPortal","align","selectType","searchable","renderOptionProp","emptyText","filterFn","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","onInputKeyDownProp","accessible","selectValue","slotProps","restProps","process","env","NODE_ENV","sizeY","root","onClick","onRootClick","onMouseMove","onRootMouseMove","onMouseDown","onRootMouseDown","rootRef","rootRest","onBlur","onFocus","select","getSelectRef","selectRest","input","getInputRef","onChangeInput","onInputFocus","onInputBlur","onKeyDown","onNativeInputKeyDown","onNativeInputClick","readOnly","inputRest","containerRef","useRef","handleRootRef","selectElRef","selectInputRef","propsValue","useMemo","undefined","value","isControlledOutside","setIsControlledOutside","popperPlacement","setPopperPlacement","nativeSelectValue","setNativeSelectValue","selectedOptionValue","setSelectedOptionValue","onNativeSelectChange","selected","find","inputValue","onInputChange","resetInputValue","resetInputValueBySelectedOption","selectedValue","filteredOptions","scrollToElement","optionsWrapperRef","scrollBoxRef","focusedOptionValue","setFocusedOptionValue","resetFocusedOption","focusOptionByIndex","focusOption","selectFocusedValue","scrollToSelectedOption","opened","open","close","toggleOpened","onOpened","onClosed","useEffect","updateOptionsValue","syncIsControlledState","oldIsControlled","newIsControlled","some","NATIVE","Event","bubbles","current","dispatchEvent","openedClassNames","includes","selectOption","useCallback","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","handleInputKeyDown","onInputKeyDown","handleOptionClick","e","index","Array","prototype","indexOf","call","currentTarget","parentNode","disabled","lastMousePositionRef","focusOptionOnMouseMove","popupAriaId","useId","renderOption","hovered","Fragment","label","id","resolvedContent","defaultDropdownContent","div","ref","map","afterItems","onClearButtonClick","focus","icon","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","target","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantId","selectInputAriaProps","resetOptionFocusOnMouseLeave","updateLastMousePosition","baseClassName","autoComplete","autoCapitalize","autoCorrect","spellCheck","after","Component","tabIndex","aria-hidden","data-testid","item","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby"],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import * as React from 'react';
2
- import type { HasAlign, HasRef, HasRootRef } from '../../../types';
2
+ import type { HasAlign, HasDataAttribute, HasRef, HasRootRef } from '../../../types';
3
3
  import { type FormFieldProps } from '../../FormField/FormField';
4
4
  import type { SelectType } from '../../Select/Select';
5
5
  export interface CustomSelectInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasAlign, Omit<FormFieldProps, 'mode' | 'type' | 'maxHeight'> {
6
+ slotProps?: {
7
+ input?: React.InputHTMLAttributes<HTMLInputElement> & HasRootRef<HTMLInputElement> & HasDataAttribute;
8
+ root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & HasRootRef<HTMLDivElement> & HasDataAttribute;
9
+ };
6
10
  selectType?: SelectType;
7
11
  multiline?: boolean;
8
12
  labelTextTestId?: string;
@@ -14,5 +18,5 @@ export interface CustomSelectInputProps extends React.InputHTMLAttributes<HTMLIn
14
18
  * @since 5.10.0
15
19
  * @private
16
20
  */
17
- export declare const CustomSelectInput: ({ align, getRef, className, getRootRef, style, before, after, status, children, placeholder, selectType, multiline, disabled, fetching, labelTextTestId, searchable, accessible, ...restProps }: CustomSelectInputProps) => React.ReactNode;
21
+ export declare const CustomSelectInput: ({ style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, align, getRef, before, after, status, children, placeholder, selectType, multiline, fetching, labelTextTestId, searchable, accessible, slotProps, ...restProps }: CustomSelectInputProps) => React.ReactNode;
18
22
  //# sourceMappingURL=CustomSelectInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAWtD,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,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,iMAmB/B,sBAAsB,KAAG,KAAK,CAAC,SAgGjC,CAAC"}
1
+ {"version":3,"file":"CustomSelectInput.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAWtD,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,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GACjD,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;QACnB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAC3D,UAAU,CAAC,cAAc,CAAC,GAC1B,gBAAgB,CAAC;KACpB,CAAC;IACF,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,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,4OAoB/B,sBAAsB,KAAG,KAAK,CAAC,SAqHjC,CAAC"}
@@ -8,6 +8,7 @@ import { classNames } from "@vkontakte/vkjs";
8
8
  import { useAdaptivity } from "../../../hooks/useAdaptivity.js";
9
9
  import { useExternRef } from "../../../hooks/useExternRef.js";
10
10
  import { useFocusWithin } from "../../../hooks/useFocusWithin.js";
11
+ import { useMergeProps } from "../../../hooks/useMergeProps.js";
11
12
  import { usePlatform } from "../../../hooks/usePlatform.js";
12
13
  import { getFormFieldModeFromSelectType } from "../../../lib/select.js";
13
14
  import { FormField } from "../../FormField/FormField.js";
@@ -22,12 +23,12 @@ const sizeYClassNames = {
22
23
  * @since 5.10.0
23
24
  * @private
24
25
  */ export const CustomSelectInput = (_param)=>{
25
- var { align = 'left', getRef, className, getRootRef, style, before, after, status, children, placeholder, selectType = 'default', multiline, disabled, fetching, labelTextTestId, searchable, accessible } = _param, restProps = _object_without_properties(_param, [
26
- "align",
27
- "getRef",
26
+ var { style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, align = 'left', getRef, before, after, status, children, placeholder, selectType = 'default', multiline, fetching, labelTextTestId, searchable, accessible, slotProps } = _param, restProps = _object_without_properties(_param, [
27
+ "style",
28
28
  "className",
29
29
  "getRootRef",
30
- "style",
30
+ "align",
31
+ "getRef",
31
32
  "before",
32
33
  "after",
33
34
  "status",
@@ -35,29 +36,45 @@ const sizeYClassNames = {
35
36
  "placeholder",
36
37
  "selectType",
37
38
  "multiline",
38
- "disabled",
39
39
  "fetching",
40
40
  "labelTextTestId",
41
41
  "searchable",
42
- "accessible"
42
+ "accessible",
43
+ "slotProps"
43
44
  ]);
44
45
  const { sizeY = 'none' } = useAdaptivity();
46
+ const _useMergeProps = useMergeProps({
47
+ style: rootStyle,
48
+ className: rootClassName,
49
+ getRootRef: rootGetRootRef
50
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root), { style, className, getRootRef } = _useMergeProps, rootRest = _object_without_properties(_useMergeProps, [
51
+ "style",
52
+ "className",
53
+ "getRootRef"
54
+ ]);
55
+ const _useMergeProps1 = useMergeProps(_object_spread({
56
+ getRootRef: getRef
57
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input), { className: inputClassName, value, readOnly, disabled } = _useMergeProps1, inputProps = _object_without_properties(_useMergeProps1, [
58
+ "className",
59
+ "value",
60
+ "readOnly",
61
+ "disabled"
62
+ ]);
45
63
  const title = children || placeholder;
46
- const showLabelOrPlaceholder = !Boolean(restProps.value);
64
+ const showLabelOrPlaceholder = !Boolean(value);
47
65
  const handleRootRef = useExternRef(getRootRef);
48
66
  const focusWithin = useFocusWithin(handleRootRef);
49
- const inputReadonly = restProps.readOnly || disabled && fetching;
50
- const input = /*#__PURE__*/ _jsx(Text, _object_spread_props(_object_spread({
51
- type: "text"
52
- }, restProps), {
67
+ const inputReadonly = readOnly || disabled && fetching;
68
+ const input = /*#__PURE__*/ _jsx(Text, _object_spread({
69
+ type: "text",
53
70
  disabled: disabled && !fetching,
54
71
  readOnly: inputReadonly,
55
72
  Component: "input",
56
73
  normalize: false,
57
- className: classNames("vkuiCustomSelectInput__el", (restProps.readOnly || showLabelOrPlaceholder && !focusWithin) && "vkuiCustomSelectInput__elCursorPointer"),
58
- getRootRef: getRef,
59
- placeholder: children ? '' : placeholder
60
- }));
74
+ placeholder: children ? '' : placeholder,
75
+ className: classNames("vkuiCustomSelectInput__el", (readOnly || showLabelOrPlaceholder && !focusWithin) && "vkuiCustomSelectInput__elCursorPointer", inputClassName),
76
+ value: value
77
+ }, inputProps));
61
78
  const inputHidden = React.useMemo(()=>{
62
79
  if (accessible) {
63
80
  if (!searchable) {
@@ -76,16 +93,17 @@ const sizeYClassNames = {
76
93
  ]);
77
94
  const labelHidden = showLabelOrPlaceholder ? false : !inputHidden;
78
95
  const platform = usePlatform();
79
- return /*#__PURE__*/ _jsx(FormField, {
96
+ return /*#__PURE__*/ _jsx(FormField, _object_spread_props(_object_spread({
80
97
  Component: "div",
81
98
  style: style,
82
- className: classNames("vkuiCustomSelectInput__host", align === 'right' && "vkuiCustomSelectInput__alignRight", align === 'center' && "vkuiCustomSelectInput__alignCenter", !children && "vkuiCustomSelectInput__empty", multiline && "vkuiCustomSelectInput__multiline", sizeY !== 'regular' && sizeYClassNames[sizeY], before && "vkuiCustomSelectInput__hasBefore", after && "vkuiCustomSelectInput__hasAfter", inputHidden && "vkuiCustomSelectInput__inputHidden", labelHidden && "vkuiCustomSelectInput__labelHidden", accessible && "vkuiCustomSelectInput__accessible", restProps.value && "vkuiCustomSelectInput__hasInputValue", className),
99
+ className: classNames("vkuiCustomSelectInput__host", align === 'right' && "vkuiCustomSelectInput__alignRight", align === 'center' && "vkuiCustomSelectInput__alignCenter", !children && "vkuiCustomSelectInput__empty", multiline && "vkuiCustomSelectInput__multiline", sizeY !== 'regular' && sizeYClassNames[sizeY], before && "vkuiCustomSelectInput__hasBefore", after && "vkuiCustomSelectInput__hasAfter", inputHidden && "vkuiCustomSelectInput__inputHidden", labelHidden && "vkuiCustomSelectInput__labelHidden", accessible && "vkuiCustomSelectInput__accessible", value && "vkuiCustomSelectInput__hasInputValue", className),
83
100
  getRootRef: handleRootRef,
84
101
  before: before,
85
102
  after: after,
86
103
  disabled: disabled,
87
104
  mode: getFormFieldModeFromSelectType(selectType),
88
- status: status,
105
+ status: status
106
+ }, rootRest), {
89
107
  children: /*#__PURE__*/ _jsxs("div", {
90
108
  className: "vkuiCustomSelectInput__inputGroup",
91
109
  children: [
@@ -100,12 +118,12 @@ const sizeYClassNames = {
100
118
  children: title
101
119
  })
102
120
  }),
103
- restProps.readOnly && platform === 'ios' ? /*#__PURE__*/ _jsx(VisuallyHidden, {
121
+ readOnly && platform === 'ios' ? /*#__PURE__*/ _jsx(VisuallyHidden, {
104
122
  children: input
105
123
  }) : input
106
124
  ]
107
125
  })
108
- });
126
+ }));
109
127
  };
110
128
 
111
129
  //# sourceMappingURL=CustomSelectInput.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../hooks/useAdaptivity';\nimport { useExternRef } from '../../../hooks/useExternRef';\nimport { useFocusWithin } from '../../../hooks/useFocusWithin';\nimport { usePlatform } from '../../../hooks/usePlatform';\nimport { getFormFieldModeFromSelectType } from '../../../lib/select';\nimport type { HasAlign, HasRef, HasRootRef } from '../../../types';\nimport { FormField, type FormFieldProps } from '../../FormField/FormField';\nimport type { SelectType } from '../../Select/Select';\nimport { SelectTypography } from '../../SelectTypography/SelectTypography';\nimport { Text } from '../../Typography/Text/Text';\nimport { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden';\nimport styles from './CustomSelectInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface CustomSelectInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'mode' | 'type' | 'maxHeight'> {\n selectType?: SelectType;\n multiline?: boolean;\n labelTextTestId?: string;\n fetching?: boolean;\n searchable?: boolean;\n accessible?: boolean;\n}\n\n/**\n * @since 5.10.0\n * @private\n */\nexport const CustomSelectInput = ({\n align = 'left',\n getRef,\n className,\n getRootRef,\n style,\n before,\n after,\n status,\n children,\n placeholder,\n selectType = 'default',\n multiline,\n disabled,\n fetching,\n labelTextTestId,\n searchable,\n accessible,\n ...restProps\n}: CustomSelectInputProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n const title = children || placeholder;\n const showLabelOrPlaceholder = !Boolean(restProps.value);\n\n const handleRootRef = useExternRef(getRootRef);\n const focusWithin = useFocusWithin(handleRootRef);\n\n const inputReadonly = restProps.readOnly || (disabled && fetching);\n\n const input = (\n <Text\n type=\"text\"\n {...restProps}\n disabled={disabled && !fetching}\n readOnly={inputReadonly}\n Component=\"input\"\n normalize={false}\n className={classNames(\n styles.el,\n (restProps.readOnly || (showLabelOrPlaceholder && !focusWithin)) && styles.elCursorPointer,\n )}\n getRootRef={getRef}\n placeholder={children ? '' : placeholder}\n />\n );\n\n const inputHidden = React.useMemo(() => {\n if (accessible) {\n if (!searchable) {\n return true;\n }\n return !focusWithin || (inputReadonly && !fetching);\n } else {\n return false;\n }\n }, [accessible, fetching, focusWithin, inputReadonly, searchable]);\n\n const labelHidden = showLabelOrPlaceholder ? false : !inputHidden;\n\n const platform = usePlatform();\n return (\n <FormField\n Component=\"div\"\n style={style}\n className={classNames(\n styles.host,\n align === 'right' && styles.alignRight,\n align === 'center' && styles.alignCenter,\n !children && styles.empty,\n multiline && styles.multiline,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles.hasBefore,\n after && styles.hasAfter,\n inputHidden && styles.inputHidden,\n labelHidden && styles.labelHidden,\n accessible && styles.accessible,\n restProps.value && styles.hasInputValue,\n className,\n )}\n getRootRef={handleRootRef}\n before={before}\n after={after}\n disabled={disabled}\n mode={getFormFieldModeFromSelectType(selectType)}\n status={status}\n >\n <div className={styles.inputGroup}>\n <div\n className={classNames(styles.container, className)}\n tabIndex={-1}\n aria-hidden\n data-testid={labelTextTestId}\n >\n <SelectTypography selectType={selectType} className={styles.title}>\n {title}\n </SelectTypography>\n </div>\n {/* Чтобы отключить autosuggestion в iOS, тултипы которого начинают всплывать даже когда input\n * в режиме readonly, мы оборачиваем инпут в VisuallyHidden.\n * Тултипы появляются при каждом клике на input.\n * смотри: https://github.com/VKCOM/VKUI/issues/6205\n *\n * Достаточно не дать пользователю кликнуть по инпуту.\n * Делаем это только для режима read-only. Потому что проблема именно в режиме read-only.\n * Обертка вокруг инпута обрабатывает клики и передаёт фокус, так что на взаимодействии с инпутом это никак не скажется.\n **/}\n {restProps.readOnly && platform === 'ios' ? (\n <VisuallyHidden>{input}</VisuallyHidden>\n ) : (\n input\n )}\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusWithin","usePlatform","getFormFieldModeFromSelectType","FormField","SelectTypography","Text","VisuallyHidden","sizeYClassNames","none","compact","CustomSelectInput","align","getRef","className","getRootRef","style","before","after","status","children","placeholder","selectType","multiline","disabled","fetching","labelTextTestId","searchable","accessible","restProps","sizeY","title","showLabelOrPlaceholder","Boolean","value","handleRootRef","focusWithin","inputReadonly","readOnly","input","type","Component","normalize","inputHidden","useMemo","labelHidden","platform","mode","div","tabIndex","aria-hidden","data-testid"],"mappings":"AAAA;;;;;AACA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,kCAA+B;AAC7D,SAASC,YAAY,QAAQ,iCAA8B;AAC3D,SAASC,cAAc,QAAQ,mCAAgC;AAC/D,SAASC,WAAW,QAAQ,gCAA6B;AACzD,SAASC,8BAA8B,QAAQ,yBAAsB;AAErE,SAASC,SAAS,QAA6B,+BAA4B;AAE3E,SAASC,gBAAgB,QAAQ,6CAA0C;AAC3E,SAASC,IAAI,QAAQ,gCAA6B;AAClD,SAASC,cAAc,QAAQ,yCAAsC;AAGrE,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAgBA;;;CAGC,GACD,OAAO,MAAMC,oBAAoB;QAAC,EAChCC,QAAQ,MAAM,EACdC,MAAM,EACNC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,QAAQ,EACRC,WAAW,EACXC,aAAa,SAAS,EACtBC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,eAAe,EACfC,UAAU,EACVC,UAAU,EAEa,WADpBC;QAjBHjB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAG/B;IAE3B,MAAMgC,QAAQX,YAAYC;IAC1B,MAAMW,yBAAyB,CAACC,QAAQJ,UAAUK,KAAK;IAEvD,MAAMC,gBAAgBnC,aAAae;IACnC,MAAMqB,cAAcnC,eAAekC;IAEnC,MAAME,gBAAgBR,UAAUS,QAAQ,IAAKd,YAAYC;IAEzD,MAAMc,sBACJ,KAACjC;QACCkC,MAAK;OACDX;QACJL,UAAUA,YAAY,CAACC;QACvBa,UAAUD;QACVI,WAAU;QACVC,WAAW;QACX5B,WAAWhB,wCAET,AAAC+B,CAAAA,UAAUS,QAAQ,IAAKN,0BAA0B,CAACI,WAAW;QAEhErB,YAAYF;QACZQ,aAAaD,WAAW,KAAKC;;IAIjC,MAAMsB,cAAc9C,MAAM+C,OAAO,CAAC;QAChC,IAAIhB,YAAY;YACd,IAAI,CAACD,YAAY;gBACf,OAAO;YACT;YACA,OAAO,CAACS,eAAgBC,iBAAiB,CAACZ;QAC5C,OAAO;YACL,OAAO;QACT;IACF,GAAG;QAACG;QAAYH;QAAUW;QAAaC;QAAeV;KAAW;IAEjE,MAAMkB,cAAcb,yBAAyB,QAAQ,CAACW;IAEtD,MAAMG,WAAW5C;IACjB,qBACE,KAACE;QACCqC,WAAU;QACVzB,OAAOA;QACPF,WAAWhB,0CAETc,UAAU,gDACVA,UAAU,kDACV,CAACQ,4CACDG,iDACAO,UAAU,aAAatB,eAAe,CAACsB,MAAM,EAC7Cb,8CACAC,4CACAyB,qDACAE,qDACAjB,mDACAC,UAAUK,KAAK,4CACfpB;QAEFC,YAAYoB;QACZlB,QAAQA;QACRC,OAAOA;QACPM,UAAUA;QACVuB,MAAM5C,+BAA+BmB;QACrCH,QAAQA;kBAER,cAAA,MAAC6B;YAAIlC,SAAS;;8BACZ,KAACkC;oBACClC,WAAWhB,+CAA6BgB;oBACxCmC,UAAU,CAAC;oBACXC,aAAW;oBACXC,eAAazB;8BAEb,cAAA,KAACrB;wBAAiBiB,YAAYA;wBAAYR,SAAS;kCAChDiB;;;gBAYJF,UAAUS,QAAQ,IAAIQ,aAAa,sBAClC,KAACvC;8BAAgBgC;qBAEjBA;;;;AAKV,EAAE"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../../hooks/useAdaptivity';\nimport { useExternRef } from '../../../hooks/useExternRef';\nimport { useFocusWithin } from '../../../hooks/useFocusWithin';\nimport { useMergeProps } from '../../../hooks/useMergeProps';\nimport { usePlatform } from '../../../hooks/usePlatform';\nimport { getFormFieldModeFromSelectType } from '../../../lib/select';\nimport type { HasAlign, HasDataAttribute, HasRef, HasRootRef } from '../../../types';\nimport { FormField, type FormFieldProps } from '../../FormField/FormField';\nimport type { SelectType } from '../../Select/Select';\nimport { SelectTypography } from '../../SelectTypography/SelectTypography';\nimport { Text } from '../../Typography/Text/Text';\nimport { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden';\nimport styles from './CustomSelectInput.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface CustomSelectInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'mode' | 'type' | 'maxHeight'> {\n slotProps?: {\n input?: React.InputHTMLAttributes<HTMLInputElement> &\n HasRootRef<HTMLInputElement> &\n HasDataAttribute;\n root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> &\n HasRootRef<HTMLDivElement> &\n HasDataAttribute;\n };\n selectType?: SelectType;\n multiline?: boolean;\n labelTextTestId?: string;\n fetching?: boolean;\n searchable?: boolean;\n accessible?: boolean;\n}\n\n/**\n * @since 5.10.0\n * @private\n */\nexport const CustomSelectInput = ({\n style: rootStyle,\n className: rootClassName,\n getRootRef: rootGetRootRef,\n align = 'left',\n getRef,\n before,\n after,\n status,\n children,\n placeholder,\n selectType = 'default',\n multiline,\n fetching,\n labelTextTestId,\n searchable,\n accessible,\n\n slotProps,\n ...restProps\n}: CustomSelectInputProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n const { style, className, getRootRef, ...rootRest } = useMergeProps(\n {\n style: rootStyle,\n className: rootClassName,\n getRootRef: rootGetRootRef,\n },\n slotProps?.root,\n );\n\n const {\n className: inputClassName,\n value,\n readOnly,\n disabled,\n ...inputProps\n } = useMergeProps(\n {\n getRootRef: getRef,\n ...restProps,\n },\n slotProps?.input,\n );\n\n const title = children || placeholder;\n const showLabelOrPlaceholder = !Boolean(value);\n\n const handleRootRef = useExternRef(getRootRef);\n const focusWithin = useFocusWithin(handleRootRef);\n\n const inputReadonly = readOnly || (disabled && fetching);\n\n const input = (\n <Text\n type=\"text\"\n disabled={disabled && !fetching}\n readOnly={inputReadonly}\n Component=\"input\"\n normalize={false}\n placeholder={children ? '' : placeholder}\n className={classNames(\n styles.el,\n (readOnly || (showLabelOrPlaceholder && !focusWithin)) && styles.elCursorPointer,\n inputClassName,\n )}\n value={value}\n {...inputProps}\n />\n );\n\n const inputHidden = React.useMemo(() => {\n if (accessible) {\n if (!searchable) {\n return true;\n }\n return !focusWithin || (inputReadonly && !fetching);\n } else {\n return false;\n }\n }, [accessible, fetching, focusWithin, inputReadonly, searchable]);\n\n const labelHidden = showLabelOrPlaceholder ? false : !inputHidden;\n\n const platform = usePlatform();\n return (\n <FormField\n Component=\"div\"\n style={style}\n className={classNames(\n styles.host,\n align === 'right' && styles.alignRight,\n align === 'center' && styles.alignCenter,\n !children && styles.empty,\n multiline && styles.multiline,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles.hasBefore,\n after && styles.hasAfter,\n inputHidden && styles.inputHidden,\n labelHidden && styles.labelHidden,\n accessible && styles.accessible,\n value && styles.hasInputValue,\n className,\n )}\n getRootRef={handleRootRef}\n before={before}\n after={after}\n disabled={disabled}\n mode={getFormFieldModeFromSelectType(selectType)}\n status={status}\n {...rootRest}\n >\n <div className={styles.inputGroup}>\n <div\n className={classNames(styles.container, className)}\n tabIndex={-1}\n aria-hidden\n data-testid={labelTextTestId}\n >\n <SelectTypography selectType={selectType} className={styles.title}>\n {title}\n </SelectTypography>\n </div>\n {/* Чтобы отключить autosuggestion в iOS, тултипы которого начинают всплывать даже когда input\n * в режиме readonly, мы оборачиваем инпут в VisuallyHidden.\n * Тултипы появляются при каждом клике на input.\n * смотри: https://github.com/VKCOM/VKUI/issues/6205\n *\n * Достаточно не дать пользователю кликнуть по инпуту.\n * Делаем это только для режима read-only. Потому что проблема именно в режиме read-only.\n * Обертка вокруг инпута обрабатывает клики и передаёт фокус, так что на взаимодействии с инпутом это никак не скажется.\n **/}\n {readOnly && platform === 'ios' ? <VisuallyHidden>{input}</VisuallyHidden> : input}\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","useFocusWithin","useMergeProps","usePlatform","getFormFieldModeFromSelectType","FormField","SelectTypography","Text","VisuallyHidden","sizeYClassNames","none","compact","CustomSelectInput","style","rootStyle","className","rootClassName","getRootRef","rootGetRootRef","align","getRef","before","after","status","children","placeholder","selectType","multiline","fetching","labelTextTestId","searchable","accessible","slotProps","restProps","sizeY","root","rootRest","input","inputClassName","value","readOnly","disabled","inputProps","title","showLabelOrPlaceholder","Boolean","handleRootRef","focusWithin","inputReadonly","type","Component","normalize","inputHidden","useMemo","labelHidden","platform","mode","div","tabIndex","aria-hidden","data-testid"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { type SelectProps } from './CustomSelect';
3
3
  import { type CustomSelectOptionInterface } from './types';
4
4
  export declare const findIndexAfter: (options?: CustomSelectOptionInterface[], startIndex?: number) => number;
5
5
  export declare const findIndexBefore: (options?: CustomSelectOptionInterface[], endIndex?: number) => number;
6
+ export declare const checkDeprecatedProps: ({ getRef, getSelectInputRef, nativeSelectTestId, }: Pick<SelectProps, "getRef" | "getSelectInputRef" | "nativeSelectTestId" | "onInputChange">) => void;
6
7
  export declare const checkOptionsValueType: <T extends CustomSelectOptionInterface>(options: T[]) => void;
7
8
  export declare const checkMixControlledAndUncontrolledState: (oldIsControlled: boolean, newIsControlled: boolean) => void;
8
9
  export declare function findSelectedIndex<T extends CustomSelectOptionInterface>(options: T[] | undefined, value: SelectValue): number;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D,eAAO,MAAM,cAAc,GAAI,UAAS,2BAA2B,EAAO,EAAE,mBAAe,WAK1F,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAS,2BAA2B,EAAO,EAC3C,WAAU,MAAuB,WAelC,CAAC;AAGF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,2BAA2B,EAAE,SAAS,CAAC,EAAE,SAOxF,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,iBAAiB,OAAO,EACxB,iBAAiB,OAAO,SAczB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,2BAA2B,EACrE,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,KAAK,EAAE,WAAW,UAWnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,2BAA2B,EACpE,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,KAAK,EAAE,WAAW,GACjB,CAAC,GAAG,IAAI,CAMV;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,2BAA2B,EAC1D,SAAS,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAClC,YAAY,MAAM,EAClB,UAAU,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAKrC,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,2BAA2B,EAClF,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,WAAW,EAAE,WAAW,UAIzB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/CustomSelect/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE3D,eAAO,MAAM,cAAc,GAAI,UAAS,2BAA2B,EAAO,EAAE,mBAAe,WAK1F,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAS,2BAA2B,EAAO,EAC3C,WAAU,MAAuB,WAelC,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAAI,oDAIlC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,eAAe,CAAC,SAiB5F,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,2BAA2B,EAAE,SAAS,CAAC,EAAE,SAOxF,CAAC;AAEF,eAAO,MAAM,sCAAsC,GACjD,iBAAiB,OAAO,EACxB,iBAAiB,OAAO,SAczB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,2BAA2B,EACrE,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,KAAK,EAAE,WAAW,UAWnB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,2BAA2B,EACpE,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,KAAK,EAAE,WAAW,GACjB,CAAC,GAAG,IAAI,CAMV;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,2BAA2B,EAC1D,SAAS,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAClC,YAAY,MAAM,EAClB,UAAU,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAKrC,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,2BAA2B,EAClF,OAAO,EAAE,CAAC,EAAE,YAAK,EACjB,WAAW,EAAE,WAAW,UAIzB"}
@@ -22,6 +22,17 @@ export const findIndexBefore = (options = [], endIndex = options.length)=>{
22
22
  return result;
23
23
  };
24
24
  const warn = warnOnce('CustomSelect');
25
+ export const checkDeprecatedProps = ({ getRef, getSelectInputRef, nativeSelectTestId })=>{
26
+ /* istanbul ignore if: не проверяем в тестах */ if (getRef) {
27
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ select: { getRootRef: ... } }`');
28
+ }
29
+ /* istanbul ignore if: не проверяем в тестах */ if (getSelectInputRef) {
30
+ warn('Свойство `getSelectInputRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
31
+ }
32
+ /* istanbul ignore if: не проверяем в тестах */ if (nativeSelectTestId) {
33
+ warn("Свойство `nativeSelectTestId` устаревшее, используйте `slotProps={ select: { 'data-testid': ... } }`");
34
+ }
35
+ };
25
36
  export const checkOptionsValueType = (options)=>{
26
37
  if (new Set(options.map((item)=>typeof item.value)).size > 1) {
27
38
  warn('Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.', 'error');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/CustomSelect/helpers.ts"],"sourcesContent":["import { getTextFromChildren } from '../../lib/children';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { NOT_SELECTED, type SelectValue } from '../NativeSelect/NativeSelect';\nimport { type SelectProps } from './CustomSelect';\nimport { type CustomSelectOptionInterface } from './types';\n\nexport const 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\nexport const 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};\nconst warn = warnOnce('CustomSelect');\n\nexport const 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\nexport const checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nexport function findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\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\nexport function getOptionByValue<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n): T | null {\n const index = findSelectedIndex(options, value);\n if (index === -1) {\n return null;\n }\n return options[index];\n}\n\nexport const 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 function calculateInputValueFromOptions<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n selectValue: SelectValue,\n) {\n const selectedOption = getOptionByValue(options, selectValue);\n return selectedOption ? getTextFromChildren(selectedOption.label) : '';\n}\n"],"names":["getTextFromChildren","warnOnce","NOT_SELECTED","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","findSelectedIndex","CUSTOM","Number","getOptionByValue","index","filter","inputValue","filterFn","calculateInputValueFromOptions","selectValue","selectedOption","label"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,wBAAqB;AACzD,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,YAAY,QAA0B,kCAA+B;AAI9E,OAAO,MAAMC,iBAAiB,CAACC,UAAyC,EAAE,EAAEC,aAAa,CAAC,CAAC;IACzF,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CAAC,CAACC,QAAQC,IAAMA,IAAIJ,cAAc,CAACG,OAAOE,QAAQ;AAC5E,EAAE;AAEF,OAAO,MAAMC,kBAAkB,CAC7BP,UAAyC,EAAE,EAC3CQ,WAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACD,OAAOE,QAAQ,EAAE;YACpBG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT,EAAE;AACF,MAAMC,OAAOb,SAAS;AAEtB,OAAO,MAAMc,wBAAwB,CAAwCX;IAC3E,IAAI,IAAIY,IAAIZ,QAAQa,GAAG,CAAC,CAACC,OAAS,OAAOA,KAAKC,KAAK,GAAGC,IAAI,GAAG,GAAG;QAC9DN,KACE,+FACA;IAEJ;AACF,EAAE;AAEF,OAAO,MAAMO,yCAAyC,CACpDC,iBACAC;IAEA,IAAI,CAACD,mBAAmBC,iBAAiB;QACvCT,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;IACA,IAAIQ,mBAAmB,CAACC,iBAAiB;QACvCT,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;AACF,EAAE;AAEF,OAAO,SAASU,kBACdpB,UAAe,EAAE,EACjBe,KAAkB;IAElB,IAAIA,UAAUjB,aAAauB,MAAM,EAAE;QACjC,OAAO,CAAC;IACV;QAEErB;IADF,OACEA,CAAAA,qBAAAA,QAAQG,SAAS,CAAC,CAACW;QACjBC,QAAQ,OAAOD,KAAKC,KAAK,KAAK,WAAWO,OAAOP,SAASA;QACzD,OAAOD,KAAKC,KAAK,KAAKA;IACxB,gBAHAf,gCAAAA,qBAGM,CAAC;AAEX;AAEA,OAAO,SAASuB,iBACdvB,UAAe,EAAE,EACjBe,KAAkB;IAElB,MAAMS,QAAQJ,kBAAkBpB,SAASe;IACzC,IAAIS,UAAU,CAAC,GAAG;QAChB,OAAO;IACT;IACA,OAAOxB,OAAO,CAACwB,MAAM;AACvB;AAEA,OAAO,MAAMC,SAAS,CACpBzB,SACA0B,YACAC;IAEA,OAAO,OAAOA,aAAa,aACvB3B,QAAQyB,MAAM,CAAC,CAACrB,SAAWuB,SAASD,YAAYtB,WAChDJ;AACN,EAAE;AAEF,OAAO,SAAS4B,+BACd5B,UAAe,EAAE,EACjB6B,WAAwB;IAExB,MAAMC,iBAAiBP,iBAAiBvB,SAAS6B;IACjD,OAAOC,iBAAiBlC,oBAAoBkC,eAAeC,KAAK,IAAI;AACtE"}
1
+ {"version":3,"sources":["../../../src/components/CustomSelect/helpers.ts"],"sourcesContent":["import { getTextFromChildren } from '../../lib/children';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { NOT_SELECTED, type SelectValue } from '../NativeSelect/NativeSelect';\nimport { type SelectProps } from './CustomSelect';\nimport { type CustomSelectOptionInterface } from './types';\n\nexport const 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\nexport const 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};\nconst warn = warnOnce('CustomSelect');\n\nexport const checkDeprecatedProps = ({\n getRef,\n getSelectInputRef,\n nativeSelectTestId,\n}: Pick<SelectProps, 'getRef' | 'getSelectInputRef' | 'nativeSelectTestId' | 'onInputChange'>) => {\n /* istanbul ignore if: не проверяем в тестах */\n if (getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ select: { getRootRef: ... } }`');\n }\n /* istanbul ignore if: не проверяем в тестах */\n if (getSelectInputRef) {\n warn(\n 'Свойство `getSelectInputRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`',\n );\n }\n /* istanbul ignore if: не проверяем в тестах */\n if (nativeSelectTestId) {\n warn(\n \"Свойство `nativeSelectTestId` устаревшее, используйте `slotProps={ select: { 'data-testid': ... } }`\",\n );\n }\n};\n\nexport const 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\nexport const checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nexport function findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\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\nexport function getOptionByValue<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n): T | null {\n const index = findSelectedIndex(options, value);\n if (index === -1) {\n return null;\n }\n return options[index];\n}\n\nexport const 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 function calculateInputValueFromOptions<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n selectValue: SelectValue,\n) {\n const selectedOption = getOptionByValue(options, selectValue);\n return selectedOption ? getTextFromChildren(selectedOption.label) : '';\n}\n"],"names":["getTextFromChildren","warnOnce","NOT_SELECTED","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkDeprecatedProps","getRef","getSelectInputRef","nativeSelectTestId","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","findSelectedIndex","CUSTOM","Number","getOptionByValue","index","filter","inputValue","filterFn","calculateInputValueFromOptions","selectValue","selectedOption","label"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,wBAAqB;AACzD,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SAASC,YAAY,QAA0B,kCAA+B;AAI9E,OAAO,MAAMC,iBAAiB,CAACC,UAAyC,EAAE,EAAEC,aAAa,CAAC,CAAC;IACzF,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CAAC,CAACC,QAAQC,IAAMA,IAAIJ,cAAc,CAACG,OAAOE,QAAQ;AAC5E,EAAE;AAEF,OAAO,MAAMC,kBAAkB,CAC7BP,UAAyC,EAAE,EAC3CQ,WAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACD,OAAOE,QAAQ,EAAE;YACpBG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT,EAAE;AACF,MAAMC,OAAOb,SAAS;AAEtB,OAAO,MAAMc,uBAAuB,CAAC,EACnCC,MAAM,EACNC,iBAAiB,EACjBC,kBAAkB,EACyE;IAC3F,6CAA6C,GAC7C,IAAIF,QAAQ;QACVF,KAAK;IACP;IACA,6CAA6C,GAC7C,IAAIG,mBAAmB;QACrBH,KACE;IAEJ;IACA,6CAA6C,GAC7C,IAAII,oBAAoB;QACtBJ,KACE;IAEJ;AACF,EAAE;AAEF,OAAO,MAAMK,wBAAwB,CAAwCf;IAC3E,IAAI,IAAIgB,IAAIhB,QAAQiB,GAAG,CAAC,CAACC,OAAS,OAAOA,KAAKC,KAAK,GAAGC,IAAI,GAAG,GAAG;QAC9DV,KACE,+FACA;IAEJ;AACF,EAAE;AAEF,OAAO,MAAMW,yCAAyC,CACpDC,iBACAC;IAEA,IAAI,CAACD,mBAAmBC,iBAAiB;QACvCb,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;IACA,IAAIY,mBAAmB,CAACC,iBAAiB;QACvCb,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;AACF,EAAE;AAEF,OAAO,SAASc,kBACdxB,UAAe,EAAE,EACjBmB,KAAkB;IAElB,IAAIA,UAAUrB,aAAa2B,MAAM,EAAE;QACjC,OAAO,CAAC;IACV;QAEEzB;IADF,OACEA,CAAAA,qBAAAA,QAAQG,SAAS,CAAC,CAACe;QACjBC,QAAQ,OAAOD,KAAKC,KAAK,KAAK,WAAWO,OAAOP,SAASA;QACzD,OAAOD,KAAKC,KAAK,KAAKA;IACxB,gBAHAnB,gCAAAA,qBAGM,CAAC;AAEX;AAEA,OAAO,SAAS2B,iBACd3B,UAAe,EAAE,EACjBmB,KAAkB;IAElB,MAAMS,QAAQJ,kBAAkBxB,SAASmB;IACzC,IAAIS,UAAU,CAAC,GAAG;QAChB,OAAO;IACT;IACA,OAAO5B,OAAO,CAAC4B,MAAM;AACvB;AAEA,OAAO,MAAMC,SAAS,CACpB7B,SACA8B,YACAC;IAEA,OAAO,OAAOA,aAAa,aACvB/B,QAAQ6B,MAAM,CAAC,CAACzB,SAAW2B,SAASD,YAAY1B,WAChDJ;AACN,EAAE;AAEF,OAAO,SAASgC,+BACdhC,UAAe,EAAE,EACjBiC,WAAwB;IAExB,MAAMC,iBAAiBP,iBAAiB3B,SAASiC;IACjD,OAAOC,iBAAiBtC,oBAAoBsC,eAAeC,KAAK,IAAI;AACtE"}
@@ -3,6 +3,9 @@ import type { HTMLAttributesWithRootRef } from '../../types';
3
3
  export type DivProps = HTMLAttributesWithRootRef<HTMLDivElement>;
4
4
  /**
5
5
  * @see https://vkui.io/components/div
6
+ *
7
+ * @deprecated Since 7.9.0. Будет удалено в **VKUI v9**.
8
+ * Используйте компонент `Box`.
6
9
  */
7
10
  export declare const Div: (props: DivProps) => React.ReactNode;
8
11
  //# sourceMappingURL=Div.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Div.d.ts","sourceRoot":"","sources":["../../../src/components/Div/Div.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,MAAM,QAAQ,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,GAAG,GAAI,OAAO,QAAQ,KAAG,KAAK,CAAC,SAE3C,CAAC"}
1
+ {"version":3,"file":"Div.d.ts","sourceRoot":"","sources":["../../../src/components/Div/Div.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,MAAM,QAAQ,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;AAIjE;;;;;GAKG;AACH,eAAO,MAAM,GAAG,GAAI,OAAO,QAAQ,KAAG,KAAK,CAAC,SAM3C,CAAC"}
@@ -1,11 +1,21 @@
1
1
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
+ import { warnOnce } from "../../lib/warnOnce.js";
4
5
  import { RootComponent } from "../RootComponent/RootComponent.js";
6
+ const warn = warnOnce('Div');
5
7
  /**
6
8
  * @see https://vkui.io/components/div
7
- */ export const Div = (props)=>/*#__PURE__*/ _jsx(RootComponent, _object_spread({
9
+ *
10
+ * @deprecated Since 7.9.0. Будет удалено в **VKUI v9**.
11
+ * Используйте компонент `Box`.
12
+ */ export const Div = (props)=>{
13
+ if (process.env.NODE_ENV === 'development') {
14
+ warn('Компонент Div устарел, используйте компонент Box в качестве альтернативы.');
15
+ }
16
+ return /*#__PURE__*/ _jsx(RootComponent, _object_spread({
8
17
  baseClassName: "vkuiDiv__host"
9
18
  }, props));
19
+ };
10
20
 
11
21
  //# sourceMappingURL=Div.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Div/Div.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Div.module.css';\n\nexport type DivProps = HTMLAttributesWithRootRef<HTMLDivElement>;\n\n/**\n * @see https://vkui.io/components/div\n */\nexport const Div = (props: DivProps): React.ReactNode => (\n <RootComponent baseClassName={styles.host} {...props} />\n);\n"],"names":["React","RootComponent","Div","props","baseClassName"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,aAAa,QAAQ,oCAAiC;AAK/D;;CAEC,GACD,OAAO,MAAMC,MAAM,CAACC,sBAClB,KAACF;QAAcG,aAAa;OAAmBD,QAC/C"}
1
+ {"version":3,"sources":["../../../src/components/Div/Div.tsx"],"sourcesContent":["import * as React from 'react';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Div.module.css';\n\nexport type DivProps = HTMLAttributesWithRootRef<HTMLDivElement>;\n\nconst warn = warnOnce('Div');\n\n/**\n * @see https://vkui.io/components/div\n *\n * @deprecated Since 7.9.0. Будет удалено в **VKUI v9**.\n * Используйте компонент `Box`.\n */\nexport const Div = (props: DivProps): React.ReactNode => {\n if (process.env.NODE_ENV === 'development') {\n warn('Компонент Div устарел, используйте компонент Box в качестве альтернативы.');\n }\n\n return <RootComponent baseClassName={styles.host} {...props} />;\n};\n"],"names":["React","warnOnce","RootComponent","warn","Div","props","process","env","NODE_ENV","baseClassName"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,aAAa,QAAQ,oCAAiC;AAK/D,MAAMC,OAAOF,SAAS;AAEtB;;;;;CAKC,GACD,OAAO,MAAMG,MAAM,CAACC;IAClB,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CL,KAAK;IACP;IAEA,qBAAO,KAACD;QAAcO,aAAa;OAAmBJ;AACxD,EAAE"}
@@ -1,10 +1,23 @@
1
1
  import * as React from 'react';
2
- import type { HasRef, HasRootRef } from '../../types';
2
+ import type { HasDataAttribute, HasRootRef } from '../../types';
3
3
  import { type VKUIButtonProps } from '../Button/Button';
4
- export interface FileProps extends Omit<VKUIButtonProps, 'type'>, Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>, HasRef<HTMLInputElement>, HasRootRef<HTMLElement> {
4
+ export interface FileProps extends Omit<VKUIButtonProps, 'type'>, Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>, HasRootRef<HTMLElement> {
5
+ /**
6
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
7
+ */
8
+ getRef?: React.Ref<HTMLInputElement>;
9
+ /**
10
+ * Свойства, которые можно прокинуть внутрь компонента:
11
+ * - `root`: свойства для прокидывания в корень компонента;
12
+ * - `input`: свойства для прокидывания в скрытый `input`.
13
+ */
14
+ slotProps?: {
15
+ root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> & HasRootRef<HTMLLabelElement> & HasDataAttribute;
16
+ input?: Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> & HasRootRef<HTMLInputElement> & HasDataAttribute;
17
+ };
5
18
  }
6
19
  /**
7
20
  * @see https://vkui.io/components/file
8
21
  */
9
- export declare const File: ({ children, align, size, mode, stretched, before, after, loading, className, style, getRef, getRootRef, appearance, ...restProps }: FileProps) => React.ReactNode;
22
+ export declare const File: ({ getRootRef, className, style, children, align, size, mode, stretched, before, after, loading, getRef, appearance, slotProps, ...restProps }: FileProps) => React.ReactNode;
10
23
  //# sourceMappingURL=File.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../../src/components/File/File.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EACnC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,EAClE,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,WAAW,CAAC;CAAG;AAE9B;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,oIAelB,SAAS,KAAG,KAAK,CAAC,SAqBpB,CAAC"}
1
+ {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../../src/components/File/File.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAU,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKhE,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EACnC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,EAClE,UAAU,CAAC,WAAW,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAClE,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;QACnB,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GACxE,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,+IAgBlB,SAAS,KAAG,KAAK,CAAC,SAkCpB,CAAC"}