@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
@@ -10,6 +10,7 @@ import { useExternRef } from "../../hooks/useExternRef.js";
10
10
  import { useFocusWithin } from "../../hooks/useFocusWithin.js";
11
11
  import { useGlobalEscKeyDown } from "../../hooks/useGlobalEscKeyDown.js";
12
12
  import { useMediaQueries } from "../../hooks/useMediaQueries.js";
13
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
13
14
  import { usePlatform } from "../../hooks/usePlatform.js";
14
15
  import { useCSSKeyframesAnimationController } from "../../lib/animation/index.js";
15
16
  import { getRelativeBoundingClientRect } from "../../lib/dom.js";
@@ -38,7 +39,7 @@ const animationStateClassNames = {
38
39
  /**
39
40
  * @see https://vkui.io/components/snackbar
40
41
  */ export const Snackbar = (_param)=>{
41
- var { placement = 'bottom-start', children, layout, action, before, after, duration = 4000, onActionClick, onClose, mode = 'default', subtitle, offsetY, getRootRef } = _param, restProps = _object_without_properties(_param, [
42
+ var { placement = 'bottom-start', children, layout, action, before, after, duration = 4000, onActionClick: onActionClickProp, onClose, mode = 'default', subtitle, offsetY, getRootRef: getRootRefProp, slotProps } = _param, restProps = _object_without_properties(_param, [
42
43
  "placement",
43
44
  "children",
44
45
  "layout",
@@ -51,8 +52,19 @@ const animationStateClassNames = {
51
52
  "mode",
52
53
  "subtitle",
53
54
  "offsetY",
55
+ "getRootRef",
56
+ "slotProps"
57
+ ]);
58
+ const _useMergeProps = useMergeProps(_object_spread({
59
+ getRootRef: getRootRefProp
60
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.root), { getRootRef } = _useMergeProps, rootRest = _object_without_properties(_useMergeProps, [
54
61
  "getRootRef"
55
62
  ]);
63
+ const _useMergeProps1 = useMergeProps({
64
+ onClick: onActionClickProp
65
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.action), { onClick: onActionClick } = _useMergeProps1, actionRest = _object_without_properties(_useMergeProps1, [
66
+ "onClick"
67
+ ]);
56
68
  const platform = usePlatform();
57
69
  const [open, setOpen] = React.useState(true);
58
70
  const [touched, setTouched] = React.useState(false);
@@ -155,11 +167,12 @@ const animationStateClassNames = {
155
167
  if (animationState === 'exited') {
156
168
  return null;
157
169
  }
158
- return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({}, restProps), {
170
+ return /*#__PURE__*/ _jsx(RootComponent, _object_spread_props(_object_spread({
159
171
  role: "presentation",
160
172
  baseClassName: classNames("vkuiSnackbar__host", platform === 'ios' && "vkuiSnackbar__ios", touched && "vkuiSnackbar__touched", placementClassNames[placement], animationStateClassNames[animationState], isRtl && "vkuiSnackbar__rtl"),
161
173
  baseStyle: resolveOffsetYCssStyle(placement, offsetY),
162
- getRootRef: rootRef,
174
+ getRootRef: rootRef
175
+ }, rootRest), {
163
176
  children: /*#__PURE__*/ _jsx("div", _object_spread_props(_object_spread({
164
177
  role: "alert",
165
178
  className: "vkuiSnackbar__in",
@@ -180,14 +193,15 @@ const animationStateClassNames = {
180
193
  before: before,
181
194
  after: after,
182
195
  subtitle: subtitle,
183
- action: action && /*#__PURE__*/ _jsx(Button, {
196
+ action: action && /*#__PURE__*/ _jsx(Button, _object_spread_props(_object_spread({
184
197
  align: "left",
185
198
  mode: "link",
186
199
  appearance: mode === 'dark' ? /* istanbul ignore next: проверяется в e2e */ 'overlay' : 'accent',
187
200
  size: "s",
188
- onClick: handleActionClick,
201
+ onClick: handleActionClick
202
+ }, actionRest), {
189
203
  children: action
190
- }),
204
+ })),
191
205
  children: children
192
206
  })
193
207
  }))
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useMediaQueries } from '../../hooks/useMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { getRelativeBoundingClientRect } from '../../lib/dom';\nimport { UIPanGestureRecognizer } from '../../lib/touch';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Basic, type BasicProps } from './subcomponents/Basic/Basic';\nimport type { ShiftData, SnackbarPlacement } from './types';\nimport {\n getInitialShiftData,\n getMovedShiftData,\n resolveOffsetYCssStyle,\n shouldBeClosedByShiftData,\n} from './utils';\nimport styles from './Snackbar.module.css';\n\nconst placementClassNames = {\n 'top-start': styles.placementTopStart,\n 'top': styles.placementTop,\n 'top-end': styles.placementTopEnd,\n 'bottom-start': styles.placementBottomStart,\n 'bottom': styles.placementBottom,\n 'bottom-end': styles.placementBottomEnd,\n};\n\nconst animationStateClassNames = {\n enter: styles.stateEnter,\n entering: styles.stateEntering,\n entered: styles.stateEntered,\n exit: styles.stateExit,\n exiting: styles.stateExiting,\n exited: undefined,\n};\n\nexport interface SnackbarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'role'>,\n BasicProps {\n /**\n * Задаёт расположение компонента.\n *\n * > Note: в мобильном режиме:\n * > - `\"top-start\"`/`\"top-end\"` перебивается на `\"top\"`, чтобы поведение было схожим с нативными\n * > уведомлениями;\n * > - `\"bottom\"` перебивается на `\"bottom-start\"`, чтобы избежать вызова системных\n * > функций, таких как **Pull To Refresh** и **Режим управления одной рукой**.\n * > - `\"bottom-start\"`/`\"bottom-end\"` закрываются смахиванием в любое из направлений\n * > по горизонтальной оси.\n */\n placement?: SnackbarPlacement;\n /**\n * Название кнопки действия в уведомлении\n * Не может использоваться одновременно с `subtitle`.\n */\n action?: React.ReactNode;\n /**\n * Будет вызвано при нажатии на кнопку действия.\n */\n onActionClick?: (event: React.MouseEvent) => void;\n /**\n * Время в миллисекундах, через которое плашка скроется.\n */\n duration?: number;\n /**\n * Обработчик закрытия уведомления.\n */\n onClose: () => void;\n /**\n * Величина отступа снизу. Используется для позиционирования элемента в случае, когда нежелательно, чтобы Snackbar при появлении перекрывал важные элементы интерфейса.\n */\n offsetY?: React.CSSProperties['bottom'];\n}\n\n/**\n * @see https://vkui.io/components/snackbar\n */\nexport const Snackbar: React.FC<SnackbarProps> & { Basic: typeof Basic } = ({\n placement = 'bottom-start',\n children,\n layout,\n action,\n before,\n after,\n duration = 4000,\n onActionClick,\n onClose,\n mode = 'default',\n subtitle,\n offsetY,\n getRootRef,\n ...restProps\n}: SnackbarProps) => {\n const platform = usePlatform();\n\n const [open, setOpen] = React.useState(true);\n const [touched, setTouched] = React.useState(false);\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const focused = useFocusWithin(rootRef);\n const inRef = React.useRef<HTMLDivElement>(null);\n const panGestureRecognizer = React.useRef<UIPanGestureRecognizer | null>(null);\n\n const shiftDataRef = React.useRef<ShiftData | null>(null);\n\n const rafRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const closeTimeoutIdRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const mediaQueries = useMediaQueries();\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n open ? 'enter' : 'exit',\n {\n onExited: onClose,\n },\n );\n\n const clearRAF = React.useCallback(() => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n }, []);\n\n const updateShiftAxisCSSProperties = React.useCallback(\n (x: number | null, y: number | null, direction: number | null) => {\n rafRef.current = requestAnimationFrame(() => {\n if (rootRef.current) {\n x === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_shift_x')\n : rootRef.current.style.setProperty('--vkui_internal--snackbar_shift_x', `${x}px`);\n y === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_shift_y')\n : rootRef.current.style.setProperty('--vkui_internal--snackbar_shift_y', `${y}px`);\n direction === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_direction')\n : /* istanbul ignore next: TODO чтобы протестировать кейс, нужно мокать useMediaQueries(), чтобы перебивать mediaQueries.smallTabletPlus.matches */\n rootRef.current.style.setProperty(\n '--vkui_internal--snackbar_direction',\n `${direction}`,\n );\n }\n });\n },\n [rootRef],\n );\n\n const close = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleActionClick = (event: React.MouseEvent) => {\n close();\n if (action) {\n onActionClick?.(event);\n }\n };\n\n const handleTouchStart = (event: React.UIEvent<HTMLDivElement>) => {\n panGestureRecognizer.current = new UIPanGestureRecognizer();\n panGestureRecognizer.current.setStartCoords(event.nativeEvent);\n shiftDataRef.current = getInitialShiftData(\n rootRef.current!.offsetWidth,\n rootRef.current!.offsetHeight,\n mediaQueries,\n );\n setTouched(true);\n };\n\n const handleTouchMove = (event: React.UIEvent<HTMLDivElement>) => {\n if (shiftDataRef.current && panGestureRecognizer.current) {\n panGestureRecognizer.current.setInitialTimeOnce();\n panGestureRecognizer.current.setEndCoords(event.nativeEvent);\n shiftDataRef.current = getMovedShiftData(\n placement,\n shiftDataRef.current,\n panGestureRecognizer.current.delta(),\n isRtl,\n );\n\n if (shiftDataRef.current.shifted) {\n updateShiftAxisCSSProperties(\n shiftDataRef.current.x,\n shiftDataRef.current.y,\n shiftDataRef.current.direction,\n );\n }\n }\n };\n\n const handleTouchEnd = () => {\n if (\n touched &&\n shiftDataRef.current &&\n panGestureRecognizer.current &&\n shouldBeClosedByShiftData(\n placement,\n shiftDataRef.current,\n getRelativeBoundingClientRect(rootRef.current!, inRef.current!),\n panGestureRecognizer.current.velocity(),\n isRtl,\n )\n ) {\n close();\n }\n\n setTouched(false);\n };\n\n useIsomorphicLayoutEffect(\n function closeAfterDelay() {\n if (!open || focused || touched || animationState !== 'entered') {\n return;\n }\n closeTimeoutIdRef.current = setTimeout(close, duration);\n return function preventCloseAfterDelayOnUnmount() {\n clearTimeout(closeTimeoutIdRef.current);\n };\n },\n [open, focused, touched, animationState, close, duration],\n );\n\n useIsomorphicLayoutEffect(\n function clearUserInteractionDataAfterTouchEnd() {\n if (!touched) {\n clearRAF();\n shiftDataRef.current = null;\n panGestureRecognizer.current = null;\n\n if (open) {\n updateShiftAxisCSSProperties(null, null, null);\n }\n }\n },\n [touched, open, updateShiftAxisCSSProperties, clearRAF],\n );\n\n React.useEffect(() => clearRAF, [clearRAF]);\n\n useGlobalEscKeyDown(open, close);\n\n if (animationState === 'exited') {\n return null;\n }\n\n return (\n <RootComponent\n {...restProps}\n role=\"presentation\"\n baseClassName={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n touched && styles.touched,\n placementClassNames[placement],\n animationStateClassNames[animationState],\n isRtl && styles.rtl,\n )}\n baseStyle={resolveOffsetYCssStyle(placement, offsetY)}\n getRootRef={rootRef}\n >\n <div\n role=\"alert\"\n className={styles.in}\n ref={inRef}\n // mobile\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n // desktop\n onMouseDown={handleTouchStart}\n onMouseMove={handleTouchMove}\n onMouseUp={handleTouchEnd}\n onMouseLeave={handleTouchEnd}\n {...animationHandlers}\n >\n <Basic\n mode={mode}\n layout={layout}\n before={before}\n after={after}\n subtitle={subtitle}\n action={\n action && (\n <Button\n align=\"left\"\n mode=\"link\"\n appearance={\n mode === 'dark'\n ? /* istanbul ignore next: проверяется в e2e */\n 'overlay'\n : 'accent'\n }\n size=\"s\"\n onClick={handleActionClick}\n >\n {action}\n </Button>\n )\n }\n >\n {children}\n </Basic>\n </div>\n </RootComponent>\n );\n};\n\nSnackbar.Basic = Basic;\n"],"names":["React","classNames","useConfigDirection","useExternRef","useFocusWithin","useGlobalEscKeyDown","useMediaQueries","usePlatform","useCSSKeyframesAnimationController","getRelativeBoundingClientRect","UIPanGestureRecognizer","useIsomorphicLayoutEffect","Button","RootComponent","Basic","getInitialShiftData","getMovedShiftData","resolveOffsetYCssStyle","shouldBeClosedByShiftData","placementClassNames","animationStateClassNames","enter","entering","entered","exit","exiting","exited","undefined","Snackbar","placement","children","layout","action","before","after","duration","onActionClick","onClose","mode","subtitle","offsetY","getRootRef","restProps","platform","open","setOpen","useState","touched","setTouched","direction","isRtl","rootRef","focused","inRef","useRef","panGestureRecognizer","shiftDataRef","rafRef","closeTimeoutIdRef","mediaQueries","animationState","animationHandlers","onExited","clearRAF","useCallback","current","cancelAnimationFrame","updateShiftAxisCSSProperties","x","y","requestAnimationFrame","style","removeProperty","setProperty","close","handleActionClick","event","handleTouchStart","setStartCoords","nativeEvent","offsetWidth","offsetHeight","handleTouchMove","setInitialTimeOnce","setEndCoords","delta","shifted","handleTouchEnd","velocity","closeAfterDelay","setTimeout","preventCloseAfterDelayOnUnmount","clearTimeout","clearUserInteractionDataAfterTouchEnd","useEffect","role","baseClassName","baseStyle","div","className","ref","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","onMouseLeave","align","appearance","size","onClick"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Snackbar/Snackbar.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useGlobalEscKeyDown } from '../../hooks/useGlobalEscKeyDown';\nimport { useMediaQueries } from '../../hooks/useMediaQueries';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport { getRelativeBoundingClientRect } from '../../lib/dom';\nimport { UIPanGestureRecognizer } from '../../lib/touch';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HasDataAttribute, HasRootRef, HTMLAttributesWithRootRef } from '../../types';\nimport { Button } from '../Button/Button';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Basic, type BasicProps } from './subcomponents/Basic/Basic';\nimport type { ShiftData, SnackbarPlacement } from './types';\nimport {\n getInitialShiftData,\n getMovedShiftData,\n resolveOffsetYCssStyle,\n shouldBeClosedByShiftData,\n} from './utils';\nimport styles from './Snackbar.module.css';\n\nconst placementClassNames = {\n 'top-start': styles.placementTopStart,\n 'top': styles.placementTop,\n 'top-end': styles.placementTopEnd,\n 'bottom-start': styles.placementBottomStart,\n 'bottom': styles.placementBottom,\n 'bottom-end': styles.placementBottomEnd,\n};\n\nconst animationStateClassNames = {\n enter: styles.stateEnter,\n entering: styles.stateEntering,\n entered: styles.stateEntered,\n exit: styles.stateExit,\n exiting: styles.stateExiting,\n exited: undefined,\n};\n\nexport interface SnackbarProps\n extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'role'>,\n BasicProps {\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `action`: свойства для прокидывания в кнопку действия.\n */\n slotProps?: {\n root?: Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> &\n HasRootRef<HTMLDivElement> &\n HasDataAttribute;\n action?: React.HTMLAttributes<HTMLElement> & HasRootRef<HTMLElement> & HasDataAttribute;\n };\n /**\n * Задаёт расположение компонента.\n *\n * > Note: в мобильном режиме:\n * > - `\"top-start\"`/`\"top-end\"` перебивается на `\"top\"`, чтобы поведение было схожим с нативными\n * > уведомлениями;\n * > - `\"bottom\"` перебивается на `\"bottom-start\"`, чтобы избежать вызова системных\n * > функций, таких как **Pull To Refresh** и **Режим управления одной рукой**.\n * > - `\"bottom-start\"`/`\"bottom-end\"` закрываются смахиванием в любое из направлений\n * > по горизонтальной оси.\n */\n placement?: SnackbarPlacement;\n /**\n * Название кнопки действия в уведомлении\n * Не может использоваться одновременно с `subtitle`.\n */\n action?: React.ReactNode;\n /**\n * Будет вызвано при нажатии на кнопку действия.\n */\n onActionClick?: (event: React.MouseEvent) => void;\n /**\n * Время в миллисекундах, через которое плашка скроется.\n */\n duration?: number;\n /**\n * Обработчик закрытия уведомления.\n */\n onClose: () => void;\n /**\n * Величина отступа снизу. Используется для позиционирования элемента в случае, когда нежелательно, чтобы Snackbar при появлении перекрывал важные элементы интерфейса.\n */\n offsetY?: React.CSSProperties['bottom'];\n}\n\n/**\n * @see https://vkui.io/components/snackbar\n */\nexport const Snackbar: React.FC<SnackbarProps> & { Basic: typeof Basic } = ({\n placement = 'bottom-start',\n children,\n layout,\n action,\n before,\n after,\n duration = 4000,\n onActionClick: onActionClickProp,\n onClose,\n mode = 'default',\n subtitle,\n offsetY,\n getRootRef: getRootRefProp,\n\n slotProps,\n ...restProps\n}: SnackbarProps) => {\n const { getRootRef, ...rootRest } = useMergeProps(\n {\n getRootRef: getRootRefProp,\n ...restProps,\n },\n slotProps?.root,\n );\n\n const { onClick: onActionClick, ...actionRest } = useMergeProps(\n {\n onClick: onActionClickProp,\n },\n slotProps?.action,\n );\n\n const platform = usePlatform();\n\n const [open, setOpen] = React.useState(true);\n const [touched, setTouched] = React.useState(false);\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n\n const rootRef = useExternRef(getRootRef);\n const focused = useFocusWithin(rootRef);\n const inRef = React.useRef<HTMLDivElement>(null);\n const panGestureRecognizer = React.useRef<UIPanGestureRecognizer | null>(null);\n\n const shiftDataRef = React.useRef<ShiftData | null>(null);\n\n const rafRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const closeTimeoutIdRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const mediaQueries = useMediaQueries();\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n open ? 'enter' : 'exit',\n {\n onExited: onClose,\n },\n );\n\n const clearRAF = React.useCallback(() => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = null;\n }\n }, []);\n\n const updateShiftAxisCSSProperties = React.useCallback(\n (x: number | null, y: number | null, direction: number | null) => {\n rafRef.current = requestAnimationFrame(() => {\n if (rootRef.current) {\n x === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_shift_x')\n : rootRef.current.style.setProperty('--vkui_internal--snackbar_shift_x', `${x}px`);\n y === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_shift_y')\n : rootRef.current.style.setProperty('--vkui_internal--snackbar_shift_y', `${y}px`);\n direction === null\n ? rootRef.current.style.removeProperty('--vkui_internal--snackbar_direction')\n : /* istanbul ignore next: TODO чтобы протестировать кейс, нужно мокать useMediaQueries(), чтобы перебивать mediaQueries.smallTabletPlus.matches */\n rootRef.current.style.setProperty(\n '--vkui_internal--snackbar_direction',\n `${direction}`,\n );\n }\n });\n },\n [rootRef],\n );\n\n const close = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n const handleActionClick = (event: React.MouseEvent) => {\n close();\n if (action) {\n onActionClick?.(event as React.MouseEvent<HTMLElement>);\n }\n };\n\n const handleTouchStart = (event: React.UIEvent<HTMLDivElement>) => {\n panGestureRecognizer.current = new UIPanGestureRecognizer();\n panGestureRecognizer.current.setStartCoords(event.nativeEvent);\n shiftDataRef.current = getInitialShiftData(\n rootRef.current!.offsetWidth,\n rootRef.current!.offsetHeight,\n mediaQueries,\n );\n setTouched(true);\n };\n\n const handleTouchMove = (event: React.UIEvent<HTMLDivElement>) => {\n if (shiftDataRef.current && panGestureRecognizer.current) {\n panGestureRecognizer.current.setInitialTimeOnce();\n panGestureRecognizer.current.setEndCoords(event.nativeEvent);\n shiftDataRef.current = getMovedShiftData(\n placement,\n shiftDataRef.current,\n panGestureRecognizer.current.delta(),\n isRtl,\n );\n\n if (shiftDataRef.current.shifted) {\n updateShiftAxisCSSProperties(\n shiftDataRef.current.x,\n shiftDataRef.current.y,\n shiftDataRef.current.direction,\n );\n }\n }\n };\n\n const handleTouchEnd = () => {\n if (\n touched &&\n shiftDataRef.current &&\n panGestureRecognizer.current &&\n shouldBeClosedByShiftData(\n placement,\n shiftDataRef.current,\n getRelativeBoundingClientRect(rootRef.current!, inRef.current!),\n panGestureRecognizer.current.velocity(),\n isRtl,\n )\n ) {\n close();\n }\n\n setTouched(false);\n };\n\n useIsomorphicLayoutEffect(\n function closeAfterDelay() {\n if (!open || focused || touched || animationState !== 'entered') {\n return;\n }\n closeTimeoutIdRef.current = setTimeout(close, duration);\n return function preventCloseAfterDelayOnUnmount() {\n clearTimeout(closeTimeoutIdRef.current);\n };\n },\n [open, focused, touched, animationState, close, duration],\n );\n\n useIsomorphicLayoutEffect(\n function clearUserInteractionDataAfterTouchEnd() {\n if (!touched) {\n clearRAF();\n shiftDataRef.current = null;\n panGestureRecognizer.current = null;\n\n if (open) {\n updateShiftAxisCSSProperties(null, null, null);\n }\n }\n },\n [touched, open, updateShiftAxisCSSProperties, clearRAF],\n );\n\n React.useEffect(() => clearRAF, [clearRAF]);\n\n useGlobalEscKeyDown(open, close);\n\n if (animationState === 'exited') {\n return null;\n }\n\n return (\n <RootComponent\n role=\"presentation\"\n baseClassName={classNames(\n styles.host,\n platform === 'ios' && styles.ios,\n touched && styles.touched,\n placementClassNames[placement],\n animationStateClassNames[animationState],\n isRtl && styles.rtl,\n )}\n baseStyle={resolveOffsetYCssStyle(placement, offsetY)}\n getRootRef={rootRef}\n {...rootRest}\n >\n <div\n role=\"alert\"\n className={styles.in}\n ref={inRef}\n // mobile\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n // desktop\n onMouseDown={handleTouchStart}\n onMouseMove={handleTouchMove}\n onMouseUp={handleTouchEnd}\n onMouseLeave={handleTouchEnd}\n {...animationHandlers}\n >\n <Basic\n mode={mode}\n layout={layout}\n before={before}\n after={after}\n subtitle={subtitle}\n action={\n action && (\n <Button\n align=\"left\"\n mode=\"link\"\n appearance={\n mode === 'dark'\n ? /* istanbul ignore next: проверяется в e2e */\n 'overlay'\n : 'accent'\n }\n size=\"s\"\n onClick={handleActionClick}\n {...actionRest}\n >\n {action}\n </Button>\n )\n }\n >\n {children}\n </Basic>\n </div>\n </RootComponent>\n );\n};\n\nSnackbar.Basic = Basic;\n"],"names":["React","classNames","useConfigDirection","useExternRef","useFocusWithin","useGlobalEscKeyDown","useMediaQueries","useMergeProps","usePlatform","useCSSKeyframesAnimationController","getRelativeBoundingClientRect","UIPanGestureRecognizer","useIsomorphicLayoutEffect","Button","RootComponent","Basic","getInitialShiftData","getMovedShiftData","resolveOffsetYCssStyle","shouldBeClosedByShiftData","placementClassNames","animationStateClassNames","enter","entering","entered","exit","exiting","exited","undefined","Snackbar","placement","children","layout","action","before","after","duration","onActionClick","onActionClickProp","onClose","mode","subtitle","offsetY","getRootRef","getRootRefProp","slotProps","restProps","root","rootRest","onClick","actionRest","platform","open","setOpen","useState","touched","setTouched","direction","isRtl","rootRef","focused","inRef","useRef","panGestureRecognizer","shiftDataRef","rafRef","closeTimeoutIdRef","mediaQueries","animationState","animationHandlers","onExited","clearRAF","useCallback","current","cancelAnimationFrame","updateShiftAxisCSSProperties","x","y","requestAnimationFrame","style","removeProperty","setProperty","close","handleActionClick","event","handleTouchStart","setStartCoords","nativeEvent","offsetWidth","offsetHeight","handleTouchMove","setInitialTimeOnce","setEndCoords","delta","shifted","handleTouchEnd","velocity","closeAfterDelay","setTimeout","preventCloseAfterDelayOnUnmount","clearTimeout","clearUserInteractionDataAfterTouchEnd","useEffect","role","baseClassName","baseStyle","div","className","ref","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","onMouseLeave","align","appearance","size"],"mappings":"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"}
@@ -1,6 +1,19 @@
1
1
  import * as React from 'react';
2
- import type { HasRef, HTMLAttributesWithRootRef } from '../../types';
3
- export interface SplitLayoutProps extends HTMLAttributesWithRootRef<HTMLDivElement>, HasRef<HTMLDivElement> {
2
+ import type { HasDataAttribute, HasRootRef, HTMLAttributesWithRootRef } from '../../types';
3
+ export interface SplitLayoutProps extends HTMLAttributesWithRootRef<HTMLDivElement> {
4
+ /**
5
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ content: { getRootRef: ... } }`.
6
+ */
7
+ getRef?: React.Ref<HTMLDivElement>;
8
+ /**
9
+ * Свойства, которые можно прокинуть внутрь компонента:
10
+ * - `root`: свойства для прокидывания в корень компонента;
11
+ * - `content`: свойства для прокидывания в контент;.
12
+ */
13
+ slotProps?: {
14
+ root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;
15
+ content?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;
16
+ };
4
17
  /**
5
18
  * Свойство для отрисовки `Alert`, `ActionSheet` и `ScreenSpinner`.
6
19
  *
@@ -29,5 +42,5 @@ export interface SplitLayoutProps extends HTMLAttributesWithRootRef<HTMLDivEleme
29
42
  /**
30
43
  * @see https://vkui.io/components/split-layout
31
44
  */
32
- export declare const SplitLayout: ({ header, children, getRootRef, getRef, className, center, modal, popout, ...restProps }: SplitLayoutProps) => React.ReactNode;
45
+ export declare const SplitLayout: ({ header, children, getRootRef, getRef, className, center, modal, popout, slotProps, ...restProps }: SplitLayoutProps) => React.ReactNode;
33
46
  //# sourceMappingURL=SplitLayout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SplitLayout.d.ts","sourceRoot":"","sources":["../../../src/components/SplitLayout/SplitLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAGrE,MAAM,WAAW,gBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,0FAUzB,gBAAgB,KAAG,KAAK,CAAC,SAsB3B,CAAC"}
1
+ {"version":3,"file":"SplitLayout.d.ts","sourceRoot":"","sources":["../../../src/components/SplitLayout/SplitLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAM3F,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IACjF;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC;QAC5F,OAAO,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC;KAChG,CAAC;IACF;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,qGAYzB,gBAAgB,KAAG,KAAK,CAAC,SAsC3B,CAAC"}
@@ -5,11 +5,15 @@ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_
5
5
  import { jsxs as _jsxs } from "react/jsx-runtime";
6
6
  import * as React from "react";
7
7
  import { classNames } from "@vkontakte/vkjs";
8
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
8
9
  import { usePlatform } from "../../hooks/usePlatform.js";
10
+ import { warnOnce } from "../../lib/warnOnce.js";
11
+ import { RootComponent } from "../RootComponent/RootComponent.js";
12
+ const warn = warnOnce('SplitLayout');
9
13
  /**
10
14
  * @see https://vkui.io/components/split-layout
11
15
  */ export const SplitLayout = (_param)=>{
12
- var { header, children, getRootRef, getRef, className, center, modal, popout } = _param, restProps = _object_without_properties(_param, [
16
+ var { header, children, getRootRef, getRef, className, center, modal, popout, slotProps } = _param, restProps = _object_without_properties(_param, [
13
17
  "header",
14
18
  "children",
15
19
  "getRootRef",
@@ -17,17 +21,28 @@ import { usePlatform } from "../../hooks/usePlatform.js";
17
21
  "className",
18
22
  "center",
19
23
  "modal",
20
- "popout"
24
+ "popout",
25
+ "slotProps"
21
26
  ]);
27
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
28
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ content: { getRootRef: ... } }`');
29
+ }
30
+ const rootRest = useMergeProps({
31
+ getRootRef
32
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
33
+ const contentRest = useMergeProps(_object_spread({
34
+ getRootRef: getRef,
35
+ className
36
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.content);
22
37
  const platform = usePlatform();
23
- return /*#__PURE__*/ _jsxs("div", {
24
- className: classNames("vkuiSplitLayout__host", platform === 'ios' && "vkuiSplitLayout__ios"),
25
- ref: getRootRef,
38
+ return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
39
+ baseClassName: classNames("vkuiSplitLayout__host", platform === 'ios' && "vkuiSplitLayout__ios")
40
+ }, rootRest), {
26
41
  children: [
27
42
  header,
28
- /*#__PURE__*/ _jsxs("div", _object_spread_props(_object_spread({}, restProps), {
29
- ref: getRef,
30
- className: classNames("vkuiSplitLayout__inner", !!header && "vkuiSplitLayout__innerHeader", center && "vkuiSplitLayout__innerCenter", className),
43
+ /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
44
+ baseClassName: classNames("vkuiSplitLayout__inner", !!header && "vkuiSplitLayout__innerHeader", center && "vkuiSplitLayout__innerCenter")
45
+ }, contentRest), {
31
46
  children: [
32
47
  children,
33
48
  modal,
@@ -35,7 +50,7 @@ import { usePlatform } from "../../hooks/usePlatform.js";
35
50
  ]
36
51
  }))
37
52
  ]
38
- });
53
+ }));
39
54
  };
40
55
 
41
56
  //# sourceMappingURL=SplitLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SplitLayout/SplitLayout.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport styles from './SplitLayout.module.css';\n\nexport interface SplitLayoutProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Свойство для отрисовки `Alert`, `ActionSheet` и `ScreenSpinner`.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Начиная с **VKUI v7** компоненты можно располагать в любом\n * месте приложения в пределах `AppRoot`.\n */\n popout?: React.ReactNode;\n /**\n * Свойство для отрисовки `ModalRoot`.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Начиная с **VKUI v7** `ModalRoot` можно располагать в любом\n * месте приложения в пределах `AppRoot`.\n */\n modal?: React.ReactNode;\n /**\n * Компонент для отрисовки заголовка.\n */\n header?: React.ReactNode;\n /**\n * Центрирует контент.\n */\n center?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/split-layout\n */\nexport const SplitLayout = ({\n header,\n children,\n getRootRef,\n getRef,\n className,\n center,\n modal,\n popout,\n ...restProps\n}: SplitLayoutProps): React.ReactNode => {\n const platform = usePlatform();\n\n return (\n <div className={classNames(styles.host, platform === 'ios' && styles.ios)} ref={getRootRef}>\n {header}\n <div\n {...restProps}\n ref={getRef}\n className={classNames(\n styles.inner,\n !!header && styles.innerHeader,\n center && styles.innerCenter,\n className,\n )}\n >\n {children}\n {modal}\n {popout}\n </div>\n </div>\n );\n};\n"],"names":["React","classNames","usePlatform","SplitLayout","header","children","getRootRef","getRef","className","center","modal","popout","restProps","platform","div","ref"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,6BAA0B;AAiCtD;;CAEC,GACD,OAAO,MAAMC,cAAc;QAAC,EAC1BC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,MAAM,EAEW,WADdC;QARHR;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWX;IAEjB,qBACE,MAACY;QAAIN,WAAWP,oCAAwBY,aAAa;QAAsBE,KAAKT;;YAC7EF;0BACD,MAACU,+CACKF;gBACJG,KAAKR;gBACLC,WAAWP,qCAET,CAAC,CAACG,0CACFK,0CACAD;;oBAGDH;oBACAK;oBACAC;;;;;AAIT,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/SplitLayout/SplitLayout.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasDataAttribute, HasRootRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './SplitLayout.module.css';\n\nconst warn = warnOnce('SplitLayout');\n\nexport interface SplitLayoutProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ content: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLDivElement>;\n /**\n * Свойства, которые можно прокинуть внутрь компонента:\n * - `root`: свойства для прокидывания в корень компонента;\n * - `content`: свойства для прокидывания в контент;.\n */\n slotProps?: {\n root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;\n content?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;\n };\n /**\n * Свойство для отрисовки `Alert`, `ActionSheet` и `ScreenSpinner`.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Начиная с **VKUI v7** компоненты можно располагать в любом\n * месте приложения в пределах `AppRoot`.\n */\n popout?: React.ReactNode;\n /**\n * Свойство для отрисовки `ModalRoot`.\n *\n * @deprecated Будет удалeно в **VKUI v8**.\n * Начиная с **VKUI v7** `ModalRoot` можно располагать в любом\n * месте приложения в пределах `AppRoot`.\n */\n modal?: React.ReactNode;\n /**\n * Компонент для отрисовки заголовка.\n */\n header?: React.ReactNode;\n /**\n * Центрирует контент.\n */\n center?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/split-layout\n */\nexport const SplitLayout = ({\n header,\n children,\n getRootRef,\n getRef,\n className,\n center,\n modal,\n popout,\n\n slotProps,\n ...restProps\n}: SplitLayoutProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ content: { getRootRef: ... } }`');\n }\n\n const rootRest = useMergeProps({ getRootRef }, slotProps?.root);\n const contentRest = useMergeProps(\n {\n getRootRef: getRef,\n className,\n ...restProps,\n },\n slotProps?.content,\n );\n\n const platform = usePlatform();\n\n return (\n <RootComponent\n baseClassName={classNames(styles.host, platform === 'ios' && styles.ios)}\n {...rootRest}\n >\n {header}\n <RootComponent\n baseClassName={classNames(\n styles.inner,\n !!header && styles.innerHeader,\n center && styles.innerCenter,\n )}\n {...contentRest}\n >\n {children}\n {modal}\n {popout}\n </RootComponent>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useMergeProps","usePlatform","warnOnce","RootComponent","warn","SplitLayout","header","children","getRootRef","getRef","className","center","modal","popout","slotProps","restProps","process","env","NODE_ENV","rootRest","root","contentRest","content","platform","baseClassName"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,QAAQ,QAAQ,wBAAqB;AAE9C,SAASC,aAAa,QAAQ,oCAAiC;AAG/D,MAAMC,OAAOF,SAAS;AA0CtB;;CAEC,GACD,OAAO,MAAMG,cAAc;QAAC,EAC1BC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,MAAM,EACNC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,MAAM,EAENC,SAAS,EAEQ,WADdC;QAVHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QAEAC;;IAGA,6CAA6C,GAC7C,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiBT,QAAQ;QACpDL,KAAK;IACP;IAEA,MAAMe,WAAWnB,cAAc;QAAEQ;IAAW,GAAGM,sBAAAA,gCAAAA,UAAWM,IAAI;IAC9D,MAAMC,cAAcrB,cAClB;QACEQ,YAAYC;QACZC;OACGK,YAELD,sBAAAA,gCAAAA,UAAWQ,OAAO;IAGpB,MAAMC,WAAWtB;IAEjB,qBACE,MAACE;QACCqB,eAAezB,oCAAwBwB,aAAa;OAChDJ;;YAEHb;0BACD,MAACH;gBACCqB,eAAezB,qCAEb,CAAC,CAACO,0CACFK;eAEEU;;oBAEHd;oBACAK;oBACAC;;;;;AAIT,EAAE"}
@@ -1,9 +1,22 @@
1
1
  import * as React from 'react';
2
- import type { HasRef, HasRootRef } from '../../types';
3
- export interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLLabelElement>, HasRef<HTMLInputElement> {
2
+ import type { HasDataAttribute, HasRootRef } from '../../types';
3
+ export interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLLabelElement> {
4
+ /**
5
+ * Свойства, которые можно прокинуть внутрь компонента:
6
+ * - `root`: свойства для прокидывания в корень компонента;
7
+ * - `input`: свойства для прокидывания в скрытый `input`.
8
+ */
9
+ slotProps?: {
10
+ root?: Omit<React.LabelHTMLAttributes<HTMLLabelElement>, 'children'> & HasRootRef<HTMLLabelElement> & HasDataAttribute;
11
+ input?: React.InputHTMLAttributes<HTMLInputElement> & HasRootRef<HTMLInputElement> & HasDataAttribute;
12
+ };
13
+ /**
14
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
15
+ */
16
+ getRef?: React.Ref<HTMLInputElement>;
4
17
  }
5
18
  /**
6
19
  * @see https://vkui.io/components/switch
7
20
  */
8
- export declare const Switch: ({ style, className, getRootRef, getRef, checked: checkedProp, disabled, onBlur: onBlurProp, onFocus: onFocusProp, onClick, ...restProps }: SwitchProps) => React.ReactNode;
21
+ export declare const Switch: ({ style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, getRef, slotProps, ...restProps }: SwitchProps) => React.ReactNode;
9
22
  //# sourceMappingURL=Switch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAStD,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAE/B;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,2IAWpB,WAAW,KAAG,KAAK,CAAC,SA8EtB,CAAC"}
1
+ {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYhE,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,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,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,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;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,6GAOpB,WAAW,KAAG,KAAK,CAAC,SA2FtB,CAAC"}
@@ -9,9 +9,13 @@ import { useAdaptivity } from "../../hooks/useAdaptivity.js";
9
9
  import { useConfigDirection } from "../../hooks/useConfigDirection.js";
10
10
  import { useFocusVisible } from "../../hooks/useFocusVisible.js";
11
11
  import { useFocusVisibleClassName } from "../../hooks/useFocusVisibleClassName.js";
12
+ import { useMergeProps } from "../../hooks/useMergeProps.js";
12
13
  import { usePlatform } from "../../hooks/usePlatform.js";
13
14
  import { callMultiple } from "../../lib/callMultiple.js";
15
+ import { warnOnce } from "../../lib/warnOnce.js";
16
+ import { RootComponent } from "../RootComponent/RootComponent.js";
14
17
  import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
18
+ const warn = warnOnce('Switch');
15
19
  const sizeYClassNames = {
16
20
  none: "vkuiSwitch__sizeYNone",
17
21
  compact: "vkuiSwitch__sizeYCompact"
@@ -19,13 +23,25 @@ const sizeYClassNames = {
19
23
  /**
20
24
  * @see https://vkui.io/components/switch
21
25
  */ export const Switch = (_param)=>{
22
- var { style, className, getRootRef, getRef, checked: checkedProp, disabled, onBlur: onBlurProp, onFocus: onFocusProp, onClick } = _param, restProps = _object_without_properties(_param, [
26
+ var { style: rootStyle, className: rootClassName, getRootRef: rootGetRootRef, getRef, slotProps } = _param, restProps = _object_without_properties(_param, [
23
27
  "style",
24
28
  "className",
25
29
  "getRootRef",
26
30
  "getRef",
31
+ "slotProps"
32
+ ]);
33
+ /* istanbul ignore if: не проверяем в тестах */ if (process.env.NODE_ENV === 'development' && getRef) {
34
+ warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
35
+ }
36
+ const rootRest = useMergeProps({
37
+ style: rootStyle,
38
+ className: rootClassName,
39
+ getRootRef: rootGetRootRef
40
+ }, slotProps === null || slotProps === void 0 ? void 0 : slotProps.root);
41
+ const _useMergeProps = useMergeProps(_object_spread({
42
+ getRootRef: getRef
43
+ }, restProps), slotProps === null || slotProps === void 0 ? void 0 : slotProps.input), { checked: checkedProp, onBlur: onBlurProp, onFocus: onFocusProp, onClick } = _useMergeProps, inputRest = _object_without_properties(_useMergeProps, [
27
44
  "checked",
28
- "disabled",
29
45
  "onBlur",
30
46
  "onFocus",
31
47
  "onClick"
@@ -41,7 +57,7 @@ const sizeYClassNames = {
41
57
  });
42
58
  const handleBlur = callMultiple(onBlur, onBlurProp);
43
59
  const handleFocus = callMultiple(onFocus, onFocusProp);
44
- const [localUncontrolledChecked, setLocalUncontrolledChecked] = React.useState(Boolean(restProps.defaultChecked));
60
+ const [localUncontrolledChecked, setLocalUncontrolledChecked] = React.useState(Boolean(inputRest.defaultChecked));
45
61
  const isControlled = checkedProp !== undefined;
46
62
  const syncUncontrolledCheckedStateOnClick = React.useCallback((e)=>{
47
63
  if (isControlled) {
@@ -52,32 +68,28 @@ const sizeYClassNames = {
52
68
  }, [
53
69
  isControlled
54
70
  ]);
55
- const inputProps = _object_spread_props(_object_spread({}, restProps), {
71
+ const inputProps = _object_spread({
56
72
  Component: 'input',
57
- getRootRef: getRef,
58
73
  type: 'checkbox',
59
74
  role: 'switch',
60
- disabled: disabled,
61
- onBlur: onBlurProp,
62
- onFocus: onFocusProp,
75
+ onBlur: handleBlur,
76
+ onFocus: handleFocus,
63
77
  onClick: callMultiple(syncUncontrolledCheckedStateOnClick, onClick)
64
- });
78
+ }, inputRest);
65
79
  if (isControlled) {
66
80
  inputProps.checked = checkedProp;
67
81
  inputProps['aria-checked'] = checkedProp ? 'true' : 'false';
68
82
  } else {
69
83
  inputProps['aria-checked'] = localUncontrolledChecked ? 'true' : 'false';
70
84
  }
71
- return /*#__PURE__*/ _jsxs("label", {
72
- className: classNames("vkuiSwitch__host", sizeY !== 'regular' && sizeYClassNames[sizeY], platform === 'ios' ? "vkuiSwitch__ios" : "vkuiSwitch__default", disabled && "vkuiSwitch__disabled", isRtl && "vkuiSwitch__rtl", focusVisibleClassNames, className),
73
- style: style,
74
- ref: getRootRef,
85
+ return /*#__PURE__*/ _jsxs(RootComponent, _object_spread_props(_object_spread({
86
+ Component: "label",
87
+ baseClassName: classNames("vkuiSwitch__host", sizeY !== 'regular' && sizeYClassNames[sizeY], platform === 'ios' ? "vkuiSwitch__ios" : "vkuiSwitch__default", inputRest.disabled && "vkuiSwitch__disabled", isRtl && "vkuiSwitch__rtl", focusVisibleClassNames)
88
+ }, rootRest), {
75
89
  children: [
76
- /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread_props(_object_spread({}, inputProps), {
77
- className: "vkuiSwitch__inputNative",
78
- onBlur: handleBlur,
79
- onFocus: handleFocus
80
- })),
90
+ /*#__PURE__*/ _jsx(VisuallyHidden, _object_spread({
91
+ baseClassName: "vkuiSwitch__inputNative"
92
+ }, inputProps)),
81
93
  /*#__PURE__*/ _jsxs("span", {
82
94
  "aria-hidden": true,
83
95
  className: "vkuiSwitch__inputFake",
@@ -87,12 +99,12 @@ const sizeYClassNames = {
87
99
  }),
88
100
  /*#__PURE__*/ _jsx("span", {
89
101
  "aria-hidden": true,
90
- className: classNames("vkuiSwitch__handle", platform !== 'ios' && !disabled && "vkuiSwitch__handleWithRipple")
102
+ className: classNames("vkuiSwitch__handle", platform !== 'ios' && !inputRest.disabled && "vkuiSwitch__handleWithRipple")
91
103
  })
92
104
  ]
93
105
  })
94
106
  ]
95
- });
107
+ }));
96
108
  };
97
109
 
98
110
  //# sourceMappingURL=Switch.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { callMultiple } from '../../lib/callMultiple';\nimport type { HasRef, HasRootRef } from '../../types';\nimport { VisuallyHidden, type VisuallyHiddenProps } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Switch.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SwitchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLLabelElement>,\n HasRef<HTMLInputElement> {}\n\n/**\n * @see https://vkui.io/components/switch\n */\nexport const Switch = ({\n style,\n className,\n getRootRef,\n getRef,\n checked: checkedProp,\n disabled,\n onBlur: onBlurProp,\n onFocus: onFocusProp,\n onClick,\n ...restProps\n}: SwitchProps): React.ReactNode => {\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n const platform = usePlatform();\n const { sizeY = 'none' } = useAdaptivity();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: 'outside' });\n const handleBlur = callMultiple(onBlur, onBlurProp);\n const handleFocus = callMultiple(onFocus, onFocusProp);\n\n const [localUncontrolledChecked, setLocalUncontrolledChecked] = React.useState(\n Boolean(restProps.defaultChecked),\n );\n const isControlled = checkedProp !== undefined;\n\n const syncUncontrolledCheckedStateOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLInputElement>) => {\n if (isControlled) {\n return;\n }\n\n const switchTarget = e.target as HTMLInputElement;\n setLocalUncontrolledChecked(switchTarget.checked);\n },\n [isControlled],\n );\n\n const inputProps: VisuallyHiddenProps<HTMLInputElement> = {\n ...restProps,\n Component: 'input',\n getRootRef: getRef,\n type: 'checkbox',\n role: 'switch',\n disabled: disabled,\n onBlur: onBlurProp,\n onFocus: onFocusProp,\n onClick: callMultiple(syncUncontrolledCheckedStateOnClick, onClick),\n };\n\n if (isControlled) {\n inputProps.checked = checkedProp;\n inputProps['aria-checked'] = checkedProp ? 'true' : 'false';\n } else {\n inputProps['aria-checked'] = localUncontrolledChecked ? 'true' : 'false';\n }\n\n return (\n <label\n className={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n platform === 'ios' ? styles.ios : styles.default,\n disabled && styles.disabled,\n isRtl && styles.rtl,\n focusVisibleClassNames,\n className,\n )}\n style={style}\n ref={getRootRef}\n >\n <VisuallyHidden\n {...inputProps}\n className={styles.inputNative}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n <span aria-hidden className={styles.inputFake}>\n <span className={styles.track} />\n <span\n aria-hidden\n className={classNames(\n styles.handle,\n platform !== 'ios' && !disabled && styles.handleWithRipple,\n )}\n />\n </span>\n </label>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useConfigDirection","useFocusVisible","useFocusVisibleClassName","usePlatform","callMultiple","VisuallyHidden","sizeYClassNames","none","compact","Switch","style","className","getRootRef","getRef","checked","checkedProp","disabled","onBlur","onBlurProp","onFocus","onFocusProp","onClick","restProps","direction","isRtl","platform","sizeY","focusVisible","focusVisibleClassNames","mode","handleBlur","handleFocus","localUncontrolledChecked","setLocalUncontrolledChecked","useState","Boolean","defaultChecked","isControlled","undefined","syncUncontrolledCheckedStateOnClick","useCallback","e","switchTarget","target","inputProps","Component","type","role","label","ref","span","aria-hidden"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,kBAAkB,QAAQ,oCAAiC;AACpE,SAASC,eAAe,QAAQ,iCAA8B;AAC9D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,YAAY,QAAQ,4BAAyB;AAEtD,SAASC,cAAc,QAAkC,sCAAmC;AAG5F,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAOA;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrBC,KAAK,EACLC,SAAS,EACTC,UAAU,EACVC,MAAM,EACNC,SAASC,WAAW,EACpBC,QAAQ,EACRC,QAAQC,UAAU,EAClBC,SAASC,WAAW,EACpBC,OAAO,EAEK,WADTC;QATHZ;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAE;QACAE;;IAGA,MAAME,YAAYvB;IAClB,MAAMwB,QAAQD,cAAc;IAC5B,MAAME,WAAWtB;IACjB,MAAM,EAAEuB,QAAQ,MAAM,EAAE,GAAG3B;IAC3B,MAAM,EAAE4B,YAAY,EAAEV,MAAM,EAAEE,OAAO,EAAE,GAAGlB;IAC1C,MAAM2B,yBAAyB1B,yBAAyB;QAAEyB;QAAcE,MAAM;IAAU;IACxF,MAAMC,aAAa1B,aAAaa,QAAQC;IACxC,MAAMa,cAAc3B,aAAae,SAASC;IAE1C,MAAM,CAACY,0BAA0BC,4BAA4B,GAAGpC,MAAMqC,QAAQ,CAC5EC,QAAQb,UAAUc,cAAc;IAElC,MAAMC,eAAetB,gBAAgBuB;IAErC,MAAMC,sCAAsC1C,MAAM2C,WAAW,CAC3D,CAACC;QACC,IAAIJ,cAAc;YAChB;QACF;QAEA,MAAMK,eAAeD,EAAEE,MAAM;QAC7BV,4BAA4BS,aAAa5B,OAAO;IAClD,GACA;QAACuB;KAAa;IAGhB,MAAMO,aAAoD,wCACrDtB;QACHuB,WAAW;QACXjC,YAAYC;QACZiC,MAAM;QACNC,MAAM;QACN/B,UAAUA;QACVC,QAAQC;QACRC,SAASC;QACTC,SAASjB,aAAamC,qCAAqClB;;IAG7D,IAAIgB,cAAc;QAChBO,WAAW9B,OAAO,GAAGC;QACrB6B,UAAU,CAAC,eAAe,GAAG7B,cAAc,SAAS;IACtD,OAAO;QACL6B,UAAU,CAAC,eAAe,GAAGZ,2BAA2B,SAAS;IACnE;IAEA,qBACE,MAACgB;QACCrC,WAAWb,+BAET4B,UAAU,aAAapB,eAAe,CAACoB,MAAM,EAC7CD,aAAa,mDACbT,oCACAQ,4BACAI,wBACAjB;QAEFD,OAAOA;QACPuC,KAAKrC;;0BAEL,KAACP,wDACKuC;gBACJjC,SAAS;gBACTM,QAAQa;gBACRX,SAASY;;0BAEX,MAACmB;gBAAKC,aAAW;gBAACxC,SAAS;;kCACzB,KAACuC;wBAAKvC,SAAS;;kCACf,KAACuC;wBACCC,aAAW;wBACXxC,WAAWb,iCAET2B,aAAa,SAAS,CAACT;;;;;;AAMnC,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Switch/Switch.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useConfigDirection } from '../../hooks/useConfigDirection';\nimport { useFocusVisible } from '../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName';\nimport { useMergeProps } from '../../hooks/useMergeProps';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { callMultiple } from '../../lib/callMultiple';\nimport { warnOnce } from '../../lib/warnOnce';\nimport type { HasDataAttribute, HasRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { VisuallyHidden, type VisuallyHiddenProps } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './Switch.module.css';\n\nconst warn = warnOnce('Switch');\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nexport interface SwitchProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\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?: React.InputHTMLAttributes<HTMLInputElement> &\n HasRootRef<HTMLInputElement> &\n HasDataAttribute;\n };\n /**\n * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.\n */\n getRef?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * @see https://vkui.io/components/switch\n */\nexport const Switch = ({\n style: rootStyle,\n className: rootClassName,\n getRootRef: rootGetRootRef,\n getRef,\n slotProps,\n ...restProps\n}: SwitchProps): React.ReactNode => {\n /* istanbul ignore if: не проверяем в тестах */\n if (process.env.NODE_ENV === 'development' && getRef) {\n warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');\n }\n\n const rootRest = useMergeProps(\n {\n style: rootStyle,\n className: rootClassName,\n getRootRef: rootGetRootRef,\n },\n slotProps?.root,\n );\n const {\n checked: checkedProp,\n onBlur: onBlurProp,\n onFocus: onFocusProp,\n onClick,\n ...inputRest\n } = useMergeProps({ getRootRef: getRef, ...restProps }, slotProps?.input);\n\n const direction = useConfigDirection();\n const isRtl = direction === 'rtl';\n const platform = usePlatform();\n const { sizeY = 'none' } = useAdaptivity();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: 'outside' });\n const handleBlur = callMultiple(onBlur, onBlurProp);\n const handleFocus = callMultiple(onFocus, onFocusProp);\n\n const [localUncontrolledChecked, setLocalUncontrolledChecked] = React.useState(\n Boolean(inputRest.defaultChecked),\n );\n const isControlled = checkedProp !== undefined;\n\n const syncUncontrolledCheckedStateOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLInputElement>) => {\n if (isControlled) {\n return;\n }\n\n const switchTarget = e.target as HTMLInputElement;\n setLocalUncontrolledChecked(switchTarget.checked);\n },\n [isControlled],\n );\n\n const inputProps: VisuallyHiddenProps<HTMLInputElement> = {\n Component: 'input',\n type: 'checkbox',\n role: 'switch',\n onBlur: handleBlur,\n onFocus: handleFocus,\n onClick: callMultiple(syncUncontrolledCheckedStateOnClick, onClick),\n ...inputRest,\n };\n\n if (isControlled) {\n inputProps.checked = checkedProp;\n inputProps['aria-checked'] = checkedProp ? 'true' : 'false';\n } else {\n inputProps['aria-checked'] = localUncontrolledChecked ? 'true' : 'false';\n }\n\n return (\n <RootComponent\n Component=\"label\"\n baseClassName={classNames(\n styles.host,\n sizeY !== 'regular' && sizeYClassNames[sizeY],\n platform === 'ios' ? styles.ios : styles.default,\n inputRest.disabled && styles.disabled,\n isRtl && styles.rtl,\n focusVisibleClassNames,\n )}\n {...rootRest}\n >\n <VisuallyHidden baseClassName={styles.inputNative} {...inputProps} />\n <span aria-hidden className={styles.inputFake}>\n <span className={styles.track} />\n <span\n aria-hidden\n className={classNames(\n styles.handle,\n platform !== 'ios' && !inputRest.disabled && styles.handleWithRipple,\n )}\n />\n </span>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivity","useConfigDirection","useFocusVisible","useFocusVisibleClassName","useMergeProps","usePlatform","callMultiple","warnOnce","RootComponent","VisuallyHidden","warn","sizeYClassNames","none","compact","Switch","style","rootStyle","className","rootClassName","getRootRef","rootGetRootRef","getRef","slotProps","restProps","process","env","NODE_ENV","rootRest","root","input","checked","checkedProp","onBlur","onBlurProp","onFocus","onFocusProp","onClick","inputRest","direction","isRtl","platform","sizeY","focusVisible","focusVisibleClassNames","mode","handleBlur","handleFocus","localUncontrolledChecked","setLocalUncontrolledChecked","useState","Boolean","defaultChecked","isControlled","undefined","syncUncontrolledCheckedStateOnClick","useCallback","e","switchTarget","target","inputProps","Component","type","role","baseClassName","disabled","span","aria-hidden"],"mappings":"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"}
@@ -1,7 +1,20 @@
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 TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onResize'>, HasRef<HTMLTextAreaElement>, HasRootRef<HTMLElement>, HasAlign, FormFieldProps {
4
+ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'onResize'>, HasRootRef<HTMLElement>, HasAlign, FormFieldProps {
5
+ /**
6
+ * @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ textArea: { getRootRef: ... } }`.
7
+ */
8
+ getRef?: React.Ref<HTMLTextAreaElement>;
9
+ /**
10
+ * Свойства, которые можно прокинуть внутрь компонента:
11
+ * - `root`: свойства для прокидывания в корень компонента;
12
+ * - `textArea`: свойства для прокидывания в поле ввода.
13
+ */
14
+ slotProps?: {
15
+ root?: React.HTMLAttributes<HTMLElement> & HasRootRef<HTMLElement> & HasDataAttribute;
16
+ textArea?: React.TextareaHTMLAttributes<HTMLTextAreaElement> & HasRootRef<HTMLTextAreaElement> & HasDataAttribute;
17
+ };
5
18
  /**
6
19
  * Свойство управляющее автоматическим изменением высоты компонента.
7
20
  */
@@ -18,5 +31,5 @@ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTex
18
31
  /**
19
32
  * @see https://vkui.io/components/textarea
20
33
  */
21
- export declare const Textarea: ({ grow, style, onResize, className, getRootRef, getRef, rows, maxHeight, status, onChange, align, mode, after, before, afterAlign, beforeAlign, value, ...restProps }: TextareaProps) => React.ReactNode;
34
+ export declare const Textarea: ({ className: rootClassName, getRootRef, style, grow, onResize, getRef, rows, maxHeight, status, align, mode, after, before, afterAlign, beforeAlign, slotProps, ...restProps }: TextareaProps) => React.ReactNode;
22
35
  //# sourceMappingURL=Textarea.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAUxE,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,EACzE,MAAM,CAAC,mBAAmB,CAAC,EAC3B,UAAU,CAAC,WAAW,CAAC,EACvB,QAAQ,EACR,cAAc;IAChB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,uKAmBtB,aAAa,KAAG,KAAK,CAAC,SA0CxB,CAAC"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAYxE,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,EACzE,UAAU,CAAC,WAAW,CAAC,EACvB,QAAQ,EACR,cAAc;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAC;QACtF,QAAQ,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,GAC1D,UAAU,CAAC,mBAAmB,CAAC,GAC/B,gBAAgB,CAAC;KACpB,CAAC;IACF;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,gLAmBtB,aAAa,KAAG,KAAK,CAAC,SAoExB,CAAC"}