@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,14 +1,21 @@
1
+ 'use client';
1
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
3
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
4
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
6
  import * as React from "react";
7
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
8
+ import { warnOnce } from "../../lib/warnOnce.js";
6
9
  import { Button } from "../Button/Button.js";
7
10
  import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
11
+ const warn = warnOnce('File');
8
12
  /**
9
13
  * @see https://vkui.io/components/file
10
14
  */ export const File = (_param)=>{
11
- var { children = 'Выберите файл', align = 'left', size, mode, stretched, before, after, loading, className, style, getRef, getRootRef, appearance } = _param, restProps = _object_without_properties(_param, [
15
+ var { getRootRef, className, style, children = 'Выберите файл', align = 'left', size, mode, stretched, before, after, loading, getRef, appearance, slotProps } = _param, restProps = _object_without_properties(_param, [
16
+ "getRootRef",
17
+ "className",
18
+ "style",
12
19
  "children",
13
20
  "align",
14
21
  "size",
@@ -17,16 +24,24 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
17
24
  "before",
18
25
  "after",
19
26
  "loading",
20
- "className",
21
- "style",
22
27
  "getRef",
23
- "getRootRef",
24
- "appearance"
28
+ "appearance",
29
+ "slotProps"
25
30
  ]);
26
- return /*#__PURE__*/ _jsxs(Button, {
31
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
32
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
33
+ }
34
+ const rootProps = useMergeProps({
35
+ className,
36
+ style,
37
+ getRootRef: getRootRef
38
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
39
+ const inputRest = useMergeProps(_object_spread({
40
+ getRootRef: getRef
41
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input);
42
+ return /*#__PURE__*/ _jsxs(Button, _object_spread_props(_object_spread({
27
43
  Component: "label",
28
44
  align: align,
29
- className: className,
30
45
  stretched: stretched,
31
46
  mode: mode,
32
47
  appearance: appearance,
@@ -34,20 +49,17 @@ import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
34
49
  before: before,
35
50
  after: after,
36
51
  loading: loading,
37
- style: style,
38
- getRootRef: getRootRef,
39
- disabled: restProps.disabled,
52
+ disabled: inputRest.disabled
53
+ }, rootProps), {
40
54
  children: [
41
- /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread_props(_object_spread({
42
- title: ""
43
- }, restProps), {
55
+ /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread({
56
+ title: "",
44
57
  Component: "input",
45
- type: "file",
46
- getRootRef: getRef
47
- })),
58
+ type: "file"
59
+ }, inputRest)),
48
60
  children
49
61
  ]
50
- });
62
+ }));
51
63
  };
52
64
 
53
65
  //# sourceMappingURL=File.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/File/File.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { HasRef, HasRootRef } from '../../types';\nimport { Button, type VKUIButtonProps } from '../Button/Button';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\n\nexport interface FileProps\n extends Omit<VKUIButtonProps, 'type'>,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLElement> {}\n\n/**\n * @see https://vkui.io/components/file\n */\nexport const File = ({\n children = 'Выберите файл',\n align = 'left',\n size,\n mode,\n stretched,\n before,\n after,\n loading,\n className,\n style,\n getRef,\n getRootRef,\n appearance,\n ...restProps\n}: FileProps): React.ReactNode => {\n return (\n <Button\n Component=\"label\"\n align={align}\n className={className}\n stretched={stretched}\n mode={mode}\n appearance={appearance}\n size={size}\n before={before}\n after={after}\n loading={loading}\n style={style}\n getRootRef={getRootRef}\n disabled={restProps.disabled}\n >\n <VisuallyHidden title=\"\" {...restProps} Component=\"input\" type=\"file\" getRootRef={getRef} />\n {children}\n </Button>\n );\n};\n"],"names":["React","Button","VisuallyHidden","File","children","align","size","mode","stretched","before","after","loading","className","style","getRef","getRootRef","appearance","restProps","Component","disabled","title","type"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,MAAM,QAA8B,sBAAmB;AAChE,SAASC,cAAc,QAAQ,sCAAmC;AAQlE;;CAEC,GACD,OAAO,MAAMC,OAAO;QAAC,EACnBC,WAAW,eAAe,EAC1BC,QAAQ,MAAM,EACdC,IAAI,EACJC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,KAAK,EACLC,MAAM,EACNC,UAAU,EACVC,UAAU,EAEA,WADPC;QAbHb;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,qBACE,MAACf;QACCiB,WAAU;QACVb,OAAOA;QACPO,WAAWA;QACXJ,WAAWA;QACXD,MAAMA;QACNS,YAAYA;QACZV,MAAMA;QACNG,QAAQA;QACRC,OAAOA;QACPC,SAASA;QACTE,OAAOA;QACPE,YAAYA;QACZI,UAAUF,UAAUE,QAAQ;;0BAE5B,KAACjB;gBAAekB,OAAM;eAAOH;gBAAWC,WAAU;gBAAQG,MAAK;gBAAON,YAAYD;;YACjFV;;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/File/File.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 { Button, type VKUIButtonProps } from '../Button/Button';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\n\nconst warn = warnOnce('File');\n\nexport interface FileProps\n extends Omit<VKUIButtonProps, 'type'>,\n Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'>,\n HasRootRef<HTMLElement> {\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLInputElement>;\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.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> &\n HasRootRef<HTMLInputElement> &\n HasDataAttribute;\n };\n}\n\n/**\n * @see https://vkui.io/components/file\n */\nexport const File = ({\n getRootRef,\n className,\n style,\n children = 'Выберите файл',\n align = 'left',\n size,\n mode,\n stretched,\n before,\n after,\n loading,\n getRef,\n appearance,\n slotProps,\n ...restProps\n}: FileProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n\n const rootProps = useMergeProps(\n {\n className,\n style,\n getRootRef: getRootRef as React.Ref<HTMLLabelElement>,\n },\n slotProps?.root,\n );\n const inputRest = useMergeProps({ getRootRef: getRef, ...restProps }, slotProps?.input);\n\n return (\n <Button\n Component=\"label\"\n align={align}\n stretched={stretched}\n mode={mode}\n appearance={appearance}\n size={size}\n before={before}\n after={after}\n loading={loading}\n disabled={inputRest.disabled}\n {...rootProps}\n >\n <VisuallyHidden title=\"\" Component=\"input\" type=\"file\" {...inputRest} />\n {children}\n </Button>\n );\n};\n"],"names":["React","useMergeProps","warnOnce","Button","VisuallyHidden","warn","File","getRootRef","className","style","children","align","size","mode","stretched","before","after","loading","getRef","appearance","slotProps","restProps","process","env","NODE_ENV","rootProps","root","inputRest","input","Component","disabled","title","type"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,MAAM,QAA8B,sBAAmB;AAChE,SAASC,cAAc,QAAQ,sCAAmC;AAElE,MAAMC,OAAOH,SAAS;AAyBtB;;CAEC,GACD,OAAO,MAAMI,OAAO;QAAC,EACnBC,UAAU,EACVC,SAAS,EACTC,KAAK,EACLC,WAAW,eAAe,EAC1BC,QAAQ,MAAM,EACdC,IAAI,EACJC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,MAAM,EACNC,UAAU,EACVC,SAAS,EAEC,WADPC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,6CAA6C,GAC7C,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiBN,QAAQ;QACpDb,KAAK;IACP;IAEA,MAAMoB,YAAYxB,cAChB;QACEO;QACAC;QACAF,YAAYA;IACd,GACAa,sBAAAA,gCAAAA,UAAWM,IAAI;IAEjB,MAAMC,YAAY1B,cAAc;QAAEM,YAAYW;OAAWG,YAAaD,sBAAAA,gCAAAA,UAAWQ,KAAK;IAEtF,qBACE,MAACzB;QACC0B,WAAU;QACVlB,OAAOA;QACPG,WAAWA;QACXD,MAAMA;QACNM,YAAYA;QACZP,MAAMA;QACNG,QAAQA;QACRC,OAAOA;QACPC,SAASA;QACTa,UAAUH,UAAUG,QAAQ;OACxBL;;0BAEJ,KAACrB;gBAAe2B,OAAM;gBAAGF,WAAU;gBAAQG,MAAK;eAAWL;YAC1DjB;;;AAGP,EAAE"}
@@ -1,10 +1,23 @@
1
1
  import * as React from 'react';
2
- import type { HasAlign, HasRef, HasRootRef } from '../../types';
2
+ import type { HasAlign, HasDataAttribute, HasRootRef } from '../../types';
3
3
  import { type FormFieldProps } from '../FormField/FormField';
4
- export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasAlign, Omit<FormFieldProps, 'maxHeight'> {
4
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLDivElement>, HasAlign, Omit<FormFieldProps, 'maxHeight'> {
5
+ /**
6
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
7
+ */
8
+ getRef?: React.Ref<HTMLInputElement>;
9
+ /**
10
+ * Свойства, которые можно прокинуть внутрь компонента:
11
+ * - `root`: свойства для прокидывания в корень компонента;
12
+ * - `input`: свойства для прокидывания в поле ввода.
13
+ */
14
+ slotProps?: {
15
+ root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;
16
+ input?: React.InputHTMLAttributes<HTMLInputElement> & HasRootRef<HTMLInputElement> & HasDataAttribute;
17
+ };
5
18
  }
6
19
  /**
7
20
  * @see https://vkui.io/components/input
8
21
  */
9
- export declare const Input: ({ type, align, getRef, className, getRootRef, style, before, after, status, mode, ...restProps }: InputProps) => React.ReactNode;
22
+ export declare const Input: ({ type, align, getRef, className: rootClassName, getRootRef, style, before, after, status, mode, slotProps, ...restProps }: InputProps) => React.ReactNode;
10
23
  //# sourceMappingURL=Input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASxE,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;CAAG;AAExC;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,kGAYnB,UAAU,KAAG,KAAK,CAAC,SA+BrB,CAAC"}
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAWxE,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;IACnC;;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;CACH;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,4HAcnB,UAAU,KAAG,KAAK,CAAC,SA+CrB,CAAC"}
@@ -6,8 +6,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { classNames } from "@vkontakte/vkjs";
8
8
  import { useAdaptivity } from "../../hooks/useAdaptivity.js";
9
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
10
+ import { warnOnce } from "../../lib/warnOnce.js";
9
11
  import { FormField } from "../FormField/FormField.js";
10
12
  import { UnstyledTextField } from "../UnstyledTextField/UnstyledTextField.js";
13
+ const warn = warnOnce('Input');
11
14
  const sizeYClassNames = {
12
15
  none: "vkuiInput__sizeYNone",
13
16
  compact: "vkuiInput__sizeYCompact"
@@ -15,7 +18,7 @@ const sizeYClassNames = {
15
18
  /**
16
19
  * @see https://vkui.io/components/input
17
20
  */ export const Input = (_param)=>{
18
- var { type = 'text', align = 'left', getRef, className, getRootRef, style, before, after, status, mode } = _param, restProps = _object_without_properties(_param, [
21
+ var { type = 'text', align = 'left', getRef, className: rootClassName, getRootRef, style, before, after, status, mode, slotProps } = _param, restProps = _object_without_properties(_param, [
19
22
  "type",
20
23
  "align",
21
24
  "getRef",
@@ -25,25 +28,37 @@ const sizeYClassNames = {
25
28
  "before",
26
29
  "after",
27
30
  "status",
28
- "mode"
31
+ "mode",
32
+ "slotProps"
29
33
  ]);
34
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
35
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
36
+ }
30
37
  const { sizeY = 'none' } = useAdaptivity();
31
- return /*#__PURE__*/ _jsx(FormField, {
32
- style: style,
38
+ const _useMergeProps = useMergeProps({
39
+ className: rootClassName,
40
+ getRootRef,
41
+ style
42
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root), { className } = _useMergeProps, rootProps = _object_without_properties(_useMergeProps, [
43
+ "className"
44
+ ]);
45
+ const inputRest = useMergeProps(_object_spread({
46
+ className: "vkuiInput__el",
47
+ getRootRef: getRef
48
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input);
49
+ return /*#__PURE__*/ _jsx(FormField, _object_spread_props(_object_spread({
33
50
  className: classNames("vkuiInput__host", align === 'right' && "vkuiInput__alignRight", align === 'center' && "vkuiInput__alignCenter", sizeY !== 'regular' && sizeYClassNames[sizeY], before && "vkuiInput__hasBefore", after && "vkuiInput__hasAfter", className),
34
- getRootRef: getRootRef,
35
51
  before: before,
36
52
  after: after,
37
- disabled: restProps.disabled,
53
+ disabled: inputRest.disabled,
38
54
  mode: mode,
39
- status: status,
40
- children: /*#__PURE__*/ _jsx(UnstyledTextField, _object_spread_props(_object_spread({}, restProps), {
55
+ status: status
56
+ }, rootProps), {
57
+ children: /*#__PURE__*/ _jsx(UnstyledTextField, _object_spread({
41
58
  as: "input",
42
- type: type,
43
- className: "vkuiInput__el",
44
- getRootRef: getRef
45
- }))
46
- });
59
+ type: type
60
+ }, inputRest))
61
+ }));
47
62
  };
48
63
 
49
64
  //# sourceMappingURL=Input.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { UnstyledTextField } from '../UnstyledTextField/UnstyledTextField';\nimport styles from './Input.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'maxHeight'> {}\n\n/**\n * @see https://vkui.io/components/input\n */\nexport const Input = ({\n type = 'text',\n align = 'left',\n getRef,\n className,\n getRootRef,\n style,\n before,\n after,\n status,\n mode,\n ...restProps\n}: InputProps): React.ReactNode => {\n const { sizeY = 'none' } = useAdaptivity();\n\n return (\n <FormField\n style={style}\n className={classNames(\n styles.host,\n align === 'right' && styles.alignRight,\n align === 'center' && styles.alignCenter,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles.hasBefore,\n after && styles.hasAfter,\n className,\n )}\n getRootRef={getRootRef}\n before={before}\n after={after}\n disabled={restProps.disabled}\n mode={mode}\n status={status}\n >\n <UnstyledTextField\n {...restProps}\n as=\"input\"\n type={type}\n className={styles.el}\n getRootRef={getRef}\n />\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","FormField","UnstyledTextField","sizeYClassNames","none","compact","Input","type","align","getRef","className","getRootRef","style","before","after","status","mode","restProps","sizeY","disabled","as"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAE1D,SAASC,SAAS,QAA6B,4BAAyB;AACxE,SAASC,iBAAiB,QAAQ,4CAAyC;AAG3E,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AASA;;CAEC,GACD,OAAO,MAAMC,QAAQ;QAAC,EACpBC,OAAO,MAAM,EACbC,QAAQ,MAAM,EACdC,MAAM,EACNC,SAAS,EACTC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EAEO,WADRC;QAVHV;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,EAAEE,QAAQ,MAAM,EAAE,GAAGlB;IAE3B,qBACE,KAACC;QACCW,OAAOA;QACPF,WAAWX,8BAETS,UAAU,oCACVA,UAAU,sCACVU,UAAU,aAAaf,eAAe,CAACe,MAAM,EAC7CL,kCACAC,gCACAJ;QAEFC,YAAYA;QACZE,QAAQA;QACRC,OAAOA;QACPK,UAAUF,UAAUE,QAAQ;QAC5BH,MAAMA;QACND,QAAQA;kBAER,cAAA,KAACb,2DACKe;YACJG,IAAG;YACHb,MAAMA;YACNG,SAAS;YACTC,YAAYF;;;AAIpB,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasAlign, HasDataAttribute, HasRootRef } from '../../types';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { UnstyledTextField } from '../UnstyledTextField/UnstyledTextField';\nimport styles from './Input.module.css';\n\nconst warn = warnOnce('Input');\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Omit<FormFieldProps, 'maxHeight'> {\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\n/**\n * @see https://vkui.io/components/input\n */\nexport const Input = ({\n type = 'text',\n align = 'left',\n getRef,\n className: rootClassName,\n getRootRef,\n style,\n before,\n after,\n status,\n mode,\n\n slotProps,\n ...restProps\n}: InputProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const { className, ...rootProps } = useMergeProps(\n {\n className: rootClassName,\n getRootRef,\n style,\n },\n slotProps?.root,\n );\n\n const inputRest = useMergeProps(\n {\n className: styles.el,\n getRootRef: getRef,\n ...restProps,\n },\n slotProps?.input,\n );\n\n return (\n <FormField\n className={classNames(\n styles.host,\n align === 'right' && styles.alignRight,\n align === 'center' && styles.alignCenter,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n before && styles.hasBefore,\n after && styles.hasAfter,\n className,\n )}\n before={before}\n after={after}\n disabled={inputRest.disabled}\n mode={mode}\n status={status}\n {...rootProps}\n >\n <UnstyledTextField as=\"input\" type={type} {...inputRest} />\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useMergeProps","warnOnce","FormField","UnstyledTextField","warn","sizeYClassNames","none","compact","Input","type","align","getRef","className","rootClassName","getRootRef","style","before","after","status","mode","slotProps","restProps","process","env","NODE_ENV","sizeY","root","rootProps","inputRest","input","disabled","as"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,SAAS,QAA6B,4BAAyB;AACxE,SAASC,iBAAiB,QAAQ,4CAAyC;AAG3E,MAAMC,OAAOH,SAAS;AAEtB,MAAMI,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAwBA;;CAEC,GACD,OAAO,MAAMC,QAAQ;QAAC,EACpBC,OAAO,MAAM,EACbC,QAAQ,MAAM,EACdC,MAAM,EACNC,WAAWC,aAAa,EACxBC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,EACLC,MAAM,EACNC,IAAI,EAEJC,SAAS,EAEE,WADRC;QAZHZ;QACAC;QACAC;QACAC;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAGA,6CAA6C,GAC7C,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiBb,QAAQ;QACpDP,KAAK;IACP;IAEA,MAAM,EAAEqB,QAAQ,MAAM,EAAE,GAAG1B;IAE3B,MAAoCC,iBAAAA,cAClC;QACEY,WAAWC;QACXC;QACAC;IACF,GACAK,sBAAAA,gCAAAA,UAAWM,IAAI,GANX,EAAEd,SAAS,EAAgB,GAAGZ,gBAAd2B,uCAAc3B;QAA5BY;;IASR,MAAMgB,YAAY5B,cAChB;QACEY,SAAS;QACTE,YAAYH;OACTU,YAELD,sBAAAA,gCAAAA,UAAWS,KAAK;IAGlB,qBACE,KAAC3B;QACCU,WAAWd,8BAETY,UAAU,oCACVA,UAAU,sCACVe,UAAU,aAAapB,eAAe,CAACoB,MAAM,EAC7CT,kCACAC,gCACAL;QAEFI,QAAQA;QACRC,OAAOA;QACPa,UAAUF,UAAUE,QAAQ;QAC5BX,MAAMA;QACND,QAAQA;OACJS;kBAEJ,cAAA,KAACxB;YAAkB4B,IAAG;YAAQtB,MAAMA;WAAUmB;;AAGpD,EAAE"}
@@ -1,6 +1,6 @@
1
1
  import { type ChangeEvent } from 'react';
2
2
  import * as React from 'react';
3
- import type { HasAlign, HasRef, HasRootRef } from '../../types';
3
+ import type { HasAlign, HasDataAttribute, HasRootRef } from '../../types';
4
4
  import { type FormFieldProps } from '../FormField/FormField';
5
5
  import type { SelectType } from '../Select/Select';
6
6
  export type SelectValue = Exclude<React.SelectHTMLAttributes<HTMLSelectElement>['value'], undefined> | null;
@@ -14,7 +14,21 @@ export declare const NOT_SELECTED: {
14
14
  */
15
15
  export declare const remapFromSelectValueToNativeValue: (value: SelectValue) => NativeSelectValue;
16
16
  export declare const remapFromNativeValueToSelectValue: (value: NativeSelectValue) => SelectValue;
17
- export interface NativeSelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'multiple' | 'value' | 'defaultValue' | 'onChange'>, HasRef<HTMLSelectElement>, HasRootRef<HTMLDivElement>, HasAlign, Pick<FormFieldProps, 'before' | 'status'> {
17
+ export type NativeHTMLSelectProps = Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'multiple' | 'value' | 'defaultValue' | 'onChange'>;
18
+ export interface NativeSelectProps extends NativeHTMLSelectProps, HasRootRef<HTMLDivElement>, HasAlign, Pick<FormFieldProps, 'before' | 'status'> {
19
+ /**
20
+ * Свойства, которые можно прокинуть внутрь компонента:
21
+ * - `root`: свойства для прокидывания в корень компонента;
22
+ * - `select`: свойства для прокидывания в нативный `select`.
23
+ */
24
+ slotProps?: {
25
+ root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & HasDataAttribute & HasRootRef<HTMLDivElement>;
26
+ select?: NativeHTMLSelectProps & HasRootRef<HTMLSelectElement> & HasDataAttribute;
27
+ };
28
+ /**
29
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { getRootRef: ... } }`.
30
+ */
31
+ getRef?: React.Ref<HTMLSelectElement>;
18
32
  /**
19
33
  * Выбранное значение.
20
34
  *
@@ -54,5 +68,5 @@ export interface NativeSelectProps extends Omit<React.SelectHTMLAttributes<HTMLS
54
68
  /**
55
69
  * @see https://vkui.io/components/native-select
56
70
  */
57
- export declare const NativeSelect: ({ style, align, placeholder, children, className, getRef, getRootRef, disabled, multiline, selectType, status, icon, before, onChange, value, defaultValue, ...restProps }: NativeSelectProps) => React.ReactNode;
71
+ export declare const NativeSelect: ({ style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, align, placeholder, children, getRef, multiline, selectType, status, icon, before, onChange, value, defaultValue, slotProps, ...restProps }: NativeSelectProps) => React.ReactNode;
58
72
  //# sourceMappingURL=NativeSelect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeSelect.d.ts","sourceRoot":"","sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AASnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EACtD,SAAS,CACV,GAAG,IAAI,CAAC;AAET,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAAI,OAAO,WAAW,KAAG,iBACV,CAAC;AAE9D,eAAO,MAAM,iCAAiC,GAAI,OAAO,iBAAiB,KAAG,WAChB,CAAC;AAE9D,MAAM,WAAW,iBACf,SAAQ,IAAI,CACR,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CACnD,EACD,MAAM,CAAC,iBAAiB,CAAC,EACzB,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3C;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9E;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,4KAkB1B,iBAAiB,KAAG,KAAK,CAAC,SAuE5B,CAAC"}
1
+ {"version":3,"file":"NativeSelect.d.ts","sourceRoot":"","sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EACtD,SAAS,CACV,GAAG,IAAI,CAAC;AAET,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;CAGxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAAI,OAAO,WAAW,KAAG,iBACV,CAAC;AAE9D,eAAO,MAAM,iCAAiC,GAAI,OAAO,iBAAiB,KAAG,WAChB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CACnD,CAAC;AAEF,MAAM,WAAW,iBACf,SAAQ,qBAAqB,EAC3B,UAAU,CAAC,cAAc,CAAC,EAC1B,QAAQ,EACR,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3C;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAC3D,gBAAgB,GAChB,UAAU,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,qBAAqB,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,gBAAgB,CAAC;KACnF,CAAC;IACF;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9E;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,uNAmB1B,iBAAiB,KAAG,KAAK,CAAC,SAwF5B,CAAC"}
@@ -7,12 +7,16 @@ import * as React from "react";
7
7
  import { classNames } from "@vkontakte/vkjs";
8
8
  import { useAdaptivity } from "../../hooks/useAdaptivity.js";
9
9
  import { useExternRef } from "../../hooks/useExternRef.js";
10
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
10
11
  import { callMultiple } from "../../lib/callMultiple.js";
11
12
  import { getFormFieldModeFromSelectType } from "../../lib/select.js";
12
13
  import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
14
+ import { warnOnce } from "../../lib/warnOnce.js";
13
15
  import { DropdownIcon } from "../DropdownIcon/DropdownIcon.js";
14
16
  import { FormField } from "../FormField/FormField.js";
17
+ import { RootComponent } from "../RootComponent/RootComponent.js";
15
18
  import { SelectTypography } from "../SelectTypography/SelectTypography.js";
19
+ const warn = warnOnce('NativeSelect');
16
20
  const sizeYClassNames = {
17
21
  none: "vkuiSelect__sizeYNone",
18
22
  compact: "vkuiSelect__sizeYCompact"
@@ -28,15 +32,14 @@ export const remapFromNativeValueToSelectValue = (value)=>value === NOT_SELECTED
28
32
  /**
29
33
  * @see https://vkui.io/components/native-select
30
34
  */ export const NativeSelect = (_param)=>{
31
- var { style, align, placeholder, children, className, getRef, getRootRef, disabled, multiline, selectType = 'default', status, icon = /*#__PURE__*/ _jsx(DropdownIcon, {}), before, onChange, value, defaultValue } = _param, restProps = _object_without_properties(_param, [
35
+ var { style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, align, placeholder, children, getRef, multiline, selectType = 'default', status, icon = /*#__PURE__*/ _jsx(DropdownIcon, {}), before, onChange, value, defaultValue, slotProps } = _param, restProps = _object_without_properties(_param, [
32
36
  "style",
37
+ "className",
38
+ "getRootRef",
33
39
  "align",
34
40
  "placeholder",
35
41
  "children",
36
- "className",
37
42
  "getRef",
38
- "getRootRef",
39
- "disabled",
40
43
  "multiline",
41
44
  "selectType",
42
45
  "status",
@@ -44,12 +47,30 @@ export const remapFromNativeValueToSelectValue = (value)=>value === NOT_SELECTED
44
47
  "before",
45
48
  "onChange",
46
49
  "value",
47
- "defaultValue"
50
+ "defaultValue",
51
+ "slotProps"
48
52
  ]);
53
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
54
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ select: { getRootRef: ... } }`');
55
+ }
49
56
  const [title, setTitle] = React.useState('');
50
57
  const [empty, setEmpty] = React.useState(false);
51
- const selectRef = useExternRef(getRef);
52
58
  const { sizeY = 'none' } = useAdaptivity();
59
+ const _useMergeProps = useMergeProps({
60
+ style: rootStyle,
61
+ className: rootClassName,
62
+ getRootRef: rootGetRootRef
63
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root), { className, style, getRootRef } = _useMergeProps, rootRest = _object_without_properties(_useMergeProps, [
64
+ "className",
65
+ "style",
66
+ "getRootRef"
67
+ ]);
68
+ const _useMergeProps1 = useMergeProps(_object_spread({
69
+ getRootRef: getRef
70
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.select), { getRootRef: getSelectRef } = _useMergeProps1, selectRest = _object_without_properties(_useMergeProps1, [
71
+ "getRootRef"
72
+ ]);
73
+ const selectRef = useExternRef(getSelectRef);
53
74
  const checkSelectedOption = ()=>{
54
75
  var _selectRef_current;
55
76
  const selectedOption = (_selectRef_current = selectRef.current) === null || _selectRef_current === void 0 ? void 0 : _selectRef_current.options[selectRef.current.selectedIndex];
@@ -71,24 +92,26 @@ export const remapFromNativeValueToSelectValue = (value)=>value === NOT_SELECTED
71
92
  useIsomorphicLayoutEffect(checkSelectedOption, [
72
93
  children
73
94
  ]);
74
- return /*#__PURE__*/ _jsxs(FormField, {
95
+ return /*#__PURE__*/ _jsxs(FormField, _object_spread_props(_object_spread({
75
96
  Component: "div",
76
97
  className: classNames("vkuiSelect__host", 'vkuiInternalNativeSelect', before && "vkuiSelect__hasBefore", empty && "vkuiSelect__empty", multiline && "vkuiSelect__multiline", align === 'center' && "vkuiSelect__alignCenter", align === 'right' && "vkuiSelect__alignRight", sizeY !== 'regular' && sizeYClassNames[sizeY], className),
77
98
  style: style,
78
99
  getRootRef: getRootRef,
79
- disabled: disabled,
100
+ disabled: selectRest.disabled,
80
101
  before: before,
81
102
  after: icon,
82
103
  status: status,
83
- mode: getFormFieldModeFromSelectType(selectType),
104
+ mode: getFormFieldModeFromSelectType(selectType)
105
+ }, rootRest), {
84
106
  children: [
85
- /*#__PURE__*/ _jsxs("select", _object_spread_props(_object_spread({}, restProps), {
107
+ /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
108
+ Component: "select",
109
+ baseClassName: "vkuiSelect__el",
86
110
  value: value !== undefined ? remapFromSelectValueToNativeValue(value) : value,
87
111
  defaultValue: defaultValue !== undefined ? remapFromSelectValueToNativeValue(defaultValue) : defaultValue,
88
- disabled: disabled,
89
- className: "vkuiSelect__el",
90
112
  onChange: callMultiple(_onChange, checkSelectedOption),
91
- ref: selectRef,
113
+ getRootRef: selectRef
114
+ }, selectRest), {
92
115
  children: [
93
116
  placeholder && /*#__PURE__*/ _jsx("option", {
94
117
  value: NOT_SELECTED.NATIVE,
@@ -107,7 +130,7 @@ export const remapFromNativeValueToSelectValue = (value)=>value === NOT_SELECTED
107
130
  })
108
131
  })
109
132
  ]
110
- });
133
+ }));
111
134
  };
112
135
 
113
136
  //# sourceMappingURL=NativeSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent, type ChangeEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasAlign, HasRef, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type SelectValue = Exclude<\n React.SelectHTMLAttributes<HTMLSelectElement>['value'],\n undefined\n> | null;\n\nexport type NativeSelectValue = Exclude<SelectValue, null>;\n\nexport const NOT_SELECTED = {\n NATIVE: '__vkui_internal_Select_not_selected__',\n CUSTOM: null,\n};\n\n/**\n * @visibleName NativeSelect\n */\nexport const remapFromSelectValueToNativeValue = (value: SelectValue): NativeSelectValue =>\n value === NOT_SELECTED.CUSTOM ? NOT_SELECTED.NATIVE : value;\n\nexport const remapFromNativeValueToSelectValue = (value: NativeSelectValue): SelectValue =>\n value === NOT_SELECTED.NATIVE ? NOT_SELECTED.CUSTOM : value;\n\nexport interface NativeSelectProps\n extends Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'multiple' | 'value' | 'defaultValue' | 'onChange'\n >,\n HasRef<HTMLSelectElement>,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n /**\n * Выбранное значение.\n *\n * > ⚠️ Важно: При прокидывании `undefined` компонент будет считаться `Uncontrolled`.\n * >\n * > Не используйте `undefined`, чтобы показать невыбранное состояние. Вместо этого используйте `null`.\n */\n value?: SelectValue;\n /**\n * См. `value`.\n */\n defaultValue?: SelectValue;\n /**\n * Обработчик, срабатывающий при изменении выбранного значения.\n * Вторым параметром прокидывается новое значение.\n *\n * > ⚠️ Лучше использовать второй параметр при работе с компонентом.\n */\n onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;\n /**\n * Текст-подсказка при отсутствии выбранного значения.\n */\n placeholder?: string;\n /**\n * Флаг для включения многострочного режима.\n */\n multiline?: boolean;\n /**\n * Тип селекта, влияющий на отображение.\n */\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка.\n */\n icon?: React.ReactNode;\n}\n\n/**\n * @see https://vkui.io/components/native-select\n */\nexport const NativeSelect = ({\n style,\n align,\n placeholder,\n children,\n className,\n getRef,\n getRootRef,\n disabled,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange,\n value,\n defaultValue,\n ...restProps\n}: NativeSelectProps): React.ReactNode => {\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const selectRef = useExternRef(getRef);\n const { sizeY = 'none' } = useAdaptivity();\n\n const checkSelectedOption = () => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === NOT_SELECTED.NATIVE && placeholder != null);\n }\n };\n\n const _onChange: ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newValue = remapFromNativeValueToSelectValue(e.target.value);\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n onChange?.(e, newValue);\n };\n useIsomorphicLayoutEffect(checkSelectedOption, [children]);\n\n return (\n <FormField\n Component=\"div\"\n className={classNames(\n styles.host,\n 'vkuiInternalNativeSelect',\n before && styles.hasBefore,\n empty && styles.empty,\n multiline && styles.multiline,\n align === 'center' && styles.alignCenter,\n align === 'right' && styles.alignRight,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={disabled}\n before={before}\n after={icon}\n status={status}\n mode={getFormFieldModeFromSelectType(selectType)}\n >\n <select\n {...restProps}\n value={value !== undefined ? remapFromSelectValueToNativeValue(value) : value}\n defaultValue={\n defaultValue !== undefined\n ? remapFromSelectValueToNativeValue(defaultValue)\n : defaultValue\n }\n disabled={disabled}\n className={styles.el}\n onChange={callMultiple(_onChange, checkSelectedOption)}\n ref={selectRef}\n >\n {placeholder && <option value={NOT_SELECTED.NATIVE}>{placeholder}</option>}\n {children}\n </select>\n <div className={styles.container} aria-hidden>\n <SelectTypography className={styles.title} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","callMultiple","getFormFieldModeFromSelectType","useIsomorphicLayoutEffect","DropdownIcon","FormField","SelectTypography","sizeYClassNames","none","compact","NOT_SELECTED","NATIVE","CUSTOM","remapFromSelectValueToNativeValue","value","remapFromNativeValueToSelectValue","NativeSelect","style","align","placeholder","children","className","getRef","getRootRef","disabled","multiline","selectType","status","icon","before","onChange","defaultValue","restProps","title","setTitle","useState","empty","setEmpty","selectRef","sizeY","checkSelectedOption","selectedOption","current","options","selectedIndex","text","_onChange","e","newValue","target","currentTarget","Component","after","mode","select","undefined","ref","option","div","aria-hidden"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/NativeSelect/NativeSelect.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent, type ChangeEventHandler } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasAlign, HasDataAttribute, HasRootRef } from '../../types';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormField, type FormFieldProps } from '../FormField/FormField';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { SelectType } from '../Select/Select';\nimport { SelectTypography } from '../SelectTypography/SelectTypography';\nimport styles from '../Select/Select.module.css';\n\nconst warn = warnOnce('NativeSelect');\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport type SelectValue = Exclude<\n React.SelectHTMLAttributes<HTMLSelectElement>['value'],\n undefined\n> | null;\n\nexport type NativeSelectValue = Exclude<SelectValue, null>;\n\nexport const NOT_SELECTED = {\n NATIVE: '__vkui_internal_Select_not_selected__',\n CUSTOM: null,\n};\n\n/**\n * @visibleName NativeSelect\n */\nexport const remapFromSelectValueToNativeValue = (value: SelectValue): NativeSelectValue =>\n value === NOT_SELECTED.CUSTOM ? NOT_SELECTED.NATIVE : value;\n\nexport const remapFromNativeValueToSelectValue = (value: NativeSelectValue): SelectValue =>\n value === NOT_SELECTED.NATIVE ? NOT_SELECTED.CUSTOM : value;\n\nexport type NativeHTMLSelectProps = Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'multiple' | 'value' | 'defaultValue' | 'onChange'\n>;\n\nexport interface NativeSelectProps\n extends NativeHTMLSelectProps,\n HasRootRef<HTMLDivElement>,\n HasAlign,\n Pick<FormFieldProps, 'before' | 'status'> {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `select`: свойства для прокидывания в нативный `select`.\n */\n slotProps?: {\n root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> &\n HasDataAttribute &\n HasRootRef<HTMLDivElement>;\n select?: NativeHTMLSelectProps & HasRootRef<HTMLSelectElement> & HasDataAttribute;\n };\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ select: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLSelectElement>;\n /**\n * Выбранное значение.\n *\n * > ⚠️ Важно: При прокидывании `undefined` компонент будет считаться `Uncontrolled`.\n * >\n * > Не используйте `undefined`, чтобы показать невыбранное состояние. Вместо этого используйте `null`.\n */\n value?: SelectValue;\n /**\n * См. `value`.\n */\n defaultValue?: SelectValue;\n /**\n * Обработчик, срабатывающий при изменении выбранного значения.\n * Вторым параметром прокидывается новое значение.\n *\n * > ⚠️ Лучше использовать второй параметр при работе с компонентом.\n */\n onChange?: (e: ChangeEvent<HTMLSelectElement>, newValue: SelectValue) => void;\n /**\n * Текст-подсказка при отсутствии выбранного значения.\n */\n placeholder?: string;\n /**\n * Флаг для включения многострочного режима.\n */\n multiline?: boolean;\n /**\n * Тип селекта, влияющий на отображение.\n */\n selectType?: SelectType;\n /**\n * Иконка раскрывающегося списка.\n */\n icon?: React.ReactNode;\n}\n\n/**\n * @see https://vkui.io/components/native-select\n */\nexport const NativeSelect = ({\n style: rootStyle,\n className: rootClassName,\n getRootRef: rootGetRootRef,\n align,\n placeholder,\n children,\n getRef,\n multiline,\n selectType = 'default',\n status,\n icon = <DropdownIcon />,\n before,\n onChange,\n value,\n defaultValue,\n\n slotProps,\n ...restProps\n}: NativeSelectProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ select: { getRootRef: ... } }`');\n }\n\n const [title, setTitle] = React.useState('');\n const [empty, setEmpty] = React.useState(false);\n const { sizeY = 'none' } = useAdaptivity();\n\n const { className, style, getRootRef, ...rootRest } = useMergeProps(\n { style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef },\n slotProps?.root,\n );\n\n const { getRootRef: getSelectRef, ...selectRest } = useMergeProps(\n { getRootRef: getRef, ...restProps },\n slotProps?.select,\n );\n\n const selectRef = useExternRef(getSelectRef);\n\n const checkSelectedOption = () => {\n const selectedOption = selectRef.current?.options[selectRef.current.selectedIndex];\n if (selectedOption) {\n setTitle(selectedOption.text);\n setEmpty(selectedOption.value === NOT_SELECTED.NATIVE && placeholder != null);\n }\n };\n\n const _onChange: ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newValue = remapFromNativeValueToSelectValue(e.target.value);\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n onChange?.(e, newValue);\n };\n useIsomorphicLayoutEffect(checkSelectedOption, [children]);\n\n return (\n <FormField\n Component=\"div\"\n className={classNames(\n styles.host,\n 'vkuiInternalNativeSelect',\n before && styles.hasBefore,\n empty && styles.empty,\n multiline && styles.multiline,\n align === 'center' && styles.alignCenter,\n align === 'right' && styles.alignRight,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n getRootRef={getRootRef}\n disabled={selectRest.disabled}\n before={before}\n after={icon}\n status={status}\n mode={getFormFieldModeFromSelectType(selectType)}\n {...rootRest}\n >\n <RootComponent\n Component=\"select\"\n baseClassName={styles.el}\n value={value !== undefined ? remapFromSelectValueToNativeValue(value) : value}\n defaultValue={\n defaultValue !== undefined\n ? remapFromSelectValueToNativeValue(defaultValue)\n : defaultValue\n }\n onChange={callMultiple(_onChange, checkSelectedOption)}\n getRootRef={selectRef}\n {...selectRest}\n >\n {placeholder && <option value={NOT_SELECTED.NATIVE}>{placeholder}</option>}\n {children}\n </RootComponent>\n <div className={styles.container} aria-hidden>\n <SelectTypography className={styles.title} selectType={selectType}>\n {title}\n </SelectTypography>\n </div>\n </FormField>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useExternRef","useMergeProps","callMultiple","getFormFieldModeFromSelectType","useIsomorphicLayoutEffect","warnOnce","DropdownIcon","FormField","RootComponent","SelectTypography","warn","sizeYClassNames","none","compact","NOT_SELECTED","NATIVE","CUSTOM","remapFromSelectValueToNativeValue","value","remapFromNativeValueToSelectValue","NativeSelect","style","rootStyle","className","rootClassName","getRootRef","rootGetRootRef","align","placeholder","children","getRef","multiline","selectType","status","icon","before","onChange","defaultValue","slotProps","restProps","process","env","NODE_ENV","title","setTitle","useState","empty","setEmpty","sizeY","root","rootRest","select","getSelectRef","selectRest","selectRef","checkSelectedOption","selectedOption","current","options","selectedIndex","text","_onChange","e","newValue","target","currentTarget","Component","disabled","after","mode","baseClassName","undefined","option","div","aria-hidden"],"mappings":"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"}
@@ -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 { TappableOmitProps } from '../Tappable/Tappable';
4
4
  import { RadioInput } from './RadioInput/RadioInput';
5
- export interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement>, HasRootRef<HTMLLabelElement>, Pick<TappableOmitProps, 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'> {
5
+ export interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLLabelElement>, Pick<TappableOmitProps, 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'> {
6
+ /**
7
+ * Свойства, которые можно прокинуть внутрь компонента:
8
+ * - `root`: свойства для прокидывания в корень компонента;
9
+ * - `input`: свойства для прокидывания в скрытый `input`.
10
+ */
11
+ slotProps?: {
12
+ root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> & HasRootRef<HTMLLabelElement> & HasDataAttribute;
13
+ input?: React.ComponentProps<'input'> & HasRootRef<HTMLInputElement> & HasDataAttribute;
14
+ };
15
+ /**
16
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
17
+ */
18
+ getRef?: React.Ref<HTMLInputElement>;
6
19
  /**
7
20
  * Дополнительное описание под основным текстом.
8
21
  */
@@ -12,6 +25,8 @@ export interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement>,
12
25
  */
13
26
  titleAfter?: React.ReactNode;
14
27
  /**
28
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ root: {...} }`.
29
+ *
15
30
  * Позволяет передавать data-* аттрибуты элементу label.
16
31
  **/
17
32
  labelProps?: HasDataAttribute;
@@ -20,7 +35,7 @@ export interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement>,
20
35
  * @see https://vkui.io/components/radio
21
36
  */
22
37
  export declare const Radio: {
23
- ({ children, description, style, className, getRootRef, titleAfter, getRef, labelProps, hoverMode, activeMode, hasHover, hasActive, focusVisibleMode, ...restProps }: RadioProps): React.ReactNode;
38
+ ({ children, description, style, className, getRootRef, titleAfter, getRef, labelProps, hoverMode, activeMode, hasHover, hasActive, focusVisibleMode, slotProps, ...restProps }: RadioProps): React.ReactNode;
24
39
  Input: typeof RadioInput;
25
40
  };
26
41
  //# sourceMappingURL=Radio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC,EACxB,UAAU,CAAC,gBAAgB,CAAC,EAC5B,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,CAC3E;IACH;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;QAEI;IACJ,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;0KAef,UAAU,GAAG,KAAK,CAAC,SAAS;;CAoB9B,CAAC"}
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKrD,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,IAAI,CACF,iBAAiB,EACjB,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,CAC3E;IACH;;;;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,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;KACzF,CAAC;IACF;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrC;;OAEG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B;;OAEG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;QAII;IACJ,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;qLAiBf,UAAU,GAAG,KAAK,CAAC,SAAS;;CAuC9B,CAAC"}
@@ -1,16 +1,20 @@
1
+ 'use client';
1
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
3
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
4
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
4
5
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
6
  import * as React from "react";
6
7
  import { classNames } from "@vkontakte/vkjs";
8
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
9
+ import { warnOnce } from "../../lib/warnOnce.js";
7
10
  import { SelectionControl } from "../SelectionControl/SelectionControl.js";
8
11
  import { SelectionControlLabel } from "../SelectionControl/SelectionControlLabel/SelectionControlLabel.js";
9
12
  import { RadioInput } from "./RadioInput/RadioInput.js";
13
+ const warn = warnOnce('Radio');
10
14
  /**
11
15
  * @see https://vkui.io/components/radio
12
16
  */ export const Radio = (_param)=>{
13
- var { children, description, style, className, getRootRef, titleAfter, getRef, labelProps, hoverMode, activeMode, hasHover, hasActive, focusVisibleMode } = _param, restProps = _object_without_properties(_param, [
17
+ var { children, description, style, className, getRootRef, titleAfter, getRef, labelProps, hoverMode, activeMode, hasHover, hasActive, focusVisibleMode, slotProps } = _param, restProps = _object_without_properties(_param, [
14
18
  "children",
15
19
  "description",
16
20
  "style",
@@ -23,23 +27,39 @@ import { RadioInput } from "./RadioInput/RadioInput.js";
23
27
  "activeMode",
24
28
  "hasHover",
25
29
  "hasActive",
26
- "focusVisibleMode"
30
+ "focusVisibleMode",
31
+ "slotProps"
27
32
  ]);
28
- return /*#__PURE__*/ _jsxs(SelectionControl, _object_spread_props(_object_spread({
29
- style: style,
33
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development') {
34
+ if (labelProps) {
35
+ warn('Свойство `labelProps` устаревшее, используйте `slotProps={ root: {...} }`');
36
+ }
37
+ if (getRef) {
38
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
39
+ }
40
+ }
41
+ const rootProps = useMergeProps(_object_spread({
42
+ style,
30
43
  className: classNames("vkuiRadio__host", className),
31
- disabled: restProps.disabled,
32
- getRootRef: getRootRef,
44
+ getRootRef
45
+ }, labelProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
46
+ const inputRest = useMergeProps(_object_spread({
47
+ getRootRef: getRef
48
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input);
49
+ return /*#__PURE__*/ _jsxs(SelectionControl, _object_spread_props(_object_spread({
33
50
  hoverMode: hoverMode,
34
51
  activeMode: activeMode,
35
52
  hasHover: hasHover,
36
53
  hasActive: hasActive,
37
- focusVisibleMode: focusVisibleMode
38
- }, labelProps), {
54
+ focusVisibleMode: focusVisibleMode,
55
+ disabled: inputRest.disabled
56
+ }, rootProps), {
39
57
  children: [
40
- /*#__PURE__*/ _jsx(RadioInput, _object_spread_props(_object_spread({}, restProps), {
41
- getRef: getRef
42
- })),
58
+ /*#__PURE__*/ _jsx(RadioInput, {
59
+ slotProps: {
60
+ input: inputRest
61
+ }
62
+ }),
43
63
  /*#__PURE__*/ _jsx(SelectionControlLabel, {
44
64
  titleAfter: titleAfter,
45
65
  description: description,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HasDataAttribute, HasRef, HasRootRef } from '../../types';\nimport { SelectionControl } from '../SelectionControl/SelectionControl';\nimport { SelectionControlLabel } from '../SelectionControl/SelectionControlLabel/SelectionControlLabel';\nimport type { TappableOmitProps } from '../Tappable/Tappable';\nimport { RadioInput } from './RadioInput/RadioInput';\nimport styles from './Radio.module.css';\n\nexport interface RadioProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n /**\n * Дополнительное описание под основным текстом.\n */\n description?: React.ReactNode;\n /**\n * Элемент после основного текста.\n */\n titleAfter?: React.ReactNode;\n /**\n * Позволяет передавать data-* аттрибуты элементу label.\n **/\n labelProps?: HasDataAttribute;\n}\n\n/**\n * @see https://vkui.io/components/radio\n */\nexport const Radio = ({\n children,\n description,\n style,\n className,\n getRootRef,\n titleAfter,\n getRef,\n labelProps,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n ...restProps\n}: RadioProps): React.ReactNode => {\n return (\n <SelectionControl\n style={style}\n className={classNames(styles.host, className)}\n disabled={restProps.disabled}\n getRootRef={getRootRef}\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n {...labelProps}\n >\n <RadioInput {...restProps} getRef={getRef} />\n <SelectionControlLabel titleAfter={titleAfter} description={description}>\n {children}\n </SelectionControlLabel>\n </SelectionControl>\n );\n};\n\nRadio.Input = RadioInput;\n"],"names":["React","classNames","SelectionControl","SelectionControlLabel","RadioInput","Radio","children","description","style","className","getRootRef","titleAfter","getRef","labelProps","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","restProps","disabled","Input"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,gBAAgB,QAAQ,0CAAuC;AACxE,SAASC,qBAAqB,QAAQ,qEAAkE;AAExG,SAASC,UAAU,QAAQ,6BAA0B;AAyBrD;;CAEC,GACD,OAAO,MAAMC,QAAQ;QAAC,EACpBC,QAAQ,EACRC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,EAEL,WADRC;QAbHb;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,qBACE,MAAChB;QACCM,OAAOA;QACPC,WAAWR,8BAAwBQ;QACnCW,UAAUD,UAAUC,QAAQ;QAC5BV,YAAYA;QACZI,WAAWA;QACXC,YAAYA;QACZC,UAAUA;QACVC,WAAWA;QACXC,kBAAkBA;OACdL;;0BAEJ,KAACT,oDAAee;gBAAWP,QAAQA;;0BACnC,KAACT;gBAAsBQ,YAAYA;gBAAYJ,aAAaA;0BACzDD;;;;AAIT,EAAE;AAEFD,MAAMgB,KAAK,GAAGjB"}
1
+ {"version":3,"sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasDataAttribute, HasRootRef } from '../../types';\nimport { SelectionControl } from '../SelectionControl/SelectionControl';\nimport { SelectionControlLabel } from '../SelectionControl/SelectionControlLabel/SelectionControlLabel';\nimport type { TappableOmitProps } from '../Tappable/Tappable';\nimport { RadioInput } from './RadioInput/RadioInput';\nimport styles from './Radio.module.css';\n\nconst warn = warnOnce('Radio');\n\nexport interface RadioProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n Pick<\n TappableOmitProps,\n 'hoverMode' | 'activeMode' | 'hasHover' | 'hasActive' | 'focusVisibleMode'\n > {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `input`: свойства для прокидывания в скрытый `input`.\n */\n slotProps?: {\n root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> &\n HasRootRef<HTMLLabelElement> &\n HasDataAttribute;\n input?: React.ComponentProps<'input'> & HasRootRef<HTMLInputElement> & HasDataAttribute;\n };\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLInputElement>;\n /**\n * Дополнительное описание под основным текстом.\n */\n description?: React.ReactNode;\n /**\n * Элемент после основного текста.\n */\n titleAfter?: React.ReactNode;\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ root: {...} }`.\n *\n * Позволяет передавать data-* аттрибуты элементу label.\n **/\n labelProps?: HasDataAttribute;\n}\n\n/**\n * @see https://vkui.io/components/radio\n */\nexport const Radio = ({\n children,\n description,\n style,\n className,\n getRootRef,\n titleAfter,\n getRef,\n labelProps,\n hoverMode,\n activeMode,\n hasHover,\n hasActive,\n focusVisibleMode,\n\n slotProps,\n ...restProps\n}: RadioProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development') {\n if (labelProps) {\n warn('Свойство `labelProps` устаревшее, используйте `slotProps={ root: {...} }`');\n }\n if (getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n }\n\n const rootProps = useMergeProps(\n {\n style,\n className: classNames(styles.host, className),\n getRootRef,\n ...labelProps,\n },\n slotProps?.root,\n );\n\n const inputRest = useMergeProps({ getRootRef: getRef, ...restProps }, slotProps?.input);\n\n return (\n <SelectionControl\n hoverMode={hoverMode}\n activeMode={activeMode}\n hasHover={hasHover}\n hasActive={hasActive}\n focusVisibleMode={focusVisibleMode}\n disabled={inputRest.disabled}\n {...rootProps}\n >\n <RadioInput slotProps={{ input: inputRest }} />\n <SelectionControlLabel titleAfter={titleAfter} description={description}>\n {children}\n </SelectionControlLabel>\n </SelectionControl>\n );\n};\n\nRadio.Input = RadioInput;\n"],"names":["React","classNames","useMergeProps","warnOnce","SelectionControl","SelectionControlLabel","RadioInput","warn","Radio","children","description","style","className","getRootRef","titleAfter","getRef","labelProps","hoverMode","activeMode","hasHover","hasActive","focusVisibleMode","slotProps","restProps","process","env","NODE_ENV","rootProps","root","inputRest","input","disabled","Input"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,gBAAgB,QAAQ,0CAAuC;AACxE,SAASC,qBAAqB,QAAQ,qEAAkE;AAExG,SAASC,UAAU,QAAQ,6BAA0B;AAGrD,MAAMC,OAAOJ,SAAS;AAwCtB;;CAEC,GACD,OAAO,MAAMK,QAAQ;QAAC,EACpBC,QAAQ,EACRC,WAAW,EACXC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,QAAQ,EACRC,SAAS,EACTC,gBAAgB,EAEhBC,SAAS,EAEE,WADRC;QAfHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAGA,6CAA6C,GAC7C,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,IAAIV,YAAY;YACdT,KAAK;QACP;QACA,IAAIQ,QAAQ;YACVR,KAAK;QACP;IACF;IAEA,MAAMoB,YAAYzB,cAChB;QACES;QACAC,WAAWX,8BAAwBW;QACnCC;OACGG,aAELM,sBAAAA,gCAAAA,UAAWM,IAAI;IAGjB,MAAMC,YAAY3B,cAAc;QAAEW,YAAYE;OAAWQ,YAAaD,sBAAAA,gCAAAA,UAAWQ,KAAK;IAEtF,qBACE,MAAC1B;QACCa,WAAWA;QACXC,YAAYA;QACZC,UAAUA;QACVC,WAAWA;QACXC,kBAAkBA;QAClBU,UAAUF,UAAUE,QAAQ;OACxBJ;;0BAEJ,KAACrB;gBAAWgB,WAAW;oBAAEQ,OAAOD;gBAAU;;0BAC1C,KAACxB;gBAAsBS,YAAYA;gBAAYJ,aAAaA;0BACzDD;;;;AAIT,EAAE;AAEFD,MAAMwB,KAAK,GAAG1B"}