@vkontakte/vkui 7.8.2 → 7.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/components/Box/Box.d.ts +11 -0
  2. package/dist/components/Box/Box.d.ts.map +1 -0
  3. package/dist/components/Box/Box.js +25 -0
  4. package/dist/components/Box/Box.js.map +1 -0
  5. package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
  6. package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
  7. package/dist/components/CarouselBase/CarouselBase.js +6 -4
  8. package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
  9. package/dist/components/CarouselBase/constants.d.ts +1 -1
  10. package/dist/components/CarouselBase/constants.d.ts.map +1 -1
  11. package/dist/components/CarouselBase/constants.js +1 -1
  12. package/dist/components/CarouselBase/constants.js.map +1 -1
  13. package/dist/components/CarouselBase/hooks.d.ts +3 -1
  14. package/dist/components/CarouselBase/hooks.d.ts.map +1 -1
  15. package/dist/components/CarouselBase/hooks.js +46 -6
  16. package/dist/components/CarouselBase/hooks.js.map +1 -1
  17. package/dist/components/CarouselBase/types.d.ts +12 -0
  18. package/dist/components/CarouselBase/types.d.ts.map +1 -1
  19. package/dist/components/CarouselBase/types.js.map +1 -1
  20. package/dist/components/Checkbox/Checkbox.d.ts +11 -2
  21. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  22. package/dist/components/Checkbox/Checkbox.js +44 -10
  23. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  24. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +16 -3
  25. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -1
  26. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js +32 -19
  27. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
  28. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
  29. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
  30. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +39 -10
  31. package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  32. package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
  33. package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
  34. package/dist/components/ChipsInput/ChipsInput.js +32 -13
  35. package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
  36. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
  37. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  38. package/dist/components/ChipsInputBase/ChipsInputBase.js +52 -26
  39. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  40. package/dist/components/ChipsInputBase/types.d.ts +13 -4
  41. package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
  42. package/dist/components/ChipsInputBase/types.js.map +1 -1
  43. package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
  44. package/dist/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
  45. package/dist/components/ChipsSelect/ChipsSelect.js +67 -38
  46. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  47. package/dist/components/CustomSelect/CustomSelect.d.ts +16 -2
  48. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  49. package/dist/components/CustomSelect/CustomSelect.js +99 -50
  50. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  51. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +6 -2
  52. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
  53. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +38 -20
  54. package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  55. package/dist/components/CustomSelect/helpers.d.ts +1 -0
  56. package/dist/components/CustomSelect/helpers.d.ts.map +1 -1
  57. package/dist/components/CustomSelect/helpers.js +11 -0
  58. package/dist/components/CustomSelect/helpers.js.map +1 -1
  59. package/dist/components/Div/Div.d.ts +3 -0
  60. package/dist/components/Div/Div.d.ts.map +1 -1
  61. package/dist/components/Div/Div.js +11 -1
  62. package/dist/components/Div/Div.js.map +1 -1
  63. package/dist/components/File/File.d.ts +16 -3
  64. package/dist/components/File/File.d.ts.map +1 -1
  65. package/dist/components/File/File.js +29 -17
  66. package/dist/components/File/File.js.map +1 -1
  67. package/dist/components/Input/Input.d.ts +16 -3
  68. package/dist/components/Input/Input.d.ts.map +1 -1
  69. package/dist/components/Input/Input.js +28 -13
  70. package/dist/components/Input/Input.js.map +1 -1
  71. package/dist/components/NativeSelect/NativeSelect.d.ts +17 -3
  72. package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
  73. package/dist/components/NativeSelect/NativeSelect.js +37 -14
  74. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  75. package/dist/components/Radio/Radio.d.ts +18 -3
  76. package/dist/components/Radio/Radio.d.ts.map +1 -1
  77. package/dist/components/Radio/Radio.js +31 -11
  78. package/dist/components/Radio/Radio.js.map +1 -1
  79. package/dist/components/Radio/RadioInput/RadioInput.d.ts +16 -3
  80. package/dist/components/Radio/RadioInput/RadioInput.d.ts.map +1 -1
  81. package/dist/components/Radio/RadioInput/RadioInput.js +22 -11
  82. package/dist/components/Radio/RadioInput/RadioInput.js.map +1 -1
  83. package/dist/components/Search/Search.d.ts +16 -3
  84. package/dist/components/Search/Search.d.ts.map +1 -1
  85. package/dist/components/Search/Search.js +50 -28
  86. package/dist/components/Search/Search.js.map +1 -1
  87. package/dist/components/Select/Select.d.ts.map +1 -1
  88. package/dist/components/Select/Select.js +10 -4
  89. package/dist/components/Select/Select.js.map +1 -1
  90. package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
  91. package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
  92. package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
  93. package/dist/components/Snackbar/Snackbar.d.ts +10 -1
  94. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  95. package/dist/components/Snackbar/Snackbar.js +20 -6
  96. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  97. package/dist/components/SplitLayout/SplitLayout.d.ts +16 -3
  98. package/dist/components/SplitLayout/SplitLayout.d.ts.map +1 -1
  99. package/dist/components/SplitLayout/SplitLayout.js +24 -9
  100. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  101. package/dist/components/Switch/Switch.d.ts +16 -3
  102. package/dist/components/Switch/Switch.d.ts.map +1 -1
  103. package/dist/components/Switch/Switch.js +32 -20
  104. package/dist/components/Switch/Switch.js.map +1 -1
  105. package/dist/components/Textarea/Textarea.d.ts +16 -3
  106. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  107. package/dist/components/Textarea/Textarea.js +36 -18
  108. package/dist/components/Textarea/Textarea.js.map +1 -1
  109. package/dist/components/WriteBar/WriteBar.d.ts +16 -3
  110. package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
  111. package/dist/components/WriteBar/WriteBar.js +28 -11
  112. package/dist/components/WriteBar/WriteBar.js.map +1 -1
  113. package/dist/components.css +1 -1
  114. package/dist/components.css.map +1 -1
  115. package/dist/cssm/components/Box/Box.js +19 -0
  116. package/dist/cssm/components/Box/Box.js.map +1 -0
  117. package/dist/cssm/components/CarouselBase/CarouselBase.js +4 -4
  118. package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
  119. package/dist/cssm/components/CarouselBase/constants.js +1 -1
  120. package/dist/cssm/components/CarouselBase/constants.js.map +1 -1
  121. package/dist/cssm/components/CarouselBase/hooks.js +46 -6
  122. package/dist/cssm/components/CarouselBase/hooks.js.map +1 -1
  123. package/dist/cssm/components/CarouselBase/types.js.map +1 -1
  124. package/dist/cssm/components/Checkbox/Checkbox.js +29 -6
  125. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  126. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js +24 -13
  127. package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
  128. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +24 -6
  129. package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
  130. package/dist/cssm/components/ChipsInput/ChipsInput.js +25 -11
  131. package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
  132. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +30 -12
  133. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  134. package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
  135. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +49 -30
  136. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  137. package/dist/cssm/components/CustomSelect/CustomSelect.js +73 -41
  138. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  139. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +20 -9
  140. package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
  141. package/dist/cssm/components/CustomSelect/helpers.js +11 -0
  142. package/dist/cssm/components/CustomSelect/helpers.js.map +1 -1
  143. package/dist/cssm/components/Div/Div.js +11 -1
  144. package/dist/cssm/components/Div/Div.js.map +1 -1
  145. package/dist/cssm/components/File/File.js +20 -7
  146. package/dist/cssm/components/File/File.js.map +1 -1
  147. package/dist/cssm/components/Input/Input.js +20 -7
  148. package/dist/cssm/components/Input/Input.js.map +1 -1
  149. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
  150. package/dist/cssm/components/NativeSelect/NativeSelect.js +25 -8
  151. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  152. package/dist/cssm/components/Radio/Radio.js +28 -8
  153. package/dist/cssm/components/Radio/Radio.js.map +1 -1
  154. package/dist/cssm/components/Radio/RadioInput/RadioInput.js +18 -6
  155. package/dist/cssm/components/Radio/RadioInput/RadioInput.js.map +1 -1
  156. package/dist/cssm/components/Search/Search.js +34 -17
  157. package/dist/cssm/components/Search/Search.js.map +1 -1
  158. package/dist/cssm/components/Select/Select.js +9 -1
  159. package/dist/cssm/components/Select/Select.js.map +1 -1
  160. package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
  161. package/dist/cssm/components/Snackbar/Snackbar.js +11 -2
  162. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  163. package/dist/cssm/components/SplitLayout/SplitLayout.js +22 -8
  164. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  165. package/dist/cssm/components/Switch/Switch.js +29 -17
  166. package/dist/cssm/components/Switch/Switch.js.map +1 -1
  167. package/dist/cssm/components/Textarea/Textarea.js +22 -8
  168. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  169. package/dist/cssm/components/WriteBar/WriteBar.js +24 -9
  170. package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
  171. package/dist/cssm/hooks/useMergeProps.js +38 -0
  172. package/dist/cssm/hooks/useMergeProps.js.map +1 -0
  173. package/dist/cssm/index.js +2 -0
  174. package/dist/cssm/index.js.map +1 -1
  175. package/dist/cssm/lib/animation/useCSSTransition.js +1 -1
  176. package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
  177. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  178. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  179. package/dist/cssm/lib/fx.js +55 -8
  180. package/dist/cssm/lib/fx.js.map +1 -1
  181. package/dist/cssm/lib/layouts/gaps.js.map +1 -1
  182. package/dist/cssm/lib/layouts/helpers.js +21 -0
  183. package/dist/cssm/lib/layouts/helpers.js.map +1 -0
  184. package/dist/cssm/lib/layouts/index.js +1 -0
  185. package/dist/cssm/lib/layouts/index.js.map +1 -1
  186. package/dist/cssm/lib/layouts/layoutProps.js +89 -0
  187. package/dist/cssm/lib/layouts/layoutProps.js.map +1 -0
  188. package/dist/cssm/lib/layouts/resolveLayoutProps.js +36 -0
  189. package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -0
  190. package/dist/cssm/lib/layouts/types.js +3 -0
  191. package/dist/cssm/lib/layouts/types.js.map +1 -0
  192. package/dist/cssm/lib/warnOnce.js +1 -1
  193. package/dist/cssm/lib/warnOnce.js.map +1 -1
  194. package/dist/cssm/styles/layout.css +922 -0
  195. package/dist/hooks/useMergeProps.d.ts +6 -0
  196. package/dist/hooks/useMergeProps.d.ts.map +1 -0
  197. package/dist/hooks/useMergeProps.js +42 -0
  198. package/dist/hooks/useMergeProps.js.map +1 -0
  199. package/dist/index.d.ts +3 -0
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/lib/animation/useCSSTransition.js +1 -1
  204. package/dist/lib/animation/useCSSTransition.js.map +1 -1
  205. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
  206. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  207. package/dist/lib/fx.d.ts +8 -1
  208. package/dist/lib/fx.d.ts.map +1 -1
  209. package/dist/lib/fx.js +55 -8
  210. package/dist/lib/fx.js.map +1 -1
  211. package/dist/lib/layouts/gaps.d.ts +4 -5
  212. package/dist/lib/layouts/gaps.d.ts.map +1 -1
  213. package/dist/lib/layouts/gaps.js.map +1 -1
  214. package/dist/lib/layouts/helpers.d.ts +17 -0
  215. package/dist/lib/layouts/helpers.d.ts.map +1 -0
  216. package/dist/lib/layouts/helpers.js +21 -0
  217. package/dist/lib/layouts/helpers.js.map +1 -0
  218. package/dist/lib/layouts/index.d.ts +2 -0
  219. package/dist/lib/layouts/index.d.ts.map +1 -1
  220. package/dist/lib/layouts/index.js +1 -0
  221. package/dist/lib/layouts/index.js.map +1 -1
  222. package/dist/lib/layouts/layoutProps.d.ts +33 -0
  223. package/dist/lib/layouts/layoutProps.d.ts.map +1 -0
  224. package/dist/lib/layouts/layoutProps.js +89 -0
  225. package/dist/lib/layouts/layoutProps.js.map +1 -0
  226. package/dist/lib/layouts/resolveLayoutProps.d.ts +18 -0
  227. package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -0
  228. package/dist/lib/layouts/resolveLayoutProps.js +35 -0
  229. package/dist/lib/layouts/resolveLayoutProps.js.map +1 -0
  230. package/dist/lib/layouts/types.d.ts +123 -0
  231. package/dist/lib/layouts/types.d.ts.map +1 -0
  232. package/dist/lib/layouts/types.js +3 -0
  233. package/dist/lib/layouts/types.js.map +1 -0
  234. package/dist/lib/warnOnce.js +1 -1
  235. package/dist/lib/warnOnce.js.map +1 -1
  236. package/dist/vkui.css +1 -1
  237. package/dist/vkui.css.map +1 -1
  238. package/package.json +2 -2
  239. package/src/components/Box/Box.tsx +26 -0
  240. package/src/components/CarouselBase/CarouselBase.tsx +11 -4
  241. package/src/components/CarouselBase/constants.ts +1 -1
  242. package/src/components/CarouselBase/hooks.ts +31 -6
  243. package/src/components/CarouselBase/types.ts +13 -0
  244. package/src/components/Checkbox/Checkbox.tsx +57 -7
  245. package/src/components/Checkbox/CheckboxInput/CheckboxInput.tsx +51 -18
  246. package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +36 -6
  247. package/src/components/ChipsInput/ChipsInput.tsx +38 -11
  248. package/src/components/ChipsInputBase/ChipsInputBase.tsx +60 -17
  249. package/src/components/ChipsInputBase/types.ts +15 -4
  250. package/src/components/ChipsSelect/ChipsSelect.tsx +71 -33
  251. package/src/components/CustomSelect/CustomSelect.tsx +135 -45
  252. package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +48 -17
  253. package/src/components/CustomSelect/helpers.ts +23 -0
  254. package/src/components/Div/Div.tsx +13 -3
  255. package/src/components/File/File.tsx +48 -11
  256. package/src/components/Input/Input.tsx +51 -14
  257. package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
  258. package/src/components/NativeSelect/NativeSelect.tsx +57 -18
  259. package/src/components/Radio/Radio.tsx +51 -8
  260. package/src/components/Radio/RadioInput/RadioInput.tsx +35 -11
  261. package/src/components/Search/Search.tsx +80 -29
  262. package/src/components/Select/Select.tsx +22 -3
  263. package/src/components/SelectionControl/SelectionControl.tsx +2 -1
  264. package/src/components/Snackbar/Snackbar.tsx +35 -5
  265. package/src/components/SplitLayout/SplitLayout.tsx +46 -12
  266. package/src/components/Switch/Switch.tsx +62 -31
  267. package/src/components/Textarea/Textarea.tsx +58 -14
  268. package/src/components/WriteBar/WriteBar.tsx +59 -13
  269. package/src/hooks/useMergeProps.ts +66 -0
  270. package/src/index.ts +3 -0
  271. package/src/lib/animation/useCSSTransition.ts +1 -1
  272. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
  273. package/src/lib/fx.ts +63 -8
  274. package/src/lib/layouts/gaps.ts +4 -5
  275. package/src/lib/layouts/helpers.ts +24 -0
  276. package/src/lib/layouts/index.ts +13 -0
  277. package/src/lib/layouts/layoutProps.ts +75 -0
  278. package/src/lib/layouts/resolveLayoutProps.ts +51 -0
  279. package/src/lib/layouts/types.ts +142 -0
  280. package/src/lib/warnOnce.ts +1 -1
  281. package/src/styles/layout.css +1 -0
  282. package/src/styles/layout.css.d.ts.map +1 -0
@@ -1,6 +1,19 @@
1
1
  import * as React from 'react';
2
- import type { HasRef, HasRootRef } from '../../../types';
3
- export interface RadioInputProps extends Omit<React.ComponentProps<'input'>, 'type'>, HasRootRef<HTMLLabelElement>, HasRef<HTMLInputElement> {
2
+ import type { HasDataAttribute, HasRootRef } from '../../../types';
3
+ export interface RadioInputProps extends Omit<React.ComponentProps<'input'>, 'type'>, HasRootRef<HTMLLabelElement> {
4
+ /**
5
+ * Свойства, которые можно прокинуть внутрь компонента:
6
+ * - `root`: свойства для прокидывания в корень компонента;
7
+ * - `input`: свойства для прокидывания в скрытый `input`.
8
+ */
9
+ slotProps?: {
10
+ root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> & HasRootRef<HTMLLabelElement> & HasDataAttribute;
11
+ input?: Omit<React.ComponentProps<'input'>, 'type'> & HasRootRef<HTMLInputElement> & HasDataAttribute;
12
+ };
13
+ /**
14
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
15
+ */
16
+ getRef?: React.Ref<HTMLInputElement>;
4
17
  }
5
- export declare function RadioInput({ className, style, getRootRef, getRef, ...restProps }: RadioInputProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function RadioInput({ className, style, getRootRef, getRef, slotProps, ...restProps }: RadioInputProps): import("react/jsx-runtime").JSX.Element;
6
19
  //# sourceMappingURL=RadioInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioInput.d.ts","sourceRoot":"","sources":["../../../../src/components/Radio/RadioInput/RadioInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAgCzD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAE/B,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,GAAG,SAAS,EACb,EAAE,eAAe,2CAajB"}
1
+ {"version":3,"file":"RadioInput.d.ts","sourceRoot":"","sources":["../../../../src/components/Radio/RadioInput/RadioInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkCnE,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAClE,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;QACnB,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GACjD,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,KAAK,EACL,UAAU,EACV,MAAM,EACN,SAAS,EACT,GAAG,SAAS,EACb,EAAE,eAAe,2CAejB"}
@@ -4,9 +4,12 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
+ import { useMergeProps } from "../../../hooks/useMergeProps.js";
8
+ import { warnOnce } from "../../../lib/warnOnce.js";
7
9
  import { AdaptiveIconRenderer } from "../../AdaptiveIconRenderer/AdaptiveIconRenderer.js";
8
10
  import { RootComponent } from "../../RootComponent/RootComponent.js";
9
11
  import { VisuallyHidden } from "../../VisuallyHidden/VisuallyHidden.js";
12
+ const warn = warnOnce('Radio.Input');
10
13
  function RadioIcon24(props) {
11
14
  return /*#__PURE__*/ _jsxs("svg", _object_spread_props(_object_spread({
12
15
  xmlns: "http://www.w3.org/2000/svg",
@@ -69,26 +72,34 @@ function RadioIcon() {
69
72
  });
70
73
  }
71
74
  export function RadioInput(_param) {
72
- var { className, style, getRootRef, getRef } = _param, restProps = _object_without_properties(_param, [
75
+ var { className, style, getRootRef, getRef, slotProps } = _param, restProps = _object_without_properties(_param, [
73
76
  "className",
74
77
  "style",
75
78
  "getRootRef",
76
- "getRef"
79
+ "getRef",
80
+ "slotProps"
77
81
  ]);
78
- return /*#__PURE__*/ _jsxs(RootComponent, {
79
- className: className,
80
- style: style,
81
- getRootRef: getRootRef,
82
+ if (process.env.NODE_ENV === 'development' && getRef) {
83
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
84
+ }
85
+ const rootRest = useMergeProps({
86
+ className,
87
+ style,
88
+ getRootRef
89
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
90
+ const inputProps = useMergeProps(_object_spread({
91
+ getRootRef: getRef
92
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input);
93
+ return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({}, rootRest), {
82
94
  children: [
83
- /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread_props(_object_spread({}, restProps), {
95
+ /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread({
84
96
  Component: "input",
85
97
  type: "radio",
86
- baseClassName: "vkuiRadioInput__input",
87
- getRootRef: getRef
88
- })),
98
+ baseClassName: "vkuiRadioInput__input"
99
+ }, inputProps)),
89
100
  /*#__PURE__*/ _jsx(RadioIcon, {})
90
101
  ]
91
- });
102
+ }));
92
103
  }
93
104
 
94
105
  //# sourceMappingURL=RadioInput.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Radio/RadioInput/RadioInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { HasRef, HasRootRef } from '../../../types';\nimport { AdaptiveIconRenderer } from '../../AdaptiveIconRenderer/AdaptiveIconRenderer';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden';\nimport styles from './RadioInput.module.css';\n\nfunction RadioIcon24(props: React.ComponentProps<'svg'>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" aria-hidden {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"7\" className={styles.pin} fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction RadioIcon20(props: React.ComponentProps<'svg'>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" aria-hidden {...props}>\n <circle cx=\"10\" cy=\"10\" r=\"7.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n <circle cx=\"10\" cy=\"10\" r=\"5.5\" className={styles.pin} fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction RadioIcon() {\n return (\n <div className={styles.icon}>\n <AdaptiveIconRenderer IconCompact={RadioIcon20} IconRegular={RadioIcon24} />\n </div>\n );\n}\n\nexport interface RadioInputProps\n extends Omit<React.ComponentProps<'input'>, 'type'>,\n HasRootRef<HTMLLabelElement>,\n HasRef<HTMLInputElement> {}\n\nexport function RadioInput({\n className,\n style,\n getRootRef,\n getRef,\n ...restProps\n}: RadioInputProps) {\n return (\n <RootComponent className={className} style={style} getRootRef={getRootRef}>\n <VisuallyHidden\n {...restProps}\n Component=\"input\"\n type=\"radio\"\n baseClassName={styles.input}\n getRootRef={getRef}\n />\n <RadioIcon />\n </RootComponent>\n );\n}\n"],"names":["React","AdaptiveIconRenderer","RootComponent","VisuallyHidden","RadioIcon24","props","svg","xmlns","width","height","aria-hidden","circle","cx","cy","r","stroke","strokeWidth","fill","className","RadioIcon20","RadioIcon","div","IconCompact","IconRegular","RadioInput","style","getRootRef","getRef","restProps","Component","type","baseClassName"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,oBAAoB,QAAQ,qDAAkD;AACvF,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,cAAc,QAAQ,yCAAsC;AAGrE,SAASC,YAAYC,KAAkC;IACrD,qBACE,MAACC;QAAIC,OAAM;QAA6BC,OAAM;QAAKC,QAAO;QAAKC,aAAW;OAAKL;;0BAC7E,KAACM;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAKC,QAAO;gBAAeC,aAAY;gBAAIC,MAAK;;0BAC1E,KAACN;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAII,SAAS;gBAAcD,MAAK;;;;AAGhE;AAEA,SAASE,YAAYd,KAAkC;IACrD,qBACE,MAACC;QAAIC,OAAM;QAA6BC,OAAM;QAAKC,QAAO;QAAKC,aAAW;OAAKL;;0BAC7E,KAACM;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAOC,QAAO;gBAAeC,aAAY;gBAAMC,MAAK;;0BAC9E,KAACN;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAMI,SAAS;gBAAcD,MAAK;;;;AAGlE;AAEA,SAASG;IACP,qBACE,KAACC;QAAIH,SAAS;kBACZ,cAAA,KAACjB;YAAqBqB,aAAaH;YAAaI,aAAanB;;;AAGnE;AAOA,OAAO,SAASoB,WAAW;QAAA,EACzBN,SAAS,EACTO,KAAK,EACLC,UAAU,EACVC,MAAM,EAEU,GANS,QAKtBC,uCALsB;QACzBV;QACAO;QACAC;QACAC;;IAGA,qBACE,MAACzB;QAAcgB,WAAWA;QAAWO,OAAOA;QAAOC,YAAYA;;0BAC7D,KAACvB,wDACKyB;gBACJC,WAAU;gBACVC,MAAK;gBACLC,aAAa;gBACbL,YAAYC;;0BAEd,KAACP;;;AAGP"}
1
+ {"version":3,"sources":["../../../../src/components/Radio/RadioInput/RadioInput.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useMergeProps } from '../../../hooks/useMergeProps';\nimport { warnOnce } from '../../../lib/warnOnce';\nimport type { HasDataAttribute, HasRootRef } from '../../../types';\nimport { AdaptiveIconRenderer } from '../../AdaptiveIconRenderer/AdaptiveIconRenderer';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { VisuallyHidden } from '../../VisuallyHidden/VisuallyHidden';\nimport styles from './RadioInput.module.css';\n\nconst warn = warnOnce('Radio.Input');\n\nfunction RadioIcon24(props: React.ComponentProps<'svg'>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" aria-hidden {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n <circle cx=\"12\" cy=\"12\" r=\"7\" className={styles.pin} fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction RadioIcon20(props: React.ComponentProps<'svg'>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" aria-hidden {...props}>\n <circle cx=\"10\" cy=\"10\" r=\"7.75\" stroke=\"currentColor\" strokeWidth=\"1.5\" fill=\"none\" />\n <circle cx=\"10\" cy=\"10\" r=\"5.5\" className={styles.pin} fill=\"currentColor\" />\n </svg>\n );\n}\n\nfunction RadioIcon() {\n return (\n <div className={styles.icon}>\n <AdaptiveIconRenderer IconCompact={RadioIcon20} IconRegular={RadioIcon24} />\n </div>\n );\n}\n\nexport interface RadioInputProps\n extends Omit<React.ComponentProps<'input'>, 'type'>,\n HasRootRef<HTMLLabelElement> {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `input`: свойства для прокидывания в скрытый `input`.\n */\n slotProps?: {\n root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> &\n HasRootRef<HTMLLabelElement> &\n HasDataAttribute;\n input?: Omit<React.ComponentProps<'input'>, 'type'> &\n HasRootRef<HTMLInputElement> &\n HasDataAttribute;\n };\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLInputElement>;\n}\n\nexport function RadioInput({\n className,\n style,\n getRootRef,\n getRef,\n slotProps,\n ...restProps\n}: RadioInputProps) {\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n\n const rootRest = useMergeProps({ className, style, getRootRef }, slotProps?.root);\n\n const inputProps = useMergeProps({ getRootRef: getRef, ...restProps }, slotProps?.input);\n\n return (\n <RootComponent {...rootRest}>\n <VisuallyHidden Component=\"input\" type=\"radio\" baseClassName={styles.input} {...inputProps} />\n <RadioIcon />\n </RootComponent>\n );\n}\n"],"names":["React","useMergeProps","warnOnce","AdaptiveIconRenderer","RootComponent","VisuallyHidden","warn","RadioIcon24","props","svg","xmlns","width","height","aria-hidden","circle","cx","cy","r","stroke","strokeWidth","fill","className","RadioIcon20","RadioIcon","div","IconCompact","IconRegular","RadioInput","style","getRootRef","getRef","slotProps","restProps","process","env","NODE_ENV","rootRest","root","inputProps","input","Component","type","baseClassName"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,kCAA+B;AAC7D,SAASC,QAAQ,QAAQ,2BAAwB;AAEjD,SAASC,oBAAoB,QAAQ,qDAAkD;AACvF,SAASC,aAAa,QAAQ,uCAAoC;AAClE,SAASC,cAAc,QAAQ,yCAAsC;AAGrE,MAAMC,OAAOJ,SAAS;AAEtB,SAASK,YAAYC,KAAkC;IACrD,qBACE,MAACC;QAAIC,OAAM;QAA6BC,OAAM;QAAKC,QAAO;QAAKC,aAAW;OAAKL;;0BAC7E,KAACM;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAKC,QAAO;gBAAeC,aAAY;gBAAIC,MAAK;;0BAC1E,KAACN;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAII,SAAS;gBAAcD,MAAK;;;;AAGhE;AAEA,SAASE,YAAYd,KAAkC;IACrD,qBACE,MAACC;QAAIC,OAAM;QAA6BC,OAAM;QAAKC,QAAO;QAAKC,aAAW;OAAKL;;0BAC7E,KAACM;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAOC,QAAO;gBAAeC,aAAY;gBAAMC,MAAK;;0BAC9E,KAACN;gBAAOC,IAAG;gBAAKC,IAAG;gBAAKC,GAAE;gBAAMI,SAAS;gBAAcD,MAAK;;;;AAGlE;AAEA,SAASG;IACP,qBACE,KAACC;QAAIH,SAAS;kBACZ,cAAA,KAAClB;YAAqBsB,aAAaH;YAAaI,aAAanB;;;AAGnE;AAwBA,OAAO,SAASoB,WAAW;QAAA,EACzBN,SAAS,EACTO,KAAK,EACLC,UAAU,EACVC,MAAM,EACNC,SAAS,EAEO,GAPS,QAMtBC,uCANsB;QACzBX;QACAO;QACAC;QACAC;QACAC;;IAGA,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiBL,QAAQ;QACpDxB,KAAK;IACP;IAEA,MAAM8B,WAAWnC,cAAc;QAAEoB;QAAWO;QAAOC;IAAW,GAAGE,sBAAAA,gCAAAA,UAAWM,IAAI;IAEhF,MAAMC,aAAarC,cAAc;QAAE4B,YAAYC;OAAWE,YAAaD,sBAAAA,gCAAAA,UAAWQ,KAAK;IAEvF,qBACE,MAACnC,uDAAkBgC;;0BACjB,KAAC/B;gBAAemC,WAAU;gBAAQC,MAAK;gBAAQC,aAAa;eAAoBJ;0BAChF,KAACf;;;AAGP"}
@@ -1,8 +1,21 @@
1
1
  import * as React from 'react';
2
- import type { HasDataAttribute, HasRef, HasRootRef } from '../../types';
2
+ import type { HasDataAttribute, HasRootRef } from '../../types';
3
3
  import { type IconButtonProps } from '../IconButton/IconButton';
4
4
  export type RenderIconButtonFn = (icon: React.ReactNode, props?: Partial<IconButtonProps> & HasDataAttribute) => React.ReactElement;
5
- export interface SearchProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasRef<HTMLInputElement> {
5
+ export interface SearchProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLDivElement> {
6
+ /**
7
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
8
+ */
9
+ getRef?: React.Ref<HTMLInputElement>;
10
+ /**
11
+ * Свойства, которые можно прокинуть внутрь компонента:
12
+ * - `root`: свойства для прокидывания в корень компонента;
13
+ * - `input`: свойства для прокидывания в поле ввода.
14
+ */
15
+ slotProps?: {
16
+ root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;
17
+ input?: React.InputHTMLAttributes<HTMLInputElement> & HasRootRef<HTMLInputElement> & HasDataAttribute;
18
+ };
6
19
  /**
7
20
  * Only iOS. Текст кнопки "отмена", которая чистит текстовое поле и убирает фокус.
8
21
  */
@@ -59,5 +72,5 @@ export interface SearchProps extends React.InputHTMLAttributes<HTMLInputElement>
59
72
  /**
60
73
  * @see https://vkui.io/components/search
61
74
  */
62
- export declare const Search: ({ id: idProp, before, className, placeholder, after, getRef, icon: iconProp, onIconClick, style, autoComplete, onChange, iconLabel, clearLabel, clearButtonTestId, noPadding, getRootRef, findButtonText, findButtonTestId, onFindButtonClick, hideClearButton, ...inputProps }: SearchProps) => React.ReactNode;
75
+ export declare const Search: ({ className, getRootRef, style, placeholder: placeholderProp, before, after, getRef, icon: iconProp, onIconClick, autoComplete: autoCompleteProp, iconLabel, clearLabel, clearButtonTestId, noPadding, findButtonText, findButtonTestId, onFindButtonClick, hideClearButton, slotProps, ...inputProps }: SearchProps) => React.ReactNode;
63
76
  //# sourceMappingURL=Search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../src/components/Search/Search.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAK5E,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,KAAK,CAAC,SAAS,EACrB,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,gBAAgB,KAChD,KAAK,CAAC,YAAY,CAAC;AAExB,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,cAAc,CAAC,EAC1B,MAAM,CAAC,gBAAgB,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,kBAAkB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7E;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,iRAsBpB,WAAW,KAAG,KAAK,CAAC,SA0LtB,CAAC"}
1
+ {"version":3,"file":"Search.d.ts","sourceRoot":"","sources":["../../../src/components/Search/Search.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQ5E,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,KAAK,CAAC,SAAS,EACrB,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,gBAAgB,KAChD,KAAK,CAAC,YAAY,CAAC;AAExB,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,cAAc,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC;QAC5F,KAAK,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GACjD,UAAU,CAAC,gBAAgB,CAAC,GAC5B,gBAAgB,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,kBAAkB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7E;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzD;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,ySAsBpB,WAAW,KAAG,KAAK,CAAC,SA0NtB,CAAC"}
@@ -11,47 +11,72 @@ import { useAdaptivityConditionalRender } from "../../hooks/useAdaptivityConditi
11
11
  import { useBooleanState } from "../../hooks/useBooleanState.js";
12
12
  import { useConfigDirection } from "../../hooks/useConfigDirection.js";
13
13
  import { useExternRef } from "../../hooks/useExternRef.js";
14
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
14
15
  import { useNativeFormResetListener } from "../../hooks/useNativeFormResetListener.js";
15
16
  import { usePlatform } from "../../hooks/usePlatform.js";
16
17
  import { callMultiple } from "../../lib/callMultiple.js";
17
18
  import { touchEnabled } from "../../lib/touch/index.js";
18
19
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
20
+ import { warnOnce } from "../../lib/warnOnce.js";
19
21
  import { Button } from "../Button/Button.js";
20
22
  import { IconButton } from "../IconButton/IconButton.js";
23
+ import { RootComponent } from "../RootComponent/RootComponent.js";
21
24
  import { Headline } from "../Typography/Headline/Headline.js";
22
25
  import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
26
+ const warn = warnOnce('Search');
23
27
  /**
24
28
  * @see https://vkui.io/components/search
25
29
  */ export const Search = (_param)=>{
26
- var { id: idProp, before = /*#__PURE__*/ _jsx(Icon16SearchOutline, {}), className, placeholder = 'Поиск', after = 'Отмена', getRef, icon: iconProp, onIconClick, style, autoComplete = 'off', onChange, iconLabel, clearLabel = 'Очистить', clearButtonTestId, noPadding, getRootRef, findButtonText = 'Найти', findButtonTestId, onFindButtonClick, hideClearButton } = _param, inputProps = _object_without_properties(_param, [
27
- "id",
28
- "before",
30
+ var { className, getRootRef, style, placeholder: placeholderProp = 'Поиск', before = /*#__PURE__*/ _jsx(Icon16SearchOutline, {}), after = 'Отмена', getRef, icon: iconProp, onIconClick, autoComplete: autoCompleteProp = 'off', iconLabel, clearLabel = 'Очистить', clearButtonTestId, noPadding, findButtonText = 'Найти', findButtonTestId, onFindButtonClick, hideClearButton, slotProps } = _param, inputProps = _object_without_properties(_param, [
29
31
  "className",
32
+ "getRootRef",
33
+ "style",
30
34
  "placeholder",
35
+ "before",
31
36
  "after",
32
37
  "getRef",
33
38
  "icon",
34
39
  "onIconClick",
35
- "style",
36
40
  "autoComplete",
37
- "onChange",
38
41
  "iconLabel",
39
42
  "clearLabel",
40
43
  "clearButtonTestId",
41
44
  "noPadding",
42
- "getRootRef",
43
45
  "findButtonText",
44
46
  "findButtonTestId",
45
47
  "onFindButtonClick",
46
- "hideClearButton"
48
+ "hideClearButton",
49
+ "slotProps"
47
50
  ]);
51
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
52
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
53
+ }
48
54
  const direction = useConfigDirection();
49
55
  const isRtl = direction === 'rtl';
50
- const inputRef = useExternRef(getRef);
56
+ const rootRest = useMergeProps({
57
+ className,
58
+ style,
59
+ getRootRef
60
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
61
+ const _useMergeProps = useMergeProps(_object_spread({
62
+ getRootRef: getRef,
63
+ placeholder: placeholderProp,
64
+ autoComplete: autoCompleteProp,
65
+ className: "vkuiSearch__nativeInput"
66
+ }, inputProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input), { id, placeholder, onChange, autoComplete, getRootRef: getInputRef, onFocus: onInputFocus, onBlur: onInputBlur } = _useMergeProps, inputRest = _object_without_properties(_useMergeProps, [
67
+ "id",
68
+ "placeholder",
69
+ "onChange",
70
+ "autoComplete",
71
+ "getRootRef",
72
+ "onFocus",
73
+ "onBlur"
74
+ ]);
75
+ const inputRef = useExternRef(getInputRef);
51
76
  const { value: isFocused, setTrue: setFocusedTrue, setFalse: setFocusedFalse } = useBooleanState(false);
52
77
  const generatedId = React.useId();
53
- const inputId = idProp ? idProp : `search-${generatedId}`;
54
- const [hasValue, setHasValue] = React.useState(()=>Boolean(inputProps.value || inputProps.defaultValue));
78
+ const inputId = id ? id : `search-${generatedId}`;
79
+ const [hasValue, setHasValue] = React.useState(()=>Boolean(inputRest.value || inputRest.defaultValue));
55
80
  const checkHasValue = (e)=>setHasValue(Boolean(e.currentTarget.value));
56
81
  const { sizeY = 'none' } = useAdaptivity();
57
82
  const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();
@@ -59,11 +84,11 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
59
84
  const hasAfter = platform === 'ios' && hasReactNode(after);
60
85
  const onFocus = (e)=>{
61
86
  setFocusedTrue();
62
- inputProps.onFocus && inputProps.onFocus(e);
87
+ onInputFocus && onInputFocus(e);
63
88
  };
64
89
  const onBlur = (e)=>{
65
90
  setFocusedFalse();
66
- inputProps.onBlur && inputProps.onBlur(e);
91
+ onInputBlur && onInputBlur(e);
67
92
  };
68
93
  const onCancel = React.useCallback(()=>{
69
94
  var _Object_getOwnPropertyDescriptor, _inputRef_current;
@@ -92,14 +117,14 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
92
117
  onCancel
93
118
  ]);
94
119
  useIsomorphicLayoutEffect(()=>{
95
- if (inputProps.value !== undefined) {
96
- setHasValue(Boolean(inputProps.value));
120
+ if (inputRest.value !== undefined) {
121
+ setHasValue(Boolean(inputRest.value));
97
122
  }
98
123
  }, [
99
- inputProps.value
124
+ inputRest.value
100
125
  ]);
101
126
  useNativeFormResetListener(inputRef, ()=>{
102
- setHasValue(Boolean(inputProps.defaultValue));
127
+ setHasValue(Boolean(inputRest.defaultValue));
103
128
  });
104
129
  const renderIconButton = (icon, props = {})=>/*#__PURE__*/ _jsxs(IconButton, _object_spread_props(_object_spread({
105
130
  hoverMode: "opacity",
@@ -117,10 +142,9 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
117
142
  ]
118
143
  }));
119
144
  const showControls = Boolean(iconProp || !hideClearButton || adaptiveSizeY.compact && onFindButtonClick);
120
- return /*#__PURE__*/ _jsxs("div", {
121
- className: classNames('vkuiInternalSearch', "vkuiSearch__host", sizeY === 'none' && "vkuiSearch__sizeYNone", sizeY === 'compact' && "vkuiSearch__sizeYCompact", isFocused && "vkuiSearch__focused", hasValue && "vkuiSearch__hasValue", hasAfter && "vkuiSearch__hasAfter", iconProp && "vkuiSearch__hasIcon", inputProps.disabled && "vkuiSearch__disabled", !noPadding && "vkuiSearch__withPadding", isRtl && "vkuiSearch__rtl", className),
122
- ref: getRootRef,
123
- style: style,
145
+ return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
146
+ baseClassName: classNames('vkuiInternalSearch', "vkuiSearch__host", sizeY === 'none' && "vkuiSearch__sizeYNone", sizeY === 'compact' && "vkuiSearch__sizeYCompact", isFocused && "vkuiSearch__focused", hasValue && "vkuiSearch__hasValue", hasAfter && "vkuiSearch__hasAfter", iconProp && "vkuiSearch__hasIcon", inputRest.disabled && "vkuiSearch__disabled", !noPadding && "vkuiSearch__withPadding", isRtl && "vkuiSearch__rtl")
147
+ }, rootRest), {
124
148
  children: [
125
149
  /*#__PURE__*/ _jsxs("div", {
126
150
  className: "vkuiSearch__field",
@@ -134,21 +158,19 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
134
158
  className: "vkuiSearch__input",
135
159
  children: [
136
160
  before,
137
- /*#__PURE__*/ _jsx(Headline, _object_spread_props(_object_spread({
161
+ /*#__PURE__*/ _jsx(Headline, _object_spread({
138
162
  Component: "input",
139
163
  type: "search",
140
164
  level: "1",
141
- weight: "3"
142
- }, inputProps), {
165
+ weight: "3",
143
166
  id: inputId,
144
167
  placeholder: placeholder,
145
168
  autoComplete: autoComplete,
146
169
  getRootRef: inputRef,
147
- className: "vkuiSearch__nativeInput",
170
+ onChange: callMultiple(onChange, checkHasValue),
148
171
  onFocus: onFocus,
149
- onBlur: onBlur,
150
- onChange: callMultiple(onChange, checkHasValue)
151
- }))
172
+ onBlur: onBlur
173
+ }, inputRest))
152
174
  ]
153
175
  }),
154
176
  showControls && /*#__PURE__*/ _jsxs("div", {
@@ -202,7 +224,7 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
202
224
  })
203
225
  })
204
226
  ]
205
- });
227
+ }));
206
228
  };
207
229
 
208
230
  //# sourceMappingURL=Search.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon16SearchOutline, Icon24Cancel } from '@vkontakte/icons';\nimport { classNames, hasReactNode, noop } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useNativeFormResetListener } from '../../hooks/useNativeFormResetListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { touchEnabled } from '../../lib/touch';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasDataAttribute, HasRef, HasRootRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { IconButton, type IconButtonProps } from '../IconButton/IconButton';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Search.module.css';\n\nexport type RenderIconButtonFn = (\n icon: React.ReactNode,\n props?: Partial<IconButtonProps> & HasDataAttribute,\n) => React.ReactElement;\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasRef<HTMLInputElement> {\n /**\n * Only iOS. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n /**\n * Контент, отображаемый перед полем ввода.\n */\n before?: React.ReactNode;\n /**\n * Иконка поиска. Может быть React-элементом или функцией, возвращающей элемент.\n */\n icon?: React.ReactNode | ((renderFn: RenderIconButtonFn) => React.ReactNode);\n /**\n * Обработчик нажатия на иконку поиска.\n */\n onIconClick?: React.PointerEventHandler<HTMLElement>;\n /**\n * Значение поля ввода по умолчанию.\n */\n defaultValue?: string;\n /**\n * Текст для скринридеров, описывающий иконку поиска.\n */\n iconLabel?: string;\n /**\n * Текст для скринридеров, описывающий кнопку очистки.\n */\n clearLabel?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Удаляет отступы у компонента.\n */\n noPadding?: boolean;\n /**\n * Текст для кнопки Найти.\n */\n findButtonText?: string;\n /**\n * Обработчик, при нажатии на кнопку \"Найти\".\n */\n onFindButtonClick?: React.MouseEventHandler<HTMLElement>;\n /**\n * Передает атрибут `data-testid` для кнопки поиска.\n */\n findButtonTestId?: string;\n /**\n * Скрывает кнопку очистки.\n */\n hideClearButton?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/search\n */\nexport const Search = ({\n id: idProp,\n before = <Icon16SearchOutline />,\n className,\n placeholder = 'Поиск',\n after = 'Отмена',\n getRef,\n icon: iconProp,\n onIconClick,\n style,\n autoComplete = 'off',\n onChange,\n iconLabel,\n clearLabel = 'Очистить',\n clearButtonTestId,\n noPadding,\n getRootRef,\n findButtonText = 'Найти',\n findButtonTestId,\n onFindButtonClick,\n hideClearButton,\n ...inputProps\n}: SearchProps): React.ReactNode => {\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n const inputRef = useExternRef(getRef);\n const {\n value: isFocused,\n setTrue: setFocusedTrue,\n setFalse: setFocusedFalse,\n } = useBooleanState(false);\n const generatedId = React.useId();\n const inputId = idProp ? idProp : `search-${generatedId}`;\n\n const [hasValue, setHasValue] = React.useState<boolean>(() =>\n Boolean(inputProps.value || inputProps.defaultValue),\n );\n const checkHasValue: React.ChangeEventHandler<HTMLInputElement> = (e) =>\n setHasValue(Boolean(e.currentTarget.value));\n\n const { sizeY = 'none' } = useAdaptivity();\n const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();\n const platform = usePlatform();\n\n const hasAfter = platform === 'ios' && hasReactNode(after);\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedTrue();\n inputProps.onFocus && inputProps.onFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedFalse();\n inputProps.onBlur && inputProps.onBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value',\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, '');\n\n const ev2 = new Event('input', { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart: React.PointerEventHandler<HTMLElement> = React.useCallback(\n (e) => onIconClick?.(e),\n [onIconClick],\n );\n\n const onIconCancelClickStart: React.PointerEventHandler<HTMLElement> = React.useCallback(\n (e) => {\n e.preventDefault();\n inputRef.current?.focus();\n if (touchEnabled()) {\n onCancel();\n }\n },\n [inputRef, onCancel],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (inputProps.value !== undefined) {\n setHasValue(Boolean(inputProps.value));\n }\n }, [inputProps.value]);\n\n useNativeFormResetListener(inputRef, () => {\n setHasValue(Boolean(inputProps.defaultValue));\n });\n\n const renderIconButton: RenderIconButtonFn = (icon, props = {}) => (\n <IconButton\n hoverMode=\"opacity\"\n onPointerDown={onIconClickStart}\n className={styles.icon}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n onClick={noop}\n {...props}\n >\n <VisuallyHidden>{iconLabel}</VisuallyHidden>\n {icon}\n </IconButton>\n );\n\n const showControls = Boolean(\n iconProp || !hideClearButton || (adaptiveSizeY.compact && onFindButtonClick),\n );\n\n return (\n <div\n className={classNames(\n 'vkuiInternalSearch',\n styles.host,\n sizeY === 'none' && styles.sizeYNone,\n sizeY === 'compact' && styles.sizeYCompact,\n isFocused && styles.focused,\n hasValue && styles.hasValue,\n hasAfter && styles.hasAfter,\n iconProp && styles.hasIcon,\n inputProps.disabled && styles.disabled,\n !noPadding && styles.withPadding,\n isRtl && styles.rtl,\n className,\n )}\n ref={getRootRef}\n style={style}\n >\n <div className={styles.field}>\n <label htmlFor={inputId} className={styles.label}>\n {placeholder}\n </label>\n <div className={styles.input}>\n {before}\n <Headline\n Component=\"input\"\n type=\"search\"\n level=\"1\"\n weight=\"3\"\n {...inputProps}\n id={inputId}\n placeholder={placeholder}\n autoComplete={autoComplete}\n getRootRef={inputRef}\n className={styles.nativeInput}\n onFocus={onFocus}\n onBlur={onBlur}\n onChange={callMultiple(onChange, checkHasValue)}\n />\n </div>\n {showControls && (\n <div className={styles.controls}>\n {iconProp &&\n (typeof iconProp === 'function'\n ? iconProp(renderIconButton)\n : renderIconButton(iconProp))}\n {!hideClearButton && (\n <IconButton\n hoverMode=\"opacity\"\n onPointerDown={onIconCancelClickStart}\n onClick={onCancel}\n className={styles.icon}\n tabIndex={hasValue ? undefined : -1}\n disabled={inputProps.disabled}\n data-testid={clearButtonTestId}\n >\n <VisuallyHidden>{clearLabel}</VisuallyHidden>\n {platform === 'ios' ? <Icon16Clear /> : <Icon24Cancel />}\n </IconButton>\n )}\n {adaptiveSizeY.compact && onFindButtonClick && (\n <Button\n mode=\"primary\"\n size=\"m\"\n className={classNames(styles.findButton, adaptiveSizeY.compact.className)}\n focusVisibleMode=\"inside\"\n onClick={onFindButtonClick}\n tabIndex={hasValue ? undefined : -1}\n data-testid={findButtonTestId}\n >\n {findButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n {hasAfter && (\n <div className={styles.after}>\n <Button\n mode=\"tertiary\"\n size=\"m\"\n focusVisibleMode=\"inside\"\n hoverMode=\"opacity\"\n activeMode=\"opacity\"\n onClick={onCancel}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n >\n <span className={styles.afterTextClip}>{after}</span>\n </Button>\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","Icon16Clear","Icon16SearchOutline","Icon24Cancel","classNames","hasReactNode","noop","useAdaptivity","useAdaptivityConditionalRender","useBooleanState","useConfigDirection","useExternRef","useNativeFormResetListener","usePlatform","callMultiple","touchEnabled","useIsomorphicLayoutEffect","Button","IconButton","Headline","VisuallyHidden","Search","id","idProp","before","className","placeholder","after","getRef","icon","iconProp","onIconClick","style","autoComplete","onChange","iconLabel","clearLabel","clearButtonTestId","noPadding","getRootRef","findButtonText","findButtonTestId","onFindButtonClick","hideClearButton","inputProps","direction","isRtl","inputRef","value","isFocused","setTrue","setFocusedTrue","setFalse","setFocusedFalse","generatedId","useId","inputId","hasValue","setHasValue","useState","Boolean","defaultValue","checkHasValue","e","currentTarget","sizeY","adaptiveSizeY","platform","hasAfter","onFocus","onBlur","onCancel","useCallback","Object","nativeInputValueSetter","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","onIconCancelClickStart","preventDefault","focus","undefined","renderIconButton","props","hoverMode","onPointerDown","onClick","showControls","compact","div","disabled","ref","label","htmlFor","Component","type","level","weight","tabIndex","data-testid","mode","size","focusVisibleMode","activeMode","span"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Search/Search.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Icon16Clear, Icon16SearchOutline, Icon24Cancel } from '@vkontakte/icons';\nimport { classNames, hasReactNode, noop } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport { useBooleanState } from '../../hooks/useBooleanState';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { useNativeFormResetListener } from '../../hooks/useNativeFormResetListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { touchEnabled } from '../../lib/touch';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasDataAttribute, HasRootRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { IconButton, type IconButtonProps } from '../IconButton/IconButton';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Search.module.css';\n\nconst warn = warnOnce('Search');\n\nexport type RenderIconButtonFn = (\n icon: React.ReactNode,\n props?: Partial<IconButtonProps> & HasDataAttribute,\n) => React.ReactElement;\n\nexport interface SearchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLDivElement> {\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLInputElement>;\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `input`: свойства для прокидывания в поле ввода.\n */\n slotProps?: {\n root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;\n input?: React.InputHTMLAttributes<HTMLInputElement> &\n HasRootRef<HTMLInputElement> &\n HasDataAttribute;\n };\n /**\n * Only iOS. Текст кнопки \"отмена\", которая чистит текстовое поле и убирает фокус.\n */\n after?: React.ReactNode;\n /**\n * Контент, отображаемый перед полем ввода.\n */\n before?: React.ReactNode;\n /**\n * Иконка поиска. Может быть React-элементом или функцией, возвращающей элемент.\n */\n icon?: React.ReactNode | ((renderFn: RenderIconButtonFn) => React.ReactNode);\n /**\n * Обработчик нажатия на иконку поиска.\n */\n onIconClick?: React.PointerEventHandler<HTMLElement>;\n /**\n * Значение поля ввода по умолчанию.\n */\n defaultValue?: string;\n /**\n * Текст для скринридеров, описывающий иконку поиска.\n */\n iconLabel?: string;\n /**\n * Текст для скринридеров, описывающий кнопку очистки.\n */\n clearLabel?: string;\n /**\n * Передает атрибут `data-testid` для кнопки очистки.\n */\n clearButtonTestId?: string;\n /**\n * Удаляет отступы у компонента.\n */\n noPadding?: boolean;\n /**\n * Текст для кнопки Найти.\n */\n findButtonText?: string;\n /**\n * Обработчик, при нажатии на кнопку \"Найти\".\n */\n onFindButtonClick?: React.MouseEventHandler<HTMLElement>;\n /**\n * Передает атрибут `data-testid` для кнопки поиска.\n */\n findButtonTestId?: string;\n /**\n * Скрывает кнопку очистки.\n */\n hideClearButton?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/search\n */\nexport const Search = ({\n className,\n getRootRef,\n style,\n placeholder: placeholderProp = 'Поиск',\n before = <Icon16SearchOutline />,\n after = 'Отмена',\n getRef,\n icon: iconProp,\n onIconClick,\n autoComplete: autoCompleteProp = 'off',\n iconLabel,\n clearLabel = 'Очистить',\n clearButtonTestId,\n noPadding,\n findButtonText = 'Найти',\n findButtonTestId,\n onFindButtonClick,\n hideClearButton,\n\n slotProps,\n ...inputProps\n}: SearchProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n\n const rootRest = useMergeProps(\n {\n className,\n style,\n getRootRef,\n },\n slotProps?.root,\n );\n\n const {\n id,\n placeholder,\n onChange,\n autoComplete,\n getRootRef: getInputRef,\n onFocus: onInputFocus,\n onBlur: onInputBlur,\n ...inputRest\n } = useMergeProps(\n {\n getRootRef: getRef,\n placeholder: placeholderProp,\n autoComplete: autoCompleteProp,\n className: styles.nativeInput,\n ...inputProps,\n },\n slotProps?.input,\n );\n\n const inputRef = useExternRef(getInputRef);\n const {\n value: isFocused,\n setTrue: setFocusedTrue,\n setFalse: setFocusedFalse,\n } = useBooleanState(false);\n const generatedId = React.useId();\n const inputId = id ? id : `search-${generatedId}`;\n\n const [hasValue, setHasValue] = React.useState<boolean>(() =>\n Boolean(inputRest.value || inputRest.defaultValue),\n );\n const checkHasValue: React.ChangeEventHandler<HTMLInputElement> = (e) =>\n setHasValue(Boolean(e.currentTarget.value));\n\n const { sizeY = 'none' } = useAdaptivity();\n const { sizeY: adaptiveSizeY } = useAdaptivityConditionalRender();\n const platform = usePlatform();\n\n const hasAfter = platform === 'ios' && hasReactNode(after);\n\n const onFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedTrue();\n onInputFocus && onInputFocus(e);\n };\n\n const onBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocusedFalse();\n onInputBlur && onInputBlur(e);\n };\n\n const onCancel = React.useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n HTMLInputElement.prototype,\n 'value',\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, '');\n\n const ev2 = new Event('input', { bubbles: true });\n inputRef.current?.dispatchEvent(ev2);\n }, [inputRef]);\n\n const onIconClickStart: React.PointerEventHandler<HTMLElement> = React.useCallback(\n (e) => onIconClick?.(e),\n [onIconClick],\n );\n\n const onIconCancelClickStart: React.PointerEventHandler<HTMLElement> = React.useCallback(\n (e) => {\n e.preventDefault();\n inputRef.current?.focus();\n if (touchEnabled()) {\n onCancel();\n }\n },\n [inputRef, onCancel],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (inputRest.value !== undefined) {\n setHasValue(Boolean(inputRest.value));\n }\n }, [inputRest.value]);\n\n useNativeFormResetListener(inputRef, () => {\n setHasValue(Boolean(inputRest.defaultValue));\n });\n\n const renderIconButton: RenderIconButtonFn = (icon, props = {}) => (\n <IconButton\n hoverMode=\"opacity\"\n onPointerDown={onIconClickStart}\n className={styles.icon}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n onClick={noop}\n {...props}\n >\n <VisuallyHidden>{iconLabel}</VisuallyHidden>\n {icon}\n </IconButton>\n );\n\n const showControls = Boolean(\n iconProp || !hideClearButton || (adaptiveSizeY.compact && onFindButtonClick),\n );\n\n return (\n <RootComponent\n baseClassName={classNames(\n 'vkuiInternalSearch',\n styles.host,\n sizeY === 'none' && styles.sizeYNone,\n sizeY === 'compact' && styles.sizeYCompact,\n isFocused && styles.focused,\n hasValue && styles.hasValue,\n hasAfter && styles.hasAfter,\n iconProp && styles.hasIcon,\n inputRest.disabled && styles.disabled,\n !noPadding && styles.withPadding,\n isRtl && styles.rtl,\n )}\n {...rootRest}\n >\n <div className={styles.field}>\n <label htmlFor={inputId} className={styles.label}>\n {placeholder}\n </label>\n <div className={styles.input}>\n {before}\n <Headline\n Component=\"input\"\n type=\"search\"\n level=\"1\"\n weight=\"3\"\n id={inputId}\n placeholder={placeholder}\n autoComplete={autoComplete}\n getRootRef={inputRef}\n onChange={callMultiple(onChange, checkHasValue)}\n onFocus={onFocus}\n onBlur={onBlur}\n {...inputRest}\n />\n </div>\n {showControls && (\n <div className={styles.controls}>\n {iconProp &&\n (typeof iconProp === 'function'\n ? iconProp(renderIconButton)\n : renderIconButton(iconProp))}\n {!hideClearButton && (\n <IconButton\n hoverMode=\"opacity\"\n onPointerDown={onIconCancelClickStart}\n onClick={onCancel}\n className={styles.icon}\n tabIndex={hasValue ? undefined : -1}\n disabled={inputProps.disabled}\n data-testid={clearButtonTestId}\n >\n <VisuallyHidden>{clearLabel}</VisuallyHidden>\n {platform === 'ios' ? <Icon16Clear /> : <Icon24Cancel />}\n </IconButton>\n )}\n {adaptiveSizeY.compact && onFindButtonClick && (\n <Button\n mode=\"primary\"\n size=\"m\"\n className={classNames(styles.findButton, adaptiveSizeY.compact.className)}\n focusVisibleMode=\"inside\"\n onClick={onFindButtonClick}\n tabIndex={hasValue ? undefined : -1}\n data-testid={findButtonTestId}\n >\n {findButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n {hasAfter && (\n <div className={styles.after}>\n <Button\n mode=\"tertiary\"\n size=\"m\"\n focusVisibleMode=\"inside\"\n hoverMode=\"opacity\"\n activeMode=\"opacity\"\n onClick={onCancel}\n onFocus={setFocusedTrue}\n onBlur={setFocusedFalse}\n >\n <span className={styles.afterTextClip}>{after}</span>\n </Button>\n </div>\n )}\n </RootComponent>\n );\n};\n"],"names":["React","Icon16Clear","Icon16SearchOutline","Icon24Cancel","classNames","hasReactNode","noop","useAdaptivity","useAdaptivityConditionalRender","useBooleanState","useConfigDirection","useExternRef","useMergeProps","useNativeFormResetListener","usePlatform","callMultiple","touchEnabled","useIsomorphicLayoutEffect","warnOnce","Button","IconButton","RootComponent","Headline","VisuallyHidden","warn","Search","className","getRootRef","style","placeholder","placeholderProp","before","after","getRef","icon","iconProp","onIconClick","autoComplete","autoCompleteProp","iconLabel","clearLabel","clearButtonTestId","noPadding","findButtonText","findButtonTestId","onFindButtonClick","hideClearButton","slotProps","inputProps","process","env","NODE_ENV","direction","isRtl","rootRest","root","input","id","onChange","getInputRef","onFocus","onInputFocus","onBlur","onInputBlur","inputRest","inputRef","value","isFocused","setTrue","setFocusedTrue","setFalse","setFocusedFalse","generatedId","useId","inputId","hasValue","setHasValue","useState","Boolean","defaultValue","checkHasValue","e","currentTarget","sizeY","adaptiveSizeY","platform","hasAfter","onCancel","useCallback","Object","nativeInputValueSetter","getOwnPropertyDescriptor","HTMLInputElement","prototype","set","call","current","ev2","Event","bubbles","dispatchEvent","onIconClickStart","onIconCancelClickStart","preventDefault","focus","undefined","renderIconButton","props","hoverMode","onPointerDown","onClick","showControls","compact","baseClassName","disabled","div","label","htmlFor","Component","type","level","weight","tabIndex","data-testid","mode","size","focusVisibleMode","activeMode","span"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,SAAS,2BAA2B,EAAE,mCAIjE,WAAW,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,SA+D/B,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAMzE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,SAAS,2BAA2B,EAAE,mCAIjE,WAAW,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,SA8E/B,CAAC"}
@@ -15,7 +15,7 @@ import { NativeSelect } from "../NativeSelect/NativeSelect.js";
15
15
  "children",
16
16
  "className"
17
17
  ]);
18
- const { options = [], searchable, emptyText, onInputChange, filterFn, popupDirection, renderOption, renderDropdown, fetching, onClose, onOpen, icon, ClearButton, allowClearButton, clearButtonTestId, dropdownOffsetDistance, dropdownAutoWidth, forceDropdownPortal, noMaxHeight, labelTextTestId, nativeSelectTestId, after, mode, pattern, minLength, maxLength, readOnly, getSelectInputRef, overscrollBehavior, beforeAlign, afterAlign, onInputKeyDown, accessible, fetchingCompletedLabel, fetchingInProgressLabel } = props, restProps = _object_without_properties(props, [
18
+ const { options = [], searchable, emptyText, onInputChange, filterFn, popupDirection, renderOption, renderDropdown, fetching, onClose, onOpen, icon, ClearButton, allowClearButton, clearButtonTestId, dropdownOffsetDistance, dropdownAutoWidth, forceDropdownPortal, noMaxHeight, labelTextTestId, nativeSelectTestId, after, mode, pattern, minLength, maxLength, readOnly, getSelectInputRef, overscrollBehavior, beforeAlign, afterAlign, onInputKeyDown, accessible, fetchingCompletedLabel, fetchingInProgressLabel, slotProps } = props, restProps = _object_without_properties(props, [
19
19
  "options",
20
20
  "searchable",
21
21
  "emptyText",
@@ -50,17 +50,23 @@ import { NativeSelect } from "../NativeSelect/NativeSelect.js";
50
50
  "onInputKeyDown",
51
51
  "accessible",
52
52
  "fetchingCompletedLabel",
53
- "fetchingInProgressLabel"
53
+ "fetchingInProgressLabel",
54
+ "slotProps"
54
55
  ]);
55
56
  const { deviceType } = useAdaptivityConditionalRender();
56
57
  const nativeProps = restProps;
57
58
  return /*#__PURE__*/ _jsxs(React.Fragment, {
58
59
  children: [
59
60
  deviceType.desktop && /*#__PURE__*/ _jsx(CustomSelect, _object_spread({
60
- className: classNames(className, deviceType.desktop.className)
61
+ className: classNames(className, deviceType.desktop.className),
62
+ slotProps: slotProps
61
63
  }, props)),
62
64
  deviceType.mobile && /*#__PURE__*/ _jsx(NativeSelect, _object_spread_props(_object_spread({
63
- className: classNames(className, deviceType.mobile.className)
65
+ className: classNames(className, deviceType.mobile.className),
66
+ slotProps: {
67
+ select: _object_spread({}, slotProps === null || slotProps === void 0 ? void 0 : slotProps.input, slotProps === null || slotProps === void 0 ? void 0 : slotProps.select),
68
+ root: slotProps === null || slotProps === void 0 ? void 0 : slotProps.root
69
+ }
64
70
  }, nativeProps), {
65
71
  children: options.map(({ label, value, disabled })=>/*#__PURE__*/ _jsx("option", {
66
72
  value: value,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport type { HasOnlyExpectedProps } from '../../types';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { type CustomSelectOptionInterface } from '../CustomSelect/types';\nimport { NativeSelect, type NativeSelectProps } from '../NativeSelect/NativeSelect';\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkui.io/components/select\n */\nexport const Select = <OptionT extends CustomSelectOptionInterface>({\n children,\n className,\n ...props\n}: SelectProps<OptionT>): React.ReactNode => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n clearButtonTestId,\n dropdownOffsetDistance,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight,\n labelTextTestId,\n nativeSelectTestId,\n after,\n mode,\n pattern,\n minLength,\n maxLength,\n readOnly,\n getSelectInputRef,\n overscrollBehavior,\n beforeAlign,\n afterAlign,\n onInputKeyDown,\n accessible,\n fetchingCompletedLabel,\n fetchingInProgressLabel,\n ...restProps\n } = props;\n\n const { deviceType } = useAdaptivityConditionalRender();\n\n const nativeProps: HasOnlyExpectedProps<typeof restProps, NativeSelectProps> = restProps;\n\n return (\n <React.Fragment>\n {deviceType.desktop && (\n <CustomSelect className={classNames(className, deviceType.desktop.className)} {...props} />\n )}\n {deviceType.mobile && (\n <NativeSelect\n className={classNames(className, deviceType.mobile.className)}\n {...nativeProps}\n >\n {options.map(({ label, value, disabled }) => (\n <option value={value} key={`${value}`} disabled={disabled}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","useAdaptivityConditionalRender","CustomSelect","NativeSelect","Select","children","className","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","after","mode","pattern","minLength","maxLength","readOnly","getSelectInputRef","overscrollBehavior","beforeAlign","afterAlign","onInputKeyDown","accessible","fetchingCompletedLabel","fetchingInProgressLabel","restProps","deviceType","nativeProps","Fragment","desktop","mobile","map","label","value","disabled","option"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,8BAA8B,QAAQ,sDAA6C;AAE5F,SAASC,YAAY,QAA0B,kCAA+B;AAE9E,SAASC,YAAY,QAAgC,kCAA+B;AAGpF;;CAEC,GACD,OAAO,MAAMC,SAAS;QAA8C,EAClEC,QAAQ,EACRC,SAAS,EAEY,WADlBC;QAFHF;QACAC;;IAGA,MAAM,EACJE,UAAU,EAAE,EACZC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,cAAc,EACdC,QAAQ,EACRC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,kBAAkB,EAClBC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,UAAU,EACVC,cAAc,EACdC,UAAU,EACVC,sBAAsB,EACtBC,uBAAuB,EAExB,GAAGnC,OADCoC,uCACDpC;QApCFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAIF,MAAM,EAAEE,UAAU,EAAE,GAAG3C;IAEvB,MAAM4C,cAAyEF;IAE/E,qBACE,MAAC5C,MAAM+C,QAAQ;;YACZF,WAAWG,OAAO,kBACjB,KAAC7C;gBAAaI,WAAWN,WAAWM,WAAWsC,WAAWG,OAAO,CAACzC,SAAS;eAAOC;YAEnFqC,WAAWI,MAAM,kBAChB,KAAC7C;gBACCG,WAAWN,WAAWM,WAAWsC,WAAWI,MAAM,CAAC1C,SAAS;eACxDuC;0BAEHrC,QAAQyC,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACtC,KAACC;wBAAOF,OAAOA;wBAAwBC,UAAUA;kCAC9CF;uBADwB,GAAGC,OAAO;;;;AAQjD,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityConditionalRender } from '../../hooks/useAdaptivityConditionalRender';\nimport type { HasDataAttribute, HasOnlyExpectedProps, HasRootRef } from '../../types';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport { type CustomSelectOptionInterface } from '../CustomSelect/types';\nimport {\n type NativeHTMLSelectProps,\n NativeSelect,\n type NativeSelectProps,\n} from '../NativeSelect/NativeSelect';\nexport type SelectType = 'default' | 'plain' | 'accent';\n\n/**\n * @see https://vkui.io/components/select\n */\nexport const Select = <OptionT extends CustomSelectOptionInterface>({\n children,\n className,\n ...props\n}: SelectProps<OptionT>): React.ReactNode => {\n const {\n options = [],\n searchable,\n emptyText,\n onInputChange,\n filterFn,\n popupDirection,\n renderOption,\n renderDropdown,\n fetching,\n onClose,\n onOpen,\n icon,\n ClearButton,\n allowClearButton,\n clearButtonTestId,\n dropdownOffsetDistance,\n dropdownAutoWidth,\n forceDropdownPortal,\n noMaxHeight,\n labelTextTestId,\n nativeSelectTestId,\n after,\n mode,\n pattern,\n minLength,\n maxLength,\n readOnly,\n getSelectInputRef,\n overscrollBehavior,\n beforeAlign,\n afterAlign,\n onInputKeyDown,\n accessible,\n fetchingCompletedLabel,\n fetchingInProgressLabel,\n\n slotProps,\n ...restProps\n } = props;\n\n const { deviceType } = useAdaptivityConditionalRender();\n\n const nativeProps: HasOnlyExpectedProps<typeof restProps, NativeSelectProps> = restProps;\n\n return (\n <React.Fragment>\n {deviceType.desktop && (\n <CustomSelect\n className={classNames(className, deviceType.desktop.className)}\n slotProps={slotProps}\n {...props}\n />\n )}\n {deviceType.mobile && (\n <NativeSelect\n className={classNames(className, deviceType.mobile.className)}\n slotProps={{\n select: {\n ...(slotProps?.input as NativeHTMLSelectProps &\n HasRootRef<HTMLSelectElement> &\n HasDataAttribute),\n ...slotProps?.select,\n },\n root: slotProps?.root,\n }}\n {...nativeProps}\n >\n {options.map(({ label, value, disabled }) => (\n <option value={value} key={`${value}`} disabled={disabled}>\n {label}\n </option>\n ))}\n </NativeSelect>\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","classNames","useAdaptivityConditionalRender","CustomSelect","NativeSelect","Select","children","className","props","options","searchable","emptyText","onInputChange","filterFn","popupDirection","renderOption","renderDropdown","fetching","onClose","onOpen","icon","ClearButton","allowClearButton","clearButtonTestId","dropdownOffsetDistance","dropdownAutoWidth","forceDropdownPortal","noMaxHeight","labelTextTestId","nativeSelectTestId","after","mode","pattern","minLength","maxLength","readOnly","getSelectInputRef","overscrollBehavior","beforeAlign","afterAlign","onInputKeyDown","accessible","fetchingCompletedLabel","fetchingInProgressLabel","slotProps","restProps","deviceType","nativeProps","Fragment","desktop","mobile","select","input","root","map","label","value","disabled","option"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,8BAA8B,QAAQ,sDAA6C;AAE5F,SAASC,YAAY,QAA0B,kCAA+B;AAE9E,SAEEC,YAAY,QAEP,kCAA+B;AAGtC;;CAEC,GACD,OAAO,MAAMC,SAAS;QAA8C,EAClEC,QAAQ,EACRC,SAAS,EAEY,WADlBC;QAFHF;QACAC;;IAGA,MAAM,EACJE,UAAU,EAAE,EACZC,UAAU,EACVC,SAAS,EACTC,aAAa,EACbC,QAAQ,EACRC,cAAc,EACdC,YAAY,EACZC,cAAc,EACdC,QAAQ,EACRC,OAAO,EACPC,MAAM,EACNC,IAAI,EACJC,WAAW,EACXC,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,kBAAkB,EAClBC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,UAAU,EACVC,cAAc,EACdC,UAAU,EACVC,sBAAsB,EACtBC,uBAAuB,EAEvBC,SAAS,EAEV,GAAGpC,OADCqC,uCACDrC;QAtCFC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAIF,MAAM,EAAEE,UAAU,EAAE,GAAG5C;IAEvB,MAAM6C,cAAyEF;IAE/E,qBACE,MAAC7C,MAAMgD,QAAQ;;YACZF,WAAWG,OAAO,kBACjB,KAAC9C;gBACCI,WAAWN,WAAWM,WAAWuC,WAAWG,OAAO,CAAC1C,SAAS;gBAC7DqC,WAAWA;eACPpC;YAGPsC,WAAWI,MAAM,kBAChB,KAAC9C;gBACCG,WAAWN,WAAWM,WAAWuC,WAAWI,MAAM,CAAC3C,SAAS;gBAC5DqC,WAAW;oBACTO,QAAQ,mBACFP,sBAAAA,gCAAAA,UAAWQ,KAAK,EAGjBR,sBAAAA,gCAAAA,UAAWO,MAAM;oBAEtBE,IAAI,EAAET,sBAAAA,gCAAAA,UAAWS,IAAI;gBACvB;eACIN;0BAEHtC,QAAQ6C,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAE,iBACtC,KAACC;wBAAOF,OAAOA;wBAAwBC,UAAUA;kCAC9CF;uBADwB,GAAGC,OAAO;;;;AAQjD,EAAE"}
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import type { HasRootRef } from '../../types';
2
+ import type { HasComponent, HasRootRef } from '../../types';
3
3
  import { type TappableOmitProps } from '../Tappable/Tappable';
4
4
  import { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';
5
- export interface SelectionControlProps extends React.ComponentProps<'label'>, HasRootRef<HTMLLabelElement>, Pick<TappableOmitProps, 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'> {
5
+ export interface SelectionControlProps extends React.ComponentProps<'label'>, HasRootRef<HTMLLabelElement>, HasComponent, Pick<TappableOmitProps, 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'> {
6
6
  /**
7
7
  * Отключает отступы. При использовании этого свойства, значение по умолчанию для свойств `hoverMode` и `activeMode` становится `"opacity"`.
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionControl.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAQtF,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EACnC,UAAU,CAAC,gBAAgB,CAAC,EAC5B,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CACxF;IACH;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;wFAK1B,qBAAqB,GAAG,KAAK,CAAC,SAAS;;CAuBzC,CAAC"}
1
+ {"version":3,"file":"SelectionControl.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAQtF,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EACnC,UAAU,CAAC,gBAAgB,CAAC,EAC5B,YAAY,EACZ,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CACxF;IACH;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;wFAK1B,qBAAqB,GAAG,KAAK,CAAC,SAAS;;CAuBzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { SelectionControlContext } from './SelectionControlContext';\nimport { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';\nimport styles from './SelectionControl.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SelectionControlProps\n extends React.ComponentProps<'label'>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'\n > {\n /**\n * Отключает отступы. При использовании этого свойства, значение по умолчанию для свойств `hoverMode` и `activeMode` становится `\"opacity\"`.\n */\n noPadding?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/selection-control\n */\nexport const SelectionControl = ({\n noPadding = false,\n hoverMode: hoverModeProp,\n activeMode: activeModeProp,\n ...restProps\n}: SelectionControlProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n const hoverMode = hoverModeProp || (noPadding ? 'opacity' : 'background');\n const activeMode = activeModeProp || (noPadding ? 'opacity' : 'background');\n\n return (\n <SelectionControlContext.Provider value={{ noPadding }}>\n <Tappable\n Component=\"label\"\n baseClassName={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !noPadding && styles.withPadding,\n )}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n hoverMode={hoverMode}\n activeMode={activeMode}\n {...restProps}\n />\n </SelectionControlContext.Provider>\n );\n};\n\nSelectionControl.Label = SelectionControlLabel;\n"],"names":["React","classNames","useAdaptivity","usePlatform","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","SelectionControlContext","SelectionControlLabel","sizeYClassNames","none","compact","SelectionControl","noPadding","hoverMode","hoverModeProp","activeMode","activeModeProp","restProps","sizeY","platform","Provider","value","Component","baseClassName","activeEffectDelay","Label"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,2BAA2B,QAAQ,2BAAwB;AACpE,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,uBAAuB,QAAQ,+BAA4B;AACpE,SAASC,qBAAqB,QAAQ,mDAAgD;AAGtF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAeA;;CAEC,GACD,OAAO,MAAMC,mBAAmB;QAAC,EAC/BC,YAAY,KAAK,EACjBC,WAAWC,aAAa,EACxBC,YAAYC,cAAc,EAEJ,WADnBC;QAHHL;QACAC;QACAE;;IAGA,MAAM,EAAEG,QAAQ,MAAM,EAAE,GAAGhB;IAC3B,MAAMiB,WAAWhB;IAEjB,MAAMU,YAAYC,iBAAkBF,CAAAA,YAAY,YAAY,YAAW;IACvE,MAAMG,aAAaC,kBAAmBJ,CAAAA,YAAY,YAAY,YAAW;IAEzE,qBACE,KAACN,wBAAwBc,QAAQ;QAACC,OAAO;YAAET;QAAU;kBACnD,cAAA,KAACP;YACCiB,WAAU;YACVC,eAAetB,yCAEbiB,UAAU,aAAaV,eAAe,CAACU,MAAM,EAC7C,CAACN;YAEHY,mBAAmBL,aAAa,QAAQ,MAAMf;YAC9CS,WAAWA;YACXE,YAAYA;WACRE;;AAIZ,EAAE;AAEFN,iBAAiBc,KAAK,GAAGlB"}
1
+ {"version":3,"sources":["../../../src/components/SelectionControl/SelectionControl.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasComponent, HasRootRef } from '../../types';\nimport { DEFAULT_ACTIVE_EFFECT_DELAY } from '../Clickable/useState';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { SelectionControlContext } from './SelectionControlContext';\nimport { SelectionControlLabel } from './SelectionControlLabel/SelectionControlLabel';\nimport styles from './SelectionControl.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SelectionControlProps\n extends React.ComponentProps<'label'>,\n HasRootRef<HTMLLabelElement>,\n HasComponent,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode' | 'disabled'\n > {\n /**\n * Отключает отступы. При использовании этого свойства, значение по умолчанию для свойств `hoverMode` и `activeMode` становится `\"opacity\"`.\n */\n noPadding?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/selection-control\n */\nexport const SelectionControl = ({\n noPadding = false,\n hoverMode: hoverModeProp,\n activeMode: activeModeProp,\n ...restProps\n}: SelectionControlProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n const hoverMode = hoverModeProp || (noPadding ? 'opacity' : 'background');\n const activeMode = activeModeProp || (noPadding ? 'opacity' : 'background');\n\n return (\n <SelectionControlContext.Provider value={{ noPadding }}>\n <Tappable\n Component=\"label\"\n baseClassName={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n !noPadding && styles.withPadding,\n )}\n activeEffectDelay={platform === 'ios' ? 100 : DEFAULT_ACTIVE_EFFECT_DELAY}\n hoverMode={hoverMode}\n activeMode={activeMode}\n {...restProps}\n />\n </SelectionControlContext.Provider>\n );\n};\n\nSelectionControl.Label = SelectionControlLabel;\n"],"names":["React","classNames","useAdaptivity","usePlatform","DEFAULT_ACTIVE_EFFECT_DELAY","Tappable","SelectionControlContext","SelectionControlLabel","sizeYClassNames","none","compact","SelectionControl","noPadding","hoverMode","hoverModeProp","activeMode","activeModeProp","restProps","sizeY","platform","Provider","value","Component","baseClassName","activeEffectDelay","Label"],"mappings":"AAAA;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,2BAA2B,QAAQ,2BAAwB;AACpE,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,uBAAuB,QAAQ,+BAA4B;AACpE,SAASC,qBAAqB,QAAQ,mDAAgD;AAGtF,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAgBA;;CAEC,GACD,OAAO,MAAMC,mBAAmB;QAAC,EAC/BC,YAAY,KAAK,EACjBC,WAAWC,aAAa,EACxBC,YAAYC,cAAc,EAEJ,WADnBC;QAHHL;QACAC;QACAE;;IAGA,MAAM,EAAEG,QAAQ,MAAM,EAAE,GAAGhB;IAC3B,MAAMiB,WAAWhB;IAEjB,MAAMU,YAAYC,iBAAkBF,CAAAA,YAAY,YAAY,YAAW;IACvE,MAAMG,aAAaC,kBAAmBJ,CAAAA,YAAY,YAAY,YAAW;IAEzE,qBACE,KAACN,wBAAwBc,QAAQ;QAACC,OAAO;YAAET;QAAU;kBACnD,cAAA,KAACP;YACCiB,WAAU;YACVC,eAAetB,yCAEbiB,UAAU,aAAaV,eAAe,CAACU,MAAM,EAC7C,CAACN;YAEHY,mBAAmBL,aAAa,QAAQ,MAAMf;YAC9CS,WAAWA;YACXE,YAAYA;WACRE;;AAIZ,EAAE;AAEFN,iBAAiBc,KAAK,GAAGlB"}
@@ -1,8 +1,17 @@
1
1
  import * as React from 'react';
2
- import type { HTMLAttributesWithRootRef } from '../../types';
2
+ import type { HasDataAttribute, HasRootRef, HTMLAttributesWithRootRef } from '../../types';
3
3
  import { Basic, type BasicProps } from './subcomponents/Basic/Basic';
4
4
  import type { SnackbarPlacement } from './types';
5
5
  export interface SnackbarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'role'>, BasicProps {
6
+ /**
7
+ * Свойства, которые можно прокинуть внутрь компонента:
8
+ * - `root`: свойства для прокидывания в корень компонента;
9
+ * - `action`: свойства для прокидывания в кнопку действия.
10
+ */
11
+ slotProps?: {
12
+ root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & HasRootRef<HTMLDivElement> & HasDataAttribute;
13
+ action?: React.HTMLAttributes<HTMLElement> & HasRootRef<HTMLElement> & HasDataAttribute;
14
+ };
6
15
  /**
7
16
  * Задаёт расположение компонента.
8
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.d.ts","sourceRoot":"","sources":["../../../src/components/Snackbar/Snackbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA2B5D,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAC7D,UAAU;IACZ;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAqOrE,CAAC"}
1
+ {"version":3,"file":"Snackbar.d.ts","sourceRoot":"","sources":["../../../src/components/Snackbar/Snackbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAG3F,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA2B5D,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAC7D,UAAU;IACZ;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAC3D,UAAU,CAAC,cAAc,CAAC,GAC1B,gBAAgB,CAAC;QACnB,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC;KACzF,CAAC;IACF;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,KAAK,CAAA;CAuPrE,CAAC"}