@vkontakte/vkui 6.3.1 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
  2. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  3. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js +3 -1
  4. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  5. package/dist/cjs/components/ChipsInputBase/types.d.ts +1 -1
  6. package/dist/cjs/components/ChipsInputBase/types.d.ts.map +1 -1
  7. package/dist/cjs/components/ChipsInputBase/types.js.map +1 -1
  8. package/dist/cjs/components/Clickable/Clickable.d.ts.map +1 -1
  9. package/dist/cjs/components/Clickable/Clickable.js +4 -3
  10. package/dist/cjs/components/Clickable/Clickable.js.map +1 -1
  11. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  12. package/dist/cjs/components/CustomSelect/CustomSelect.js +1 -2
  13. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  14. package/dist/cjs/components/FormField/FormField.d.ts +5 -1
  15. package/dist/cjs/components/FormField/FormField.d.ts.map +1 -1
  16. package/dist/cjs/components/FormField/FormField.js +26 -10
  17. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  18. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  19. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +4 -4
  20. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  21. package/dist/cjs/components/Input/Input.d.ts +1 -1
  22. package/dist/cjs/components/Input/Input.d.ts.map +1 -1
  23. package/dist/cjs/components/Input/Input.js.map +1 -1
  24. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.d.ts +20 -1
  25. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  26. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js +109 -25
  27. package/dist/cjs/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  28. package/dist/cjs/components/Select/Select.d.ts.map +1 -1
  29. package/dist/cjs/components/Select/Select.js +2 -1
  30. package/dist/cjs/components/Select/Select.js.map +1 -1
  31. package/dist/cjs/components/Snackbar/Snackbar.d.ts +3 -1
  32. package/dist/cjs/components/Snackbar/Snackbar.d.ts.map +1 -1
  33. package/dist/cjs/components/Snackbar/Snackbar.js +4 -3
  34. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  35. package/dist/cjs/components/Snackbar/types.d.ts +1 -0
  36. package/dist/cjs/components/Snackbar/types.d.ts.map +1 -1
  37. package/dist/cjs/components/Snackbar/utils.d.ts.map +1 -1
  38. package/dist/cjs/components/Snackbar/utils.js +7 -3
  39. package/dist/cjs/components/Snackbar/utils.js.map +1 -1
  40. package/dist/cjs/components/Textarea/Textarea.d.ts +1 -1
  41. package/dist/cjs/components/Textarea/Textarea.d.ts.map +1 -1
  42. package/dist/cjs/components/Textarea/Textarea.js +1 -3
  43. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  44. package/dist/cjs/components/Tooltip/Tooltip.d.ts +5 -1
  45. package/dist/cjs/components/Tooltip/Tooltip.d.ts.map +1 -1
  46. package/dist/cjs/components/Tooltip/Tooltip.js +3 -2
  47. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  48. package/dist/cjs/index.d.ts +2 -2
  49. package/dist/cjs/index.d.ts.map +1 -1
  50. package/dist/cjs/index.js +3 -0
  51. package/dist/cjs/index.js.map +1 -1
  52. package/dist/cjs/lib/animation/useCSSKeyframesAnimationController.d.ts +9 -9
  53. package/dist/cjs/lib/animation/useCSSKeyframesAnimationController.d.ts.map +1 -1
  54. package/dist/cjs/lib/animation/useCSSKeyframesAnimationController.js +31 -52
  55. package/dist/cjs/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
  56. package/dist/cjs/lib/utils.d.ts +1 -1
  57. package/dist/cjs/lib/utils.d.ts.map +1 -1
  58. package/dist/cjs/lib/utils.js +12 -9
  59. package/dist/cjs/lib/utils.js.map +1 -1
  60. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
  61. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  62. package/dist/components/ChipsInputBase/ChipsInputBase.js +3 -1
  63. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  64. package/dist/components/ChipsInputBase/types.d.ts +1 -1
  65. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  66. package/dist/components/ChipsInputBase/types.js.map +1 -1
  67. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  68. package/dist/components/Clickable/Clickable.js +4 -3
  69. package/dist/components/Clickable/Clickable.js.map +1 -1
  70. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  71. package/dist/components/CustomSelect/CustomSelect.js +1 -2
  72. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  73. package/dist/components/FormField/FormField.d.ts +5 -1
  74. package/dist/components/FormField/FormField.d.ts.map +1 -1
  75. package/dist/components/FormField/FormField.js +26 -10
  76. package/dist/components/FormField/FormField.js.map +1 -1
  77. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  78. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +4 -4
  79. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  80. package/dist/components/Input/Input.d.ts +1 -1
  81. package/dist/components/Input/Input.d.ts.map +1 -1
  82. package/dist/components/Input/Input.js.map +1 -1
  83. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts +20 -1
  84. package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  85. package/dist/components/ScreenSpinner/ScreenSpinner.js +99 -24
  86. package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  87. package/dist/components/Select/Select.d.ts.map +1 -1
  88. package/dist/components/Select/Select.js +2 -1
  89. package/dist/components/Select/Select.js.map +1 -1
  90. package/dist/components/Snackbar/Snackbar.d.ts +3 -1
  91. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  92. package/dist/components/Snackbar/Snackbar.js +4 -3
  93. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  94. package/dist/components/Snackbar/types.d.ts +1 -0
  95. package/dist/components/Snackbar/types.d.ts.map +1 -1
  96. package/dist/components/Snackbar/types.js.map +1 -1
  97. package/dist/components/Snackbar/utils.d.ts.map +1 -1
  98. package/dist/components/Snackbar/utils.js +7 -3
  99. package/dist/components/Snackbar/utils.js.map +1 -1
  100. package/dist/components/Textarea/Textarea.d.ts +1 -1
  101. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  102. package/dist/components/Textarea/Textarea.js +1 -3
  103. package/dist/components/Textarea/Textarea.js.map +1 -1
  104. package/dist/components/Tooltip/Tooltip.d.ts +5 -1
  105. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  106. package/dist/components/Tooltip/Tooltip.js +3 -2
  107. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  108. package/dist/components.css +2 -2
  109. package/dist/components.css.map +1 -1
  110. package/dist/components.js.tmp +882 -752
  111. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
  112. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  113. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +2 -1
  114. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  115. package/dist/cssm/components/ChipsInputBase/types.d.ts +1 -1
  116. package/dist/cssm/components/ChipsInputBase/types.d.ts.map +1 -1
  117. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  118. package/dist/cssm/components/Clickable/Clickable.d.ts.map +1 -1
  119. package/dist/cssm/components/Clickable/Clickable.js +4 -3
  120. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  121. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  122. package/dist/cssm/components/CustomSelect/CustomSelect.js +1 -2
  123. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  124. package/dist/cssm/components/DateInput/DateInput.module.css +1 -0
  125. package/dist/cssm/components/DateRangeInput/DateRangeInput.module.css +1 -0
  126. package/dist/cssm/components/FormField/FormField.d.ts +5 -1
  127. package/dist/cssm/components/FormField/FormField.d.ts.map +1 -1
  128. package/dist/cssm/components/FormField/FormField.js +24 -9
  129. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  130. package/dist/cssm/components/FormField/FormField.module.css +27 -4
  131. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  132. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +2 -3
  133. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  134. package/dist/cssm/components/Input/Input.d.ts +1 -1
  135. package/dist/cssm/components/Input/Input.d.ts.map +1 -1
  136. package/dist/cssm/components/Input/Input.js.map +1 -1
  137. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.d.ts +20 -1
  138. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
  139. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +86 -18
  140. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
  141. package/dist/cssm/components/ScreenSpinner/ScreenSpinner.module.css +14 -16
  142. package/dist/cssm/components/Select/Select.d.ts.map +1 -1
  143. package/dist/cssm/components/Select/Select.js +1 -1
  144. package/dist/cssm/components/Select/Select.js.map +1 -1
  145. package/dist/cssm/components/Select/Select.module.css +1 -0
  146. package/dist/cssm/components/Snackbar/Snackbar.d.ts +3 -1
  147. package/dist/cssm/components/Snackbar/Snackbar.d.ts.map +1 -1
  148. package/dist/cssm/components/Snackbar/Snackbar.js +4 -3
  149. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  150. package/dist/cssm/components/Snackbar/Snackbar.module.css +14 -1
  151. package/dist/cssm/components/Snackbar/types.d.ts +1 -0
  152. package/dist/cssm/components/Snackbar/types.d.ts.map +1 -1
  153. package/dist/cssm/components/Snackbar/types.js.map +1 -1
  154. package/dist/cssm/components/Snackbar/utils.d.ts.map +1 -1
  155. package/dist/cssm/components/Snackbar/utils.js +7 -3
  156. package/dist/cssm/components/Snackbar/utils.js.map +1 -1
  157. package/dist/cssm/components/Textarea/Textarea.d.ts +1 -1
  158. package/dist/cssm/components/Textarea/Textarea.d.ts.map +1 -1
  159. package/dist/cssm/components/Textarea/Textarea.js +1 -3
  160. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  161. package/dist/cssm/components/Tooltip/Tooltip.d.ts +5 -1
  162. package/dist/cssm/components/Tooltip/Tooltip.d.ts.map +1 -1
  163. package/dist/cssm/components/Tooltip/Tooltip.js +2 -2
  164. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  165. package/dist/cssm/index.d.ts +2 -2
  166. package/dist/cssm/index.d.ts.map +1 -1
  167. package/dist/cssm/index.js +1 -1
  168. package/dist/cssm/index.js.map +1 -1
  169. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.d.ts +9 -9
  170. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.d.ts.map +1 -1
  171. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js +31 -51
  172. package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
  173. package/dist/cssm/lib/utils.d.ts +1 -1
  174. package/dist/cssm/lib/utils.d.ts.map +1 -1
  175. package/dist/cssm/lib/utils.js +15 -7
  176. package/dist/cssm/lib/utils.js.map +1 -1
  177. package/dist/index.d.ts +2 -2
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +1 -1
  180. package/dist/index.js.map +1 -1
  181. package/dist/lib/animation/useCSSKeyframesAnimationController.d.ts +9 -9
  182. package/dist/lib/animation/useCSSKeyframesAnimationController.d.ts.map +1 -1
  183. package/dist/lib/animation/useCSSKeyframesAnimationController.js +31 -51
  184. package/dist/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
  185. package/dist/lib/utils.d.ts +1 -1
  186. package/dist/lib/utils.d.ts.map +1 -1
  187. package/dist/lib/utils.js +16 -7
  188. package/dist/lib/utils.js.map +1 -1
  189. package/dist/vkui.css +2 -2
  190. package/dist/vkui.css.map +1 -1
  191. package/dist/vkui.js.tmp +882 -752
  192. package/package.json +3 -3
  193. package/src/components/ChipsInputBase/ChipsInputBase.tsx +2 -0
  194. package/src/components/ChipsInputBase/types.ts +1 -1
  195. package/src/components/Clickable/Clickable.tsx +16 -13
  196. package/src/components/CustomSelect/CustomSelect.tsx +1 -2
  197. package/src/components/DateInput/DateInput.module.css +1 -0
  198. package/src/components/DateRangeInput/DateRangeInput.module.css +1 -0
  199. package/src/components/FormField/FormField.module.css +26 -4
  200. package/src/components/FormField/FormField.tsx +31 -16
  201. package/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx +2 -3
  202. package/src/components/Input/Input.tsx +1 -1
  203. package/src/components/ScreenSpinner/ScreenSpinner.module.css +14 -16
  204. package/src/components/ScreenSpinner/ScreenSpinner.tsx +132 -40
  205. package/src/components/Select/Select.module.css +1 -0
  206. package/src/components/Select/Select.tsx +1 -0
  207. package/src/components/Snackbar/Snackbar.module.css +14 -1
  208. package/src/components/Snackbar/Snackbar.tsx +17 -4
  209. package/src/components/Snackbar/types.ts +1 -0
  210. package/src/components/Snackbar/utils.ts +12 -4
  211. package/src/components/Textarea/Textarea.tsx +1 -2
  212. package/src/components/Tooltip/Tooltip.tsx +6 -1
  213. package/src/index.ts +5 -2
  214. package/src/lib/animation/useCSSKeyframesAnimationController.ts +46 -62
  215. package/src/lib/utils.ts +18 -9
  216. package/dist/cjs/components/Clickable/useKeyboard.d.ts +0 -5
  217. package/dist/cjs/components/Clickable/useKeyboard.d.ts.map +0 -1
  218. package/dist/cjs/components/Clickable/useKeyboard.js +0 -29
  219. package/dist/cjs/components/Clickable/useKeyboard.js.map +0 -1
  220. package/dist/cjs/vkui.js +0 -8
  221. package/dist/cjs/vkui.js.map +0 -1
  222. package/dist/components/Clickable/useKeyboard.d.ts +0 -5
  223. package/dist/components/Clickable/useKeyboard.d.ts.map +0 -1
  224. package/dist/components/Clickable/useKeyboard.js +0 -24
  225. package/dist/components/Clickable/useKeyboard.js.map +0 -1
  226. package/dist/cssm/components/Clickable/useKeyboard.d.ts +0 -5
  227. package/dist/cssm/components/Clickable/useKeyboard.d.ts.map +0 -1
  228. package/dist/cssm/components/Clickable/useKeyboard.js +0 -23
  229. package/dist/cssm/components/Clickable/useKeyboard.js.map +0 -1
  230. package/dist/cssm/vkui.js +0 -3
  231. package/dist/cssm/vkui.js.map +0 -1
  232. package/dist/vkui.js +0 -3
  233. package/dist/vkui.js.map +0 -1
  234. package/src/components/Clickable/useKeyboard.tsx +0 -26
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import type { ChipOption, ChipsInputBasePrivateProps } from './types';
3
- export declare const ChipsInputBase: <O extends ChipOption>({ getRootRef, style, className, before, after, status, mode, value, onAddChipOption, onRemoveChipOption: onRemoveChipOptionProp, renderChip, getRef, id: idProp, inputValue, placeholder, disabled, readOnly, addOnBlur, onBlur, onInputChange, ClearButton, clearButtonShown, clearButtonTestId, onClear, ...restProps }: ChipsInputBasePrivateProps<O>) => React.ReactNode;
3
+ export declare const ChipsInputBase: <O extends ChipOption>({ getRootRef, style, className, before, after, status, mode, maxHeight, value, onAddChipOption, onRemoveChipOption: onRemoveChipOptionProp, renderChip, getRef, id: idProp, inputValue, placeholder, disabled, readOnly, addOnBlur, onBlur, onInputChange, ClearButton, clearButtonShown, clearButtonTestId, onClear, ...restProps }: ChipsInputBasePrivateProps<O>) => React.ReactNode;
4
4
  //# sourceMappingURL=ChipsInputBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChipsInputBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAsB/B,OAAO,KAAK,EAAE,UAAU,EAAmB,0BAA0B,EAAc,MAAM,SAAS,CAAC;AAQnG,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,6TAiChD,0BAA0B,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,SAgOxC,CAAC"}
1
+ {"version":3,"file":"ChipsInputBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAsB/B,OAAO,KAAK,EAAE,UAAU,EAAmB,0BAA0B,EAAc,MAAM,SAAS,CAAC;AAQnG,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,wUAkChD,0BAA0B,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,SAiOxC,CAAC"}
@@ -31,7 +31,7 @@ const sizeYClassNames = {
31
31
  };
32
32
  const ChipsInputBase = (_param)=>{
33
33
  var { // FormFieldProps
34
- getRootRef, style, className, before, after, status, mode, // option
34
+ getRootRef, style, className, before, after, status, mode, maxHeight, // option
35
35
  value = _constants.DEFAULT_VALUE, onAddChipOption, onRemoveChipOption: onRemoveChipOptionProp, renderChip = _constants.renderChipDefault, // input
36
36
  getRef, id: idProp, inputValue = _constants.DEFAULT_INPUT_VALUE, placeholder, disabled, readOnly, addOnBlur, onBlur, onInputChange, // clear
37
37
  ClearButton = _FormFieldClearButton.FormFieldClearButton, clearButtonShown, clearButtonTestId, onClear } = _param, restProps = _object_without_properties._(_param, [
@@ -42,6 +42,7 @@ const ChipsInputBase = (_param)=>{
42
42
  "after",
43
43
  "status",
44
44
  "mode",
45
+ "maxHeight",
45
46
  "value",
46
47
  "onAddChipOption",
47
48
  "onRemoveChipOption",
@@ -197,6 +198,7 @@ const ChipsInputBase = (_param)=>{
197
198
  status: status,
198
199
  mode: mode,
199
200
  className: className,
201
+ maxHeight: maxHeight,
200
202
  onClick: disabled ? undefined : handleRootClick,
201
203
  children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
202
204
  className: (0, _vkjs.classNames)("vkuiChipsInputBase", sizeY !== 'regular' && sizeYClassNames[sizeY], withPlaceholder && "vkuiChipsInputBase--hasPlaceholder"),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { getHorizontalFocusGoTo, Keys } from '../../lib/accessibility';\nimport {\n contains as checkTargetIsInputEl,\n contains,\n getActiveElementByAnotherElement,\n} from '../../lib/dom';\nimport { FormField } from '../FormField/FormField';\nimport { FormFieldClearButton } from '../FormFieldClearButton/FormFieldClearButton';\nimport { Text } from '../Typography/Text/Text';\nimport { DEFAULT_INPUT_VALUE, DEFAULT_VALUE, renderChipDefault } from './constants';\nimport {\n getChipOptionIndexByHTMLElement,\n getChipOptionIndexByValueProp,\n getChipOptionValueByHTMLElement,\n getNextChipOptionIndexByNavigateToProp,\n isInputValueEmpty,\n} from './helpers';\nimport type { ChipOption, ChipOptionValue, ChipsInputBasePrivateProps, NavigateTo } from './types';\nimport styles from './ChipsInputBase.module.css';\n\nconst sizeYClassNames = {\n none: styles['ChipsInputBase--sizeY-none'],\n compact: styles['ChipsInputBase--sizeY-compact'],\n} as const;\n\nexport const ChipsInputBase = <O extends ChipOption>({\n // FormFieldProps\n getRootRef,\n style,\n className,\n before,\n after,\n status,\n mode,\n\n // option\n value = DEFAULT_VALUE,\n onAddChipOption,\n onRemoveChipOption: onRemoveChipOptionProp,\n renderChip = renderChipDefault,\n\n // input\n getRef,\n id: idProp,\n inputValue = DEFAULT_INPUT_VALUE,\n placeholder,\n disabled,\n readOnly,\n addOnBlur,\n onBlur,\n onInputChange,\n\n // clear\n ClearButton = FormFieldClearButton,\n clearButtonShown,\n clearButtonTestId,\n onClear,\n ...restProps\n}: ChipsInputBasePrivateProps<O>): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const idGenerated = React.useId();\n const inputRef = useExternRef(getRef);\n const listboxRef = React.useRef<HTMLDivElement>(null);\n\n const valueLength = value.length;\n const withPlaceholder = valueLength === 0;\n const [lastFocusedChipOptionIndex, setLastFocusedChipOptionIndex] = React.useState(0);\n\n const resetChipOptionFocusToInputEl = (inputEl: HTMLInputElement) => {\n setLastFocusedChipOptionIndex(0);\n inputEl.focus();\n };\n\n const moveFocusToChipOption = (\n currentIndex: number,\n navigateTo: NavigateTo,\n listboxEl: HTMLElement,\n ) => {\n const index = getNextChipOptionIndexByNavigateToProp(currentIndex, navigateTo, valueLength);\n // eslint-disable-next-line no-restricted-properties\n const foundEl = listboxEl.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n\n if (foundEl) {\n setLastFocusedChipOptionIndex(index);\n foundEl.focus();\n }\n };\n\n const removeChipOption = (o: O | ChipOptionValue, index: number) => {\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!inputRef.current || !listboxRef.current) {\n return;\n }\n\n if (valueLength > 1) {\n if (index === valueLength - 1) {\n moveFocusToChipOption(index, 'prev', listboxRef.current);\n } else {\n moveFocusToChipOption(index, 'next', listboxRef.current);\n }\n } else {\n resetChipOptionFocusToInputEl(inputRef.current);\n }\n\n onRemoveChipOptionProp(o);\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const targetEl = event.target;\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (event.defaultPrevented || !listboxRef.current || !isHTMLElement(targetEl)) {\n return;\n }\n\n switch (event.key) {\n case Keys.ENTER: {\n if (\n !readOnly &&\n checkTargetIsInputEl(targetEl, inputRef.current) &&\n inputRef.current &&\n !isInputValueEmpty(inputRef.current)\n ) {\n event.preventDefault();\n onAddChipOption(inputRef.current.value);\n }\n break;\n }\n case Keys.DELETE:\n case Keys.BACKSPACE: {\n if (!readOnly && valueLength > 0) {\n if (!checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n removeChipOption(\n getChipOptionValueByHTMLElement(targetEl),\n getChipOptionIndexByHTMLElement(targetEl),\n );\n } else if (event.key === Keys.BACKSPACE && isInputValueEmpty(inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n 'last',\n listboxRef.current,\n );\n }\n }\n break;\n }\n case Keys.ARROW_UP:\n case Keys.ARROW_LEFT:\n case Keys.ARROW_DOWN:\n case Keys.ARROW_RIGHT: {\n if (valueLength !== 0 && !checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n getHorizontalFocusGoTo(event.key),\n listboxRef.current,\n );\n }\n break;\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n\n if (addOnBlur && !event.defaultPrevented && inputRef.current) {\n onAddChipOption(inputRef.current.value);\n }\n };\n\n const handleChipRemove = (event: React.MouseEvent, v: ChipOptionValue) => {\n event.preventDefault();\n event.stopPropagation();\n removeChipOption(v, getChipOptionIndexByValueProp(v, value));\n };\n\n const handleRootClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (contains(event.currentTarget, getActiveElementByAnotherElement(event.currentTarget))) {\n return;\n }\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n const clearButton = React.useMemo(() => {\n if (clearButtonShown) {\n return <ClearButton onClick={onClear} disabled={disabled} data-testid={clearButtonTestId} />;\n }\n return undefined;\n }, [ClearButton, clearButtonShown, clearButtonTestId, disabled, onClear]);\n\n const afterItems = React.useMemo(() => {\n if (clearButton || after) {\n return (\n <>\n {clearButton}\n {after}\n </>\n );\n }\n return undefined;\n }, [after, clearButton]);\n\n return (\n <FormField\n Component=\"div\"\n getRootRef={getRootRef}\n style={style}\n disabled={disabled}\n before={before}\n after={afterItems}\n status={status}\n mode={mode}\n className={className}\n onClick={disabled ? undefined : handleRootClick}\n >\n <div\n className={classNames(\n styles['ChipsInputBase'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withPlaceholder && styles['ChipsInputBase--hasPlaceholder'],\n )}\n // для a11y\n ref={listboxRef}\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-disabled={disabled}\n aria-readonly={readOnly}\n onKeyDown={disabled ? undefined : handleListboxKeyDown}\n >\n {value.map((option, index) => (\n <React.Fragment key={`${typeof option.value}-${option.label}`}>\n {renderChip(\n {\n 'Component': 'div',\n 'value': option.value,\n 'label': option.label,\n 'disabled': option.disabled || disabled,\n 'readOnly': option.readOnly || readOnly,\n 'className': styles['ChipsInputBase__chip'],\n 'onRemove': handleChipRemove,\n // чтобы можно было легче найти этот чип в DOM\n 'data-index': index,\n 'data-value': option.value,\n // для a11y\n 'tabIndex': lastFocusedChipOptionIndex === index ? 0 : -1,\n 'role': 'option',\n 'aria-selected': true,\n 'aria-posinset': index + 1,\n 'aria-setsize': valueLength,\n },\n option,\n )}\n </React.Fragment>\n ))}\n <Text\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n {...restProps}\n Component=\"input\"\n type=\"text\"\n id={idProp || `chips-input-base-generated-id-${idGenerated}`}\n getRootRef={inputRef}\n className={styles['ChipsInputBase__el']}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={withPlaceholder ? placeholder : undefined}\n value={inputValue}\n onChange={onInputChange}\n onBlur={handleInputBlur}\n />\n </div>\n </FormField>\n );\n};\n"],"names":["ChipsInputBase","sizeYClassNames","none","compact","getRootRef","style","className","before","after","status","mode","value","DEFAULT_VALUE","onAddChipOption","onRemoveChipOption","onRemoveChipOptionProp","renderChip","renderChipDefault","getRef","id","idProp","inputValue","DEFAULT_INPUT_VALUE","placeholder","disabled","readOnly","addOnBlur","onBlur","onInputChange","ClearButton","FormFieldClearButton","clearButtonShown","clearButtonTestId","onClear","restProps","sizeY","useAdaptivity","idGenerated","React","useId","inputRef","useExternRef","listboxRef","useRef","valueLength","length","withPlaceholder","lastFocusedChipOptionIndex","setLastFocusedChipOptionIndex","useState","resetChipOptionFocusToInputEl","inputEl","focus","moveFocusToChipOption","currentIndex","navigateTo","listboxEl","index","getNextChipOptionIndexByNavigateToProp","foundEl","querySelector","removeChipOption","o","current","handleListboxKeyDown","event","targetEl","target","defaultPrevented","isHTMLElement","key","Keys","ENTER","checkTargetIsInputEl","isInputValueEmpty","preventDefault","DELETE","BACKSPACE","getChipOptionValueByHTMLElement","getChipOptionIndexByHTMLElement","ARROW_UP","ARROW_LEFT","ARROW_DOWN","ARROW_RIGHT","getHorizontalFocusGoTo","handleInputBlur","handleChipRemove","v","stopPropagation","getChipOptionIndexByValueProp","handleRootClick","contains","currentTarget","getActiveElementByAnotherElement","clearButton","useMemo","onClick","data-testid","undefined","afterItems","FormField","Component","div","classNames","ref","role","aria-orientation","aria-disabled","aria-readonly","onKeyDown","map","option","Fragment","label","Text","autoCapitalize","autoComplete","autoCorrect","spellCheck","type","onChange"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ChipsInputBase/ChipsInputBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { getHorizontalFocusGoTo, Keys } from '../../lib/accessibility';\nimport {\n contains as checkTargetIsInputEl,\n contains,\n getActiveElementByAnotherElement,\n} from '../../lib/dom';\nimport { FormField } from '../FormField/FormField';\nimport { FormFieldClearButton } from '../FormFieldClearButton/FormFieldClearButton';\nimport { Text } from '../Typography/Text/Text';\nimport { DEFAULT_INPUT_VALUE, DEFAULT_VALUE, renderChipDefault } from './constants';\nimport {\n getChipOptionIndexByHTMLElement,\n getChipOptionIndexByValueProp,\n getChipOptionValueByHTMLElement,\n getNextChipOptionIndexByNavigateToProp,\n isInputValueEmpty,\n} from './helpers';\nimport type { ChipOption, ChipOptionValue, ChipsInputBasePrivateProps, NavigateTo } from './types';\nimport styles from './ChipsInputBase.module.css';\n\nconst sizeYClassNames = {\n none: styles['ChipsInputBase--sizeY-none'],\n compact: styles['ChipsInputBase--sizeY-compact'],\n} as const;\n\nexport const ChipsInputBase = <O extends ChipOption>({\n // FormFieldProps\n getRootRef,\n style,\n className,\n before,\n after,\n status,\n mode,\n maxHeight,\n\n // option\n value = DEFAULT_VALUE,\n onAddChipOption,\n onRemoveChipOption: onRemoveChipOptionProp,\n renderChip = renderChipDefault,\n\n // input\n getRef,\n id: idProp,\n inputValue = DEFAULT_INPUT_VALUE,\n placeholder,\n disabled,\n readOnly,\n addOnBlur,\n onBlur,\n onInputChange,\n\n // clear\n ClearButton = FormFieldClearButton,\n clearButtonShown,\n clearButtonTestId,\n onClear,\n ...restProps\n}: ChipsInputBasePrivateProps<O>): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const idGenerated = React.useId();\n const inputRef = useExternRef(getRef);\n const listboxRef = React.useRef<HTMLDivElement>(null);\n\n const valueLength = value.length;\n const withPlaceholder = valueLength === 0;\n const [lastFocusedChipOptionIndex, setLastFocusedChipOptionIndex] = React.useState(0);\n\n const resetChipOptionFocusToInputEl = (inputEl: HTMLInputElement) => {\n setLastFocusedChipOptionIndex(0);\n inputEl.focus();\n };\n\n const moveFocusToChipOption = (\n currentIndex: number,\n navigateTo: NavigateTo,\n listboxEl: HTMLElement,\n ) => {\n const index = getNextChipOptionIndexByNavigateToProp(currentIndex, navigateTo, valueLength);\n // eslint-disable-next-line no-restricted-properties\n const foundEl = listboxEl.querySelector<HTMLElement>(`[data-index=\"${index}\"]`);\n\n if (foundEl) {\n setLastFocusedChipOptionIndex(index);\n foundEl.focus();\n }\n };\n\n const removeChipOption = (o: O | ChipOptionValue, index: number) => {\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!inputRef.current || !listboxRef.current) {\n return;\n }\n\n if (valueLength > 1) {\n if (index === valueLength - 1) {\n moveFocusToChipOption(index, 'prev', listboxRef.current);\n } else {\n moveFocusToChipOption(index, 'next', listboxRef.current);\n }\n } else {\n resetChipOptionFocusToInputEl(inputRef.current);\n }\n\n onRemoveChipOptionProp(o);\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const targetEl = event.target;\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (event.defaultPrevented || !listboxRef.current || !isHTMLElement(targetEl)) {\n return;\n }\n\n switch (event.key) {\n case Keys.ENTER: {\n if (\n !readOnly &&\n checkTargetIsInputEl(targetEl, inputRef.current) &&\n inputRef.current &&\n !isInputValueEmpty(inputRef.current)\n ) {\n event.preventDefault();\n onAddChipOption(inputRef.current.value);\n }\n break;\n }\n case Keys.DELETE:\n case Keys.BACKSPACE: {\n if (!readOnly && valueLength > 0) {\n if (!checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n removeChipOption(\n getChipOptionValueByHTMLElement(targetEl),\n getChipOptionIndexByHTMLElement(targetEl),\n );\n } else if (event.key === Keys.BACKSPACE && isInputValueEmpty(inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n 'last',\n listboxRef.current,\n );\n }\n }\n break;\n }\n case Keys.ARROW_UP:\n case Keys.ARROW_LEFT:\n case Keys.ARROW_DOWN:\n case Keys.ARROW_RIGHT: {\n if (valueLength !== 0 && !checkTargetIsInputEl(targetEl, inputRef.current)) {\n event.preventDefault();\n moveFocusToChipOption(\n getChipOptionIndexByHTMLElement(targetEl),\n getHorizontalFocusGoTo(event.key),\n listboxRef.current,\n );\n }\n break;\n }\n }\n };\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n\n if (addOnBlur && !event.defaultPrevented && inputRef.current) {\n onAddChipOption(inputRef.current.value);\n }\n };\n\n const handleChipRemove = (event: React.MouseEvent, v: ChipOptionValue) => {\n event.preventDefault();\n event.stopPropagation();\n removeChipOption(v, getChipOptionIndexByValueProp(v, value));\n };\n\n const handleRootClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (contains(event.currentTarget, getActiveElementByAnotherElement(event.currentTarget))) {\n return;\n }\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n const clearButton = React.useMemo(() => {\n if (clearButtonShown) {\n return <ClearButton onClick={onClear} disabled={disabled} data-testid={clearButtonTestId} />;\n }\n return undefined;\n }, [ClearButton, clearButtonShown, clearButtonTestId, disabled, onClear]);\n\n const afterItems = React.useMemo(() => {\n if (clearButton || after) {\n return (\n <>\n {clearButton}\n {after}\n </>\n );\n }\n return undefined;\n }, [after, clearButton]);\n\n return (\n <FormField\n Component=\"div\"\n getRootRef={getRootRef}\n style={style}\n disabled={disabled}\n before={before}\n after={afterItems}\n status={status}\n mode={mode}\n className={className}\n maxHeight={maxHeight}\n onClick={disabled ? undefined : handleRootClick}\n >\n <div\n className={classNames(\n styles['ChipsInputBase'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n withPlaceholder && styles['ChipsInputBase--hasPlaceholder'],\n )}\n // для a11y\n ref={listboxRef}\n role=\"listbox\"\n aria-orientation=\"horizontal\"\n aria-disabled={disabled}\n aria-readonly={readOnly}\n onKeyDown={disabled ? undefined : handleListboxKeyDown}\n >\n {value.map((option, index) => (\n <React.Fragment key={`${typeof option.value}-${option.label}`}>\n {renderChip(\n {\n 'Component': 'div',\n 'value': option.value,\n 'label': option.label,\n 'disabled': option.disabled || disabled,\n 'readOnly': option.readOnly || readOnly,\n 'className': styles['ChipsInputBase__chip'],\n 'onRemove': handleChipRemove,\n // чтобы можно было легче найти этот чип в DOM\n 'data-index': index,\n 'data-value': option.value,\n // для a11y\n 'tabIndex': lastFocusedChipOptionIndex === index ? 0 : -1,\n 'role': 'option',\n 'aria-selected': true,\n 'aria-posinset': index + 1,\n 'aria-setsize': valueLength,\n },\n option,\n )}\n </React.Fragment>\n ))}\n <Text\n autoCapitalize=\"none\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n {...restProps}\n Component=\"input\"\n type=\"text\"\n id={idProp || `chips-input-base-generated-id-${idGenerated}`}\n getRootRef={inputRef}\n className={styles['ChipsInputBase__el']}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={withPlaceholder ? placeholder : undefined}\n value={inputValue}\n onChange={onInputChange}\n onBlur={handleInputBlur}\n />\n </div>\n </FormField>\n );\n};\n"],"names":["ChipsInputBase","sizeYClassNames","none","compact","getRootRef","style","className","before","after","status","mode","maxHeight","value","DEFAULT_VALUE","onAddChipOption","onRemoveChipOption","onRemoveChipOptionProp","renderChip","renderChipDefault","getRef","id","idProp","inputValue","DEFAULT_INPUT_VALUE","placeholder","disabled","readOnly","addOnBlur","onBlur","onInputChange","ClearButton","FormFieldClearButton","clearButtonShown","clearButtonTestId","onClear","restProps","sizeY","useAdaptivity","idGenerated","React","useId","inputRef","useExternRef","listboxRef","useRef","valueLength","length","withPlaceholder","lastFocusedChipOptionIndex","setLastFocusedChipOptionIndex","useState","resetChipOptionFocusToInputEl","inputEl","focus","moveFocusToChipOption","currentIndex","navigateTo","listboxEl","index","getNextChipOptionIndexByNavigateToProp","foundEl","querySelector","removeChipOption","o","current","handleListboxKeyDown","event","targetEl","target","defaultPrevented","isHTMLElement","key","Keys","ENTER","checkTargetIsInputEl","isInputValueEmpty","preventDefault","DELETE","BACKSPACE","getChipOptionValueByHTMLElement","getChipOptionIndexByHTMLElement","ARROW_UP","ARROW_LEFT","ARROW_DOWN","ARROW_RIGHT","getHorizontalFocusGoTo","handleInputBlur","handleChipRemove","v","stopPropagation","getChipOptionIndexByValueProp","handleRootClick","contains","currentTarget","getActiveElementByAnotherElement","clearButton","useMemo","onClick","data-testid","undefined","afterItems","FormField","Component","div","classNames","ref","role","aria-orientation","aria-disabled","aria-readonly","onKeyDown","map","option","Fragment","label","Text","autoCapitalize","autoComplete","autoCorrect","spellCheck","type","onChange"],"mappings":"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"}
@@ -78,7 +78,7 @@ export interface ChipsInputBaseProps<O extends ChipOption = ChipOption> extends
78
78
  /**
79
79
  * @private
80
80
  */
81
- export interface ChipsInputBasePrivateProps<O extends ChipOption = ChipOption> extends ChipsInputBaseProps<O>, Pick<FormFieldProps, 'mode' | 'status' | 'before' | 'after'> {
81
+ export interface ChipsInputBasePrivateProps<O extends ChipOption = ChipOption> extends ChipsInputBaseProps<O>, Pick<FormFieldProps, 'mode' | 'status' | 'before' | 'after' | 'maxHeight'> {
82
82
  onClear: () => void;
83
83
  onAddChipOption: (value: string) => void;
84
84
  onRemoveChipOption: (value: O | ChipOptionValue) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/ChipsInputBase/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ChipsInputBase/types.ts"],"sourcesContent":["import * as React from 'react';\nimport type {\n HasAlign,\n HasComponent,\n HasDataAttribute,\n HasRef,\n HTMLAttributesWithRootRef,\n} from '../../types';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { FormFieldClearButtonProps } from '../FormFieldClearButton/FormFieldClearButton';\n\nexport type NavigateTo = 'first' | 'prev' | 'next' | 'last';\n\nexport type ChipOptionValue = string | number;\n\nexport type ChipOptionLabel = React.ReactElement | string | number;\n\nexport type ChipOption = {\n value: ChipOptionValue;\n label: ChipOptionLabel;\n disabled?: boolean;\n [index: string]: any;\n};\n\nexport interface ChipProps\n extends HasComponent,\n HasDataAttribute,\n HTMLAttributesWithRootRef<HTMLElement> {\n value?: ChipOptionValue;\n removable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n removeLabel?: string;\n before?: React.ReactNode;\n after?: React.ReactNode;\n onRemove?: (event: React.MouseEvent, value: ChipOptionValue) => void;\n}\n\nexport interface RenderChipProps extends ChipProps {\n label: ChipOptionLabel;\n}\n\nexport type RenderChip<O extends ChipOption = ChipOption> = (\n props: RenderChipProps,\n option: O,\n) => React.ReactNode;\n\nexport type GetOptionValue<O extends ChipOption = ChipOption> = (option: O) => ChipOptionValue;\n\nexport type GetOptionLabel<O extends ChipOption = ChipOption> = (option: O) => ChipOptionLabel;\n\nexport type GetNewOptionData<O extends ChipOption = ChipOption> = (\n value: ChipOptionValue,\n label: ChipOptionLabel,\n) => O;\n\nexport type OnChange<O extends ChipOption = ChipOption> = (value: O[]) => void;\n\nexport type OnInputChange = (event: React.ChangeEvent<HTMLInputElement>) => void;\n\n/**\n * @public\n */\nexport interface UseChipsInputBaseProps<O extends ChipOption = ChipOption> {\n disabled?: boolean;\n\n value?: O[];\n defaultValue?: O[];\n onChange?: OnChange<O>;\n\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: OnInputChange;\n}\n\n/**\n * @private\n */\ntype UseChipsInputBaseOnlyNeededProps<O extends ChipOption = ChipOption> = Omit<\n UseChipsInputBaseProps<O>,\n 'onChange' | 'defaultValue' | 'defaultInputValue'\n>;\n\n/**\n * @public\n */\nexport interface ChipsInputBaseProps<O extends ChipOption = ChipOption>\n extends UseChipsInputBaseOnlyNeededProps<O>,\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n keyof UseChipsInputBaseProps<O> | 'defaultChecked'\n >,\n HasRef<HTMLInputElement>,\n HasAlign {\n getRootRef?: React.Ref<HTMLDivElement>;\n /**\n * Добавляет значение в список на событие `onBlur`\n */\n addOnBlur?: boolean;\n /**\n * Render prop функция для возврата своего компонента.\n *\n * @default Используется [Chip](#/Chip)\n */\n renderChip?: RenderChip;\n /**\n * Показывать ли кнопку для очистки значения\n */\n clearButtonShown?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<FormFieldClearButtonProps>;\n}\n\n/**\n * @private\n */\nexport interface ChipsInputBasePrivateProps<O extends ChipOption = ChipOption>\n extends ChipsInputBaseProps<O>,\n Pick<FormFieldProps, 'mode' | 'status' | 'before' | 'after'> {\n onClear: () => void;\n onAddChipOption: (value: string) => void;\n onRemoveChipOption: (value: O | ChipOptionValue) => void;\n}\n"],"names":[],"mappings":";;;;;iEAAuB"}
1
+ {"version":3,"sources":["../../../../src/components/ChipsInputBase/types.ts"],"sourcesContent":["import * as React from 'react';\nimport type {\n HasAlign,\n HasComponent,\n HasDataAttribute,\n HasRef,\n HTMLAttributesWithRootRef,\n} from '../../types';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { FormFieldClearButtonProps } from '../FormFieldClearButton/FormFieldClearButton';\n\nexport type NavigateTo = 'first' | 'prev' | 'next' | 'last';\n\nexport type ChipOptionValue = string | number;\n\nexport type ChipOptionLabel = React.ReactElement | string | number;\n\nexport type ChipOption = {\n value: ChipOptionValue;\n label: ChipOptionLabel;\n disabled?: boolean;\n [index: string]: any;\n};\n\nexport interface ChipProps\n extends HasComponent,\n HasDataAttribute,\n HTMLAttributesWithRootRef<HTMLElement> {\n value?: ChipOptionValue;\n removable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n removeLabel?: string;\n before?: React.ReactNode;\n after?: React.ReactNode;\n onRemove?: (event: React.MouseEvent, value: ChipOptionValue) => void;\n}\n\nexport interface RenderChipProps extends ChipProps {\n label: ChipOptionLabel;\n}\n\nexport type RenderChip<O extends ChipOption = ChipOption> = (\n props: RenderChipProps,\n option: O,\n) => React.ReactNode;\n\nexport type GetOptionValue<O extends ChipOption = ChipOption> = (option: O) => ChipOptionValue;\n\nexport type GetOptionLabel<O extends ChipOption = ChipOption> = (option: O) => ChipOptionLabel;\n\nexport type GetNewOptionData<O extends ChipOption = ChipOption> = (\n value: ChipOptionValue,\n label: ChipOptionLabel,\n) => O;\n\nexport type OnChange<O extends ChipOption = ChipOption> = (value: O[]) => void;\n\nexport type OnInputChange = (event: React.ChangeEvent<HTMLInputElement>) => void;\n\n/**\n * @public\n */\nexport interface UseChipsInputBaseProps<O extends ChipOption = ChipOption> {\n disabled?: boolean;\n\n value?: O[];\n defaultValue?: O[];\n onChange?: OnChange<O>;\n\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: OnInputChange;\n}\n\n/**\n * @private\n */\ntype UseChipsInputBaseOnlyNeededProps<O extends ChipOption = ChipOption> = Omit<\n UseChipsInputBaseProps<O>,\n 'onChange' | 'defaultValue' | 'defaultInputValue'\n>;\n\n/**\n * @public\n */\nexport interface ChipsInputBaseProps<O extends ChipOption = ChipOption>\n extends UseChipsInputBaseOnlyNeededProps<O>,\n Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n keyof UseChipsInputBaseProps<O> | 'defaultChecked'\n >,\n HasRef<HTMLInputElement>,\n HasAlign {\n getRootRef?: React.Ref<HTMLDivElement>;\n /**\n * Добавляет значение в список на событие `onBlur`\n */\n addOnBlur?: boolean;\n /**\n * Render prop функция для возврата своего компонента.\n *\n * @default Используется [Chip](#/Chip)\n */\n renderChip?: RenderChip;\n /**\n * Показывать ли кнопку для очистки значения\n */\n clearButtonShown?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<FormFieldClearButtonProps>;\n}\n\n/**\n * @private\n */\nexport interface ChipsInputBasePrivateProps<O extends ChipOption = ChipOption>\n extends ChipsInputBaseProps<O>,\n Pick<FormFieldProps, 'mode' | 'status' | 'before' | 'after' | 'maxHeight'> {\n onClear: () => void;\n onAddChipOption: (value: string) => void;\n onRemoveChipOption: (value: O | ChipOptionValue) => void;\n}\n"],"names":[],"mappings":";;;;;iEAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Clickable.d.ts","sourceRoot":"","sources":["../../../../src/components/Clickable/Clickable.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAEtB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAiB,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,EAGL,UAAU,EAEX,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,WAAW,CAC7C,SAAQ,kBAAkB,CAAC,CAAC,CAAC,EAC3B,qBAAqB,EACrB,UAAU;CAAG;AAuFjB;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAQnE;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,wEAIxB,cAAc,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,SAqB5B,CAAC"}
1
+ {"version":3,"file":"Clickable.d.ts","sourceRoot":"","sources":["../../../../src/components/Clickable/Clickable.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAEtB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAiB,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAGL,UAAU,EAEX,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,WAAW,CAC7C,SAAQ,kBAAkB,CAAC,CAAC,CAAC,EAC3B,qBAAqB,EACrB,UAAU;CAAG;AA0FjB;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAQnE;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,wEAIxB,cAAc,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,SAqB5B,CAAC"}
@@ -24,8 +24,8 @@ const _vkjs = require("@vkontakte/vkjs");
24
24
  const _useFocusVisible = require("../../hooks/useFocusVisible");
25
25
  const _useFocusVisibleClassName = require("../../hooks/useFocusVisibleClassName");
26
26
  const _mergeCalls = require("../../lib/mergeCalls");
27
+ const _utils = require("../../lib/utils");
27
28
  const _RootComponent = require("../RootComponent/RootComponent");
28
- const _useKeyboard = require("./useKeyboard");
29
29
  const _useState = require("./useState");
30
30
  /**
31
31
  * Некликабельный компонент. Отключаем возможность нажимать на компонент.
@@ -86,8 +86,9 @@ const _useState = require("./useState");
86
86
  "stateClassName",
87
87
  "setLockBubblingImmediate"
88
88
  ]);
89
- const keyboardHandlers = (0, _useKeyboard.useKeyboard)();
90
- const handlers = (0, _mergeCalls.mergeCalls)(focusEvents, stateEvents, keyboardHandlers, {
89
+ const handlers = (0, _mergeCalls.mergeCalls)(focusEvents, stateEvents, {
90
+ onKeyDown: _utils.clickByKeyboardHandler
91
+ }, {
91
92
  onPointerEnter,
92
93
  onPointerLeave,
93
94
  onPointerDown,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Clickable/Clickable.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport {\n FocusVisibleModeProps,\n useFocusVisibleClassName,\n} from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { RootComponent, RootComponentProps } from '../RootComponent/RootComponent';\nimport { useKeyboard } from './useKeyboard';\nimport {\n ClickableLockStateContext,\n DEFAULT_ACTIVE_EFFECT_DELAY,\n StateProps,\n useState,\n} from './useState';\nimport styles from './Clickable.module.css';\n\nexport interface ClickableProps<T = HTMLElement>\n extends RootComponentProps<T>,\n FocusVisibleModeProps,\n StateProps {}\n\n/**\n * Некликабельный компонент. Отключаем возможность нажимать на компонент.\n */\nconst NonClickable = <T,>({\n href,\n onClick,\n onClickCapture,\n activeClassName,\n hoverClassName,\n hasActive,\n hasHover,\n hovered,\n activated,\n activeEffectDelay,\n ...restProps\n}: ClickableProps<T>) => <RootComponent {...restProps} />;\n\n/**\n * Кликабельный компонент. Добавляем кучу обвесов\n */\nconst RealClickable = <T,>({\n baseClassName,\n children,\n focusVisibleMode = 'inside',\n activeClassName,\n hoverClassName,\n activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,\n hasHover = true,\n hasActive = true,\n hovered,\n activated,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n ...restProps\n}: ClickableProps<T>) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });\n\n const { stateClassName, setLockBubblingImmediate, ...stateEvents } = useState({\n activeClassName,\n hoverClassName,\n activeEffectDelay,\n hasHover,\n hasActive,\n hovered,\n activated,\n });\n\n const keyboardHandlers = useKeyboard();\n\n const handlers = mergeCalls(focusEvents, stateEvents, keyboardHandlers, {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n });\n\n return (\n <RootComponent\n baseClassName={classNames(\n baseClassName,\n styles['Clickable__realClickable'],\n focusVisibleClassNames,\n stateClassName,\n )}\n {...handlers}\n {...restProps}\n >\n <ClickableLockStateContext.Provider value={setLockBubblingImmediate}>\n {children}\n </ClickableLockStateContext.Provider>\n </RootComponent>\n );\n};\n\n/**\n * Проверяем, является ли компонент кликабельным\n */\nexport function checkClickable<T>(props: ClickableProps<T>): boolean {\n return (\n (props.href !== undefined ||\n props.onClick !== undefined ||\n props.onClickCapture !== undefined ||\n props.Component === 'label') &&\n !props.disabled\n );\n}\n\n/**\n * Определяет правильный компонент и его свойства\n *\n * - если передан Component, используем его\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n */\nfunction component<T>({\n Component,\n onClick,\n onClickCapture,\n href,\n disabled,\n}: RootComponentProps<T>): RootComponentProps<T> {\n if (Component !== undefined) {\n return { Component };\n } else if (href !== undefined) {\n return { 'Component': 'a', 'aria-disabled': disabled };\n } else if (onClick !== undefined || onClickCapture !== undefined) {\n return {\n 'Component': 'div',\n 'role': 'button',\n 'tabIndex': disabled ? undefined : 0,\n 'aria-disabled': disabled,\n };\n }\n\n return {};\n}\n\nconst getUserAgentResetClassName = (Component?: React.ElementType) => {\n if (Component === 'a') {\n return styles.Clickable__resetLinkStyle;\n }\n if (Component === 'button') {\n return styles.Clickable__resetButtonStyle;\n }\n return;\n};\n\n/**\n * Базовый кликабельный корневой компонент.\n *\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n *\n * Отвечает за:\n *\n * - стейты наведения и нажатия\n * - a11y компонентов\n */\nexport const Clickable = <T,>({\n focusVisibleMode = 'inside',\n baseClassName: baseClassNameProp,\n ...restProps\n}: ClickableProps<T>): React.ReactNode => {\n const commonProps = component(restProps);\n const isClickable = checkClickable(restProps);\n const baseClassName = classNames(\n baseClassNameProp,\n getUserAgentResetClassName(commonProps.Component),\n styles['Clickable__host'],\n );\n\n if (isClickable) {\n return (\n <RealClickable\n baseClassName={baseClassName}\n focusVisibleMode={focusVisibleMode}\n {...commonProps}\n {...restProps}\n />\n );\n }\n\n return <NonClickable baseClassName={baseClassName} {...commonProps} {...restProps} />;\n};\n"],"names":["Clickable","checkClickable","NonClickable","href","onClick","onClickCapture","activeClassName","hoverClassName","hasActive","hasHover","hovered","activated","activeEffectDelay","restProps","RootComponent","RealClickable","baseClassName","children","focusVisibleMode","DEFAULT_ACTIVE_EFFECT_DELAY","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","useFocusVisible","focusVisible","focusEvents","focusVisibleClassNames","useFocusVisibleClassName","mode","useState","stateClassName","setLockBubblingImmediate","stateEvents","keyboardHandlers","useKeyboard","handlers","mergeCalls","classNames","ClickableLockStateContext","Provider","value","props","undefined","Component","disabled","component","getUserAgentResetClassName","baseClassNameProp","commonProps","isClickable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Clickable/Clickable.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport {\n FocusVisibleModeProps,\n useFocusVisibleClassName,\n} from '../../hooks/useFocusVisibleClassName';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { clickByKeyboardHandler } from '../../lib/utils';\nimport { RootComponent, RootComponentProps } from '../RootComponent/RootComponent';\nimport {\n ClickableLockStateContext,\n DEFAULT_ACTIVE_EFFECT_DELAY,\n StateProps,\n useState,\n} from './useState';\nimport styles from './Clickable.module.css';\n\nexport interface ClickableProps<T = HTMLElement>\n extends RootComponentProps<T>,\n FocusVisibleModeProps,\n StateProps {}\n\n/**\n * Некликабельный компонент. Отключаем возможность нажимать на компонент.\n */\nconst NonClickable = <T,>({\n href,\n onClick,\n onClickCapture,\n activeClassName,\n hoverClassName,\n hasActive,\n hasHover,\n hovered,\n activated,\n activeEffectDelay,\n ...restProps\n}: ClickableProps<T>) => <RootComponent {...restProps} />;\n\n/**\n * Кликабельный компонент. Добавляем кучу обвесов\n */\nconst RealClickable = <T,>({\n baseClassName,\n children,\n focusVisibleMode = 'inside',\n activeClassName,\n hoverClassName,\n activeEffectDelay = DEFAULT_ACTIVE_EFFECT_DELAY,\n hasHover = true,\n hasActive = true,\n hovered,\n activated,\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n ...restProps\n}: ClickableProps<T>) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: focusVisibleMode });\n\n const { stateClassName, setLockBubblingImmediate, ...stateEvents } = useState({\n activeClassName,\n hoverClassName,\n activeEffectDelay,\n hasHover,\n hasActive,\n hovered,\n activated,\n });\n\n const handlers = mergeCalls(\n focusEvents,\n stateEvents,\n { onKeyDown: clickByKeyboardHandler },\n {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerCancel,\n onPointerUp,\n onBlur,\n onFocus,\n onKeyDown,\n },\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n baseClassName,\n styles['Clickable__realClickable'],\n focusVisibleClassNames,\n stateClassName,\n )}\n {...handlers}\n {...restProps}\n >\n <ClickableLockStateContext.Provider value={setLockBubblingImmediate}>\n {children}\n </ClickableLockStateContext.Provider>\n </RootComponent>\n );\n};\n\n/**\n * Проверяем, является ли компонент кликабельным\n */\nexport function checkClickable<T>(props: ClickableProps<T>): boolean {\n return (\n (props.href !== undefined ||\n props.onClick !== undefined ||\n props.onClickCapture !== undefined ||\n props.Component === 'label') &&\n !props.disabled\n );\n}\n\n/**\n * Определяет правильный компонент и его свойства\n *\n * - если передан Component, используем его\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n */\nfunction component<T>({\n Component,\n onClick,\n onClickCapture,\n href,\n disabled,\n}: RootComponentProps<T>): RootComponentProps<T> {\n if (Component !== undefined) {\n return { Component };\n } else if (href !== undefined) {\n return { 'Component': 'a', 'aria-disabled': disabled };\n } else if (onClick !== undefined || onClickCapture !== undefined) {\n return {\n 'Component': 'div',\n 'role': 'button',\n 'tabIndex': disabled ? undefined : 0,\n 'aria-disabled': disabled,\n };\n }\n\n return {};\n}\n\nconst getUserAgentResetClassName = (Component?: React.ElementType) => {\n if (Component === 'a') {\n return styles.Clickable__resetLinkStyle;\n }\n if (Component === 'button') {\n return styles.Clickable__resetButtonStyle;\n }\n return;\n};\n\n/**\n * Базовый кликабельный корневой компонент.\n *\n * - при передаче `href` превратится в `a`,\n * - при передаче `onClick` превратится в `div` c `role=\"button\"` и `tabIndex=\"0\"`.\n * - иначе используется `div`.\n *\n * Отвечает за:\n *\n * - стейты наведения и нажатия\n * - a11y компонентов\n */\nexport const Clickable = <T,>({\n focusVisibleMode = 'inside',\n baseClassName: baseClassNameProp,\n ...restProps\n}: ClickableProps<T>): React.ReactNode => {\n const commonProps = component(restProps);\n const isClickable = checkClickable(restProps);\n const baseClassName = classNames(\n baseClassNameProp,\n getUserAgentResetClassName(commonProps.Component),\n styles['Clickable__host'],\n );\n\n if (isClickable) {\n return (\n <RealClickable\n baseClassName={baseClassName}\n focusVisibleMode={focusVisibleMode}\n {...commonProps}\n {...restProps}\n />\n );\n }\n\n return <NonClickable baseClassName={baseClassName} {...commonProps} {...restProps} />;\n};\n"],"names":["Clickable","checkClickable","NonClickable","href","onClick","onClickCapture","activeClassName","hoverClassName","hasActive","hasHover","hovered","activated","activeEffectDelay","restProps","RootComponent","RealClickable","baseClassName","children","focusVisibleMode","DEFAULT_ACTIVE_EFFECT_DELAY","onPointerEnter","onPointerLeave","onPointerDown","onPointerCancel","onPointerUp","onBlur","onFocus","onKeyDown","useFocusVisible","focusVisible","focusEvents","focusVisibleClassNames","useFocusVisibleClassName","mode","useState","stateClassName","setLockBubblingImmediate","stateEvents","handlers","mergeCalls","clickByKeyboardHandler","classNames","ClickableLockStateContext","Provider","value","props","undefined","Component","disabled","component","getUserAgentResetClassName","baseClassNameProp","commonProps","isClickable"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"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"}
@@ -21,7 +21,6 @@ const _useFocusWithin = require("../../hooks/useFocusWithin");
21
21
  const _dom = require("../../lib/dom");
22
22
  const _select = require("../../lib/select");
23
23
  const _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
24
- const _utils = require("../../lib/utils");
25
24
  const _warnOnce = require("../../lib/warnOnce");
26
25
  const _CustomSelectDropdown = require("../CustomSelectDropdown/CustomSelectDropdown");
27
26
  const _CustomSelectOption = require("../CustomSelectOption/CustomSelectOption");
@@ -336,7 +335,7 @@ function CustomSelect(props) {
336
335
  open,
337
336
  opened
338
337
  ]);
339
- const handleKeyUp = _react.useMemo(()=>(0, _utils.debounce)(resetKeyboardInput, 1000), [
338
+ const handleKeyUp = _react.useMemo(()=>(0, _vkjs.debounce)(resetKeyboardInput, 1000), [
340
339
  resetKeyboardInput
341
340
  ]);
342
341
  const focusOption = _react.useCallback((type)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * 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 { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","useFocusWithin","classNames","VisuallyHidden","aria-live","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport {\n CustomSelectDropdown,\n CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport { CustomSelectInput } from './CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n ['compact']: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n FormFieldProps,\n TrackerOptionsProps,\n Pick<\n CustomSelectDropdownProps,\n 'overscrollBehavior' | 'autoHideScrollbar' | 'autoHideScrollbarDelay'\n > {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions as OptionInterfaceT[],\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n ['aria-labelledby']: ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n popupDirection,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n const focusOnInputTimerRef = React.useRef<ReturnType<typeof setTimeout>>();\n const focusOnInput = React.useCallback(() => {\n clearTimeout(focusOnInputTimerRef.current);\n\n focusOnInputTimerRef.current = setTimeout(() => {\n selectInputRef.current && selectInputRef.current.focus();\n }, 0);\n }, [selectInputRef]);\n useIsomorphicLayoutEffect(function clearFocusOnInputTimer() {\n return () => {\n clearTimeout(focusOnInputTimerRef.current);\n };\n }, []);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue('');\n setInputValue('');\n focusOnInput();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n focusOnInput,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n focusOnInput();\n }\n }\n },\n [document, focusOnInput, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n ['aria-activedescendant']:\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(\n styles['CustomSelect'],\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","opened","setOpened","React","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOption","renderOptionProp","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","useAdaptivity","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","newSelectedOptionIndex","currentTarget","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","Footnote","selectInputRef","focusOnInputTimerRef","focusOnInput","clearTimeout","setTimeout","focus","clearFocusOnInputTimer","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearSelectState","data-testid","DropdownIcon","afterIcons","document","useDOM","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","useFocusWithin","classNames","VisuallyHidden","aria-live","CustomSelectInput","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
@@ -36,6 +36,10 @@ export interface FormFieldProps {
36
36
  * - `plain` — показывает только текст-подсказку.
37
37
  */
38
38
  mode?: 'default' | 'plain';
39
+ /**
40
+ * Максимальная высота поля
41
+ */
42
+ maxHeight?: number;
39
43
  }
40
44
  interface FormFieldOwnProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement>, HasComponent, FormFieldProps {
41
45
  disabled?: boolean;
@@ -43,6 +47,6 @@ interface FormFieldOwnProps extends React.AllHTMLAttributes<HTMLElement>, HasRoo
43
47
  /**
44
48
  * @see https://vkcom.github.io/VKUI/#/FormField
45
49
  */
46
- export declare const FormField: ({ Component, status, children, getRootRef, before, after, beforeAlign, afterAlign, disabled, mode, className, ...restProps }: FormFieldOwnProps) => React.ReactNode;
50
+ export declare const FormField: ({ Component, status, children, getRootRef, before, after, beforeAlign, afterAlign, disabled, mode, className, maxHeight, style, ...restProps }: FormFieldOwnProps) => React.ReactNode;
47
51
  export {};
48
52
  //# sourceMappingURL=FormField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../../src/components/FormField/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBvD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B;AAED,UAAU,iBACR,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY,EACZ,cAAc;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,iIAanB,iBAAiB,KAAG,KAAK,CAAC,SA0D5B,CAAC"}
1
+ {"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../../../src/components/FormField/FormField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2BvD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACvC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBACR,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY,EACZ,cAAc;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,mJAenB,iBAAiB,KAAG,KAAK,CAAC,SA2D5B,CAAC"}