@vkontakte/vkui 4.22.2 → 4.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +193 -30
  4. package/.cache/ts/src/components/ActionSheet/ActionSheetContext.d.ts +1 -1
  5. package/.cache/ts/src/components/ActionSheetItem/ActionSheetItem.d.ts +7 -0
  6. package/.cache/ts/src/components/AdaptivityProvider/AdaptivityContext.d.ts +5 -0
  7. package/.cache/ts/src/components/AppRoot/AppRootContext.d.ts +1 -0
  8. package/.cache/ts/src/components/AppRoot/AppRootPortal.d.ts +1 -0
  9. package/.cache/ts/src/components/ClickPopper/ClickPopper.d.ts +21 -0
  10. package/.cache/ts/src/components/ConfigProvider/ConfigProviderContext.d.ts +8 -0
  11. package/.cache/ts/src/components/Dropdown/Dropdown.d.ts +49 -0
  12. package/.cache/ts/src/components/Footer/Footer.d.ts +3 -3
  13. package/.cache/ts/src/components/HoverPopper/HoverPopper.d.ts +29 -0
  14. package/.cache/ts/src/components/Popper/Popper.d.ts +27 -0
  15. package/.cache/ts/src/components/RichTooltip/RichTooltip.d.ts +46 -0
  16. package/.cache/ts/src/components/TextTooltip/TextTooltip.d.ts +49 -0
  17. package/.cache/ts/src/hoc/withAdaptivity.d.ts +1 -0
  18. package/.cache/ts/src/hooks/usePatchChildrenRef.d.ts +6 -0
  19. package/.cache/ts/src/index.d.ts +2 -1
  20. package/.cache/ts/src/unstable/index.d.ts +8 -0
  21. package/dist/cjs/components/ActionSheet/ActionSheet.js +21 -7
  22. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  23. package/dist/cjs/components/ActionSheet/ActionSheetContext.d.ts +1 -1
  24. package/dist/cjs/components/ActionSheet/ActionSheetContext.js.map +1 -1
  25. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js +1 -3
  26. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  27. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.d.ts +7 -0
  28. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js +4 -3
  29. package/dist/cjs/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  30. package/dist/cjs/components/AdaptivityProvider/AdaptivityContext.d.ts +5 -0
  31. package/dist/cjs/components/AdaptivityProvider/AdaptivityContext.js +5 -1
  32. package/dist/cjs/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  33. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js +10 -5
  34. package/dist/cjs/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  35. package/dist/cjs/components/AppRoot/AppRoot.js +3 -6
  36. package/dist/cjs/components/AppRoot/AppRoot.js.map +1 -1
  37. package/dist/cjs/components/AppRoot/AppRootContext.d.ts +1 -0
  38. package/dist/cjs/components/AppRoot/AppRootContext.js.map +1 -1
  39. package/dist/cjs/components/AppRoot/AppRootPortal.d.ts +1 -0
  40. package/dist/cjs/components/AppRoot/AppRootPortal.js +7 -3
  41. package/dist/cjs/components/AppRoot/AppRootPortal.js.map +1 -1
  42. package/dist/cjs/components/Cell/Cell.js +3 -1
  43. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  44. package/dist/cjs/components/ClickPopper/ClickPopper.d.ts +21 -0
  45. package/dist/cjs/components/ClickPopper/ClickPopper.js +92 -0
  46. package/dist/cjs/components/ClickPopper/ClickPopper.js.map +1 -0
  47. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.d.ts +8 -0
  48. package/dist/cjs/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  49. package/dist/cjs/components/Dropdown/Dropdown.d.ts +49 -0
  50. package/dist/cjs/components/Dropdown/Dropdown.js +56 -0
  51. package/dist/cjs/components/Dropdown/Dropdown.js.map +1 -0
  52. package/dist/cjs/components/Footer/Footer.d.ts +3 -3
  53. package/dist/cjs/components/Footer/Footer.js +2 -3
  54. package/dist/cjs/components/Footer/Footer.js.map +1 -1
  55. package/dist/cjs/components/HoverPopper/HoverPopper.d.ts +29 -0
  56. package/dist/cjs/components/HoverPopper/HoverPopper.js +97 -0
  57. package/dist/cjs/components/HoverPopper/HoverPopper.js.map +1 -0
  58. package/dist/cjs/components/Popper/Popper.d.ts +27 -0
  59. package/dist/cjs/components/Popper/Popper.js +153 -0
  60. package/dist/cjs/components/Popper/Popper.js.map +1 -0
  61. package/dist/cjs/components/RichTooltip/RichTooltip.d.ts +46 -0
  62. package/dist/cjs/components/RichTooltip/RichTooltip.js +47 -0
  63. package/dist/cjs/components/RichTooltip/RichTooltip.js.map +1 -0
  64. package/dist/cjs/components/Tappable/Tappable.js +6 -4
  65. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  66. package/dist/cjs/components/TextTooltip/TextTooltip.d.ts +49 -0
  67. package/dist/cjs/components/TextTooltip/TextTooltip.js +57 -0
  68. package/dist/cjs/components/TextTooltip/TextTooltip.js.map +1 -0
  69. package/dist/cjs/hoc/withAdaptivity.d.ts +1 -0
  70. package/dist/cjs/hoc/withAdaptivity.js +5 -2
  71. package/dist/cjs/hoc/withAdaptivity.js.map +1 -1
  72. package/dist/cjs/hooks/usePatchChildrenRef.d.ts +6 -0
  73. package/dist/cjs/hooks/usePatchChildrenRef.js +38 -0
  74. package/dist/cjs/hooks/usePatchChildrenRef.js.map +1 -0
  75. package/dist/cjs/index.d.ts +2 -1
  76. package/dist/cjs/index.js +2 -2
  77. package/dist/cjs/index.js.map +1 -1
  78. package/dist/cjs/unstable/index.d.ts +8 -0
  79. package/dist/cjs/unstable/index.js +32 -0
  80. package/dist/cjs/unstable/index.js.map +1 -1
  81. package/dist/components/ActionSheet/ActionSheet.js +22 -8
  82. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  83. package/dist/components/ActionSheet/ActionSheetContext.d.ts +1 -1
  84. package/dist/components/ActionSheet/ActionSheetContext.js.map +1 -1
  85. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js +1 -3
  86. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  87. package/dist/components/ActionSheetItem/ActionSheetItem.d.ts +7 -0
  88. package/dist/components/ActionSheetItem/ActionSheetItem.js +4 -3
  89. package/dist/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  90. package/dist/components/AdaptivityProvider/AdaptivityContext.d.ts +5 -0
  91. package/dist/components/AdaptivityProvider/AdaptivityContext.js +4 -1
  92. package/dist/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  93. package/dist/components/AdaptivityProvider/AdaptivityProvider.js +11 -6
  94. package/dist/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  95. package/dist/components/AppRoot/AppRoot.js +3 -6
  96. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  97. package/dist/components/AppRoot/AppRootContext.d.ts +1 -0
  98. package/dist/components/AppRoot/AppRootContext.js.map +1 -1
  99. package/dist/components/AppRoot/AppRootPortal.d.ts +1 -0
  100. package/dist/components/AppRoot/AppRootPortal.js +7 -3
  101. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  102. package/dist/components/Cell/Cell.js +3 -1
  103. package/dist/components/Cell/Cell.js.map +1 -1
  104. package/dist/components/ClickPopper/ClickPopper.d.ts +21 -0
  105. package/dist/components/ClickPopper/ClickPopper.js +67 -0
  106. package/dist/components/ClickPopper/ClickPopper.js.map +1 -0
  107. package/dist/components/ConfigProvider/ConfigProviderContext.d.ts +8 -0
  108. package/dist/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  109. package/dist/components/Dropdown/Dropdown.d.ts +49 -0
  110. package/dist/components/Dropdown/Dropdown.js +38 -0
  111. package/dist/components/Dropdown/Dropdown.js.map +1 -0
  112. package/dist/components/Footer/Footer.d.ts +3 -3
  113. package/dist/components/Footer/Footer.js +1 -4
  114. package/dist/components/Footer/Footer.js.map +1 -1
  115. package/dist/components/HoverPopper/HoverPopper.d.ts +29 -0
  116. package/dist/components/HoverPopper/HoverPopper.js +73 -0
  117. package/dist/components/HoverPopper/HoverPopper.js.map +1 -0
  118. package/dist/components/Popper/Popper.d.ts +27 -0
  119. package/dist/components/Popper/Popper.js +127 -0
  120. package/dist/components/Popper/Popper.js.map +1 -0
  121. package/dist/components/RichTooltip/RichTooltip.d.ts +46 -0
  122. package/dist/components/RichTooltip/RichTooltip.js +26 -0
  123. package/dist/components/RichTooltip/RichTooltip.js.map +1 -0
  124. package/dist/components/Tappable/Tappable.js +7 -5
  125. package/dist/components/Tappable/Tappable.js.map +1 -1
  126. package/dist/components/TextTooltip/TextTooltip.d.ts +49 -0
  127. package/dist/components/TextTooltip/TextTooltip.js +34 -0
  128. package/dist/components/TextTooltip/TextTooltip.js.map +1 -0
  129. package/dist/components.css +1 -1
  130. package/dist/components.css.map +1 -1
  131. package/dist/cssm/components/ActionSheet/ActionSheet.js +22 -8
  132. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  133. package/dist/cssm/components/ActionSheet/ActionSheetContext.js.map +1 -1
  134. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js +1 -3
  135. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  136. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js +4 -3
  137. package/dist/cssm/components/ActionSheetItem/ActionSheetItem.js.map +1 -1
  138. package/dist/cssm/components/AdaptivityProvider/AdaptivityContext.js +4 -1
  139. package/dist/cssm/components/AdaptivityProvider/AdaptivityContext.js.map +1 -1
  140. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js +11 -6
  141. package/dist/cssm/components/AdaptivityProvider/AdaptivityProvider.js.map +1 -1
  142. package/dist/cssm/components/AppRoot/AppRoot.js +3 -6
  143. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  144. package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
  145. package/dist/cssm/components/AppRoot/AppRootPortal.js +7 -3
  146. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  147. package/dist/cssm/components/Cell/Cell.js +3 -1
  148. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  149. package/dist/cssm/components/ClickPopper/ClickPopper.js +67 -0
  150. package/dist/cssm/components/ClickPopper/ClickPopper.js.map +1 -0
  151. package/dist/cssm/components/ConfigProvider/ConfigProviderContext.js.map +1 -1
  152. package/dist/cssm/components/Dropdown/Dropdown.css +1 -0
  153. package/dist/cssm/components/Dropdown/Dropdown.js +41 -0
  154. package/dist/cssm/components/Dropdown/Dropdown.js.map +1 -0
  155. package/dist/cssm/components/Footer/Footer.js +1 -4
  156. package/dist/cssm/components/Footer/Footer.js.map +1 -1
  157. package/dist/cssm/components/HoverPopper/HoverPopper.js +73 -0
  158. package/dist/cssm/components/HoverPopper/HoverPopper.js.map +1 -0
  159. package/dist/cssm/components/Popper/Popper.css +1 -0
  160. package/dist/cssm/components/Popper/Popper.js +128 -0
  161. package/dist/cssm/components/Popper/Popper.js.map +1 -0
  162. package/dist/cssm/components/RichTooltip/RichTooltip.css +1 -0
  163. package/dist/cssm/components/RichTooltip/RichTooltip.js +29 -0
  164. package/dist/cssm/components/RichTooltip/RichTooltip.js.map +1 -0
  165. package/dist/cssm/components/Tappable/Tappable.js +7 -5
  166. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  167. package/dist/cssm/components/TextTooltip/TextTooltip.css +1 -0
  168. package/dist/cssm/components/TextTooltip/TextTooltip.js +37 -0
  169. package/dist/cssm/components/TextTooltip/TextTooltip.js.map +1 -0
  170. package/dist/cssm/hoc/withAdaptivity.js +5 -2
  171. package/dist/cssm/hoc/withAdaptivity.js.map +1 -1
  172. package/dist/cssm/hooks/usePatchChildrenRef.js +21 -0
  173. package/dist/cssm/hooks/usePatchChildrenRef.js.map +1 -0
  174. package/dist/cssm/index.js +1 -1
  175. package/dist/cssm/index.js.map +1 -1
  176. package/dist/cssm/styles/animations.css +1 -1
  177. package/dist/cssm/styles/common.css +1 -1
  178. package/dist/cssm/styles/components.css +1 -1
  179. package/dist/cssm/styles/unstable.css +1 -1
  180. package/dist/cssm/unstable/index.js +4 -0
  181. package/dist/cssm/unstable/index.js.map +1 -1
  182. package/dist/hoc/withAdaptivity.d.ts +1 -0
  183. package/dist/hoc/withAdaptivity.js +5 -2
  184. package/dist/hoc/withAdaptivity.js.map +1 -1
  185. package/dist/hooks/usePatchChildrenRef.d.ts +6 -0
  186. package/dist/hooks/usePatchChildrenRef.js +21 -0
  187. package/dist/hooks/usePatchChildrenRef.js.map +1 -0
  188. package/dist/index.d.ts +2 -1
  189. package/dist/index.js +1 -1
  190. package/dist/index.js.map +1 -1
  191. package/dist/unstable/index.d.ts +8 -0
  192. package/dist/unstable/index.js +4 -0
  193. package/dist/unstable/index.js.map +1 -1
  194. package/dist/unstable.css +1 -1
  195. package/dist/unstable.css.map +1 -1
  196. package/dist/vkui.css +1 -1
  197. package/dist/vkui.css.map +1 -1
  198. package/package.json +2 -2
  199. package/src/components/ActionSheet/ActionSheet.tsx +16 -9
  200. package/src/components/ActionSheet/ActionSheetContext.ts +1 -1
  201. package/src/components/ActionSheet/ActionSheetDropdownDesktop.tsx +1 -3
  202. package/src/components/ActionSheetItem/ActionSheetItem.tsx +10 -2
  203. package/src/components/AdaptivityProvider/AdaptivityContext.tsx +8 -0
  204. package/src/components/AdaptivityProvider/AdaptivityProvider.tsx +8 -6
  205. package/src/components/AdaptivityProvider/Readme.md +3 -3
  206. package/src/components/AppRoot/AppRoot.tsx +4 -5
  207. package/src/components/AppRoot/AppRootContext.ts +1 -0
  208. package/src/components/AppRoot/AppRootPortal.tsx +5 -3
  209. package/src/components/Cell/Cell.tsx +2 -1
  210. package/src/components/ChipsSelect/Readme.md +1 -1
  211. package/src/components/ClickPopper/ClickPopper.tsx +82 -0
  212. package/src/components/ConfigProvider/ConfigProviderContext.tsx +8 -0
  213. package/src/components/Dropdown/Dropdown.css +19 -0
  214. package/src/components/Dropdown/Dropdown.tsx +74 -0
  215. package/src/components/Dropdown/Readme.md +39 -0
  216. package/src/components/Footer/Footer.tsx +6 -4
  217. package/src/components/HoverPopper/HoverPopper.tsx +100 -0
  218. package/src/components/PanelHeader/Readme.md +4 -0
  219. package/src/components/Popper/Popper.css +39 -0
  220. package/src/components/Popper/Popper.tsx +147 -0
  221. package/src/components/Popper/Readme.md +23 -0
  222. package/src/components/RichTooltip/Readme.md +55 -0
  223. package/src/components/RichTooltip/RichTooltip.css +10 -0
  224. package/src/components/RichTooltip/RichTooltip.tsx +70 -0
  225. package/src/components/Tappable/Tappable.tsx +5 -4
  226. package/src/components/TextTooltip/Readme.md +7 -0
  227. package/src/components/TextTooltip/TextTooltip.css +12 -0
  228. package/src/components/TextTooltip/TextTooltip.tsx +76 -0
  229. package/src/components/Tooltip/Readme.md +2 -0
  230. package/src/hoc/withAdaptivity.tsx +5 -1
  231. package/src/hooks/usePatchChildrenRef.ts +24 -0
  232. package/src/index.ts +2 -1
  233. package/src/styles/animations.css +5 -0
  234. package/src/styles/common.css +7 -2
  235. package/src/styles/unstable.css +4 -0
  236. package/src/unstable/index.ts +12 -0
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.Footer = void 0;
9
9
 
10
10
  var _jsxRuntime = require("../../lib/jsxRuntime");
11
11
 
@@ -29,6 +29,5 @@ var Footer = function Footer(_ref) {
29
29
  }), children);
30
30
  };
31
31
 
32
- var _default = Footer;
33
- exports.default = _default;
32
+ exports.Footer = Footer;
34
33
  //# sourceMappingURL=Footer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Footer/Footer.tsx"],"names":["Footer","children","restProps"],"mappings":";;;;;;;;;;;;;;;AACA;;;;AAKA,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,OAA6C;AAAA,MAA1CC,QAA0C,QAA1CA,QAA0C;AAAA,MAA7BC,SAA6B;AACjF,SACE,qCAAC,gBAAD;AAAS,IAAA,SAAS,EAAC;AAAnB,KAAgCA,SAAhC;AAA2C,IAAA,KAAK,EAAC,GAAjD;AAAqD,IAAA,MAAM,EAAC,SAA5D;AAAsE,IAAA,SAAS,EAAC;AAAhF,MACGD,QADH,CADF;AAKD,CAND;;eAQeD,M","sourcesContent":["import * as React from 'react';\nimport Caption from '../Typography/Caption/Caption';\nimport './Footer.css';\n\ntype FooterProps = React.AllHTMLAttributes<HTMLElement>;\n\nconst Footer: React.FC<FooterProps> = ({ children, ...restProps }: FooterProps) => {\n return (\n <Caption Component=\"footer\" {...restProps} level=\"1\" weight=\"regular\" vkuiClass=\"Footer\">\n {children}\n </Caption>\n );\n};\n\nexport default Footer;\n"],"file":"Footer.js"}
1
+ {"version":3,"sources":["../../../../src/components/Footer/Footer.tsx"],"names":["Footer","children","restProps"],"mappings":";;;;;;;;;;;;;;;AAEA;;;;AAKO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,OAG1B;AAAA,MAFjBC,QAEiB,QAFjBA,QAEiB;AAAA,MADdC,SACc;AACjB,SACE,qCAAC,gBAAD;AAAS,IAAA,SAAS,EAAC;AAAnB,KAAgCA,SAAhC;AAA2C,IAAA,KAAK,EAAC,GAAjD;AAAqD,IAAA,MAAM,EAAC,SAA5D;AAAsE,IAAA,SAAS,EAAC;AAAhF,MACGD,QADH,CADF;AAKD,CATM","sourcesContent":["import * as React from 'react';\nimport { HasComponent } from '../../types';\nimport Caption from '../Typography/Caption/Caption';\nimport './Footer.css';\n\nexport type FooterProps = React.AllHTMLAttributes<HTMLElement> & HasComponent;\n\nexport const Footer: React.FC<FooterProps> = ({\n children,\n ...restProps\n}: FooterProps) => {\n return (\n <Caption Component=\"footer\" {...restProps} level=\"1\" weight=\"regular\" vkuiClass=\"Footer\">\n {children}\n </Caption>\n );\n};\n"],"file":"Footer.js"}
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+ import { PopperCommonProps } from '../Popper/Popper';
3
+ export interface HoverPopperProps extends PopperCommonProps {
4
+ /**
5
+ * Содержимое тултипа
6
+ */
7
+ content?: React.ReactNode;
8
+ /**
9
+ * Если передан, то тултип будет показыван/скрыт в зависимости от значения свойства
10
+ */
11
+ shown?: boolean;
12
+ /**
13
+ * Вызывается при каждом изменении видимости тултипа
14
+ */
15
+ onShownChange?: (shown: boolean) => void;
16
+ /**
17
+ * Количество миллисекунд, после которых произойдет показ дропдауна
18
+ */
19
+ showDelay?: number;
20
+ /**
21
+ * Количество миллисекунд, после которых произойдет скрытие дропдауна
22
+ */
23
+ hideDelay?: number;
24
+ /**
25
+ * Либо jsx-элемент (div, button, etc.), либо компонент со свойством `getRootRef`, которое применяется к корневому элементу компонента
26
+ */
27
+ children?: React.ReactElement;
28
+ }
29
+ export declare const HoverPopper: React.FC<HoverPopperProps>;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.HoverPopper = void 0;
11
+
12
+ var _jsxRuntime = require("../../lib/jsxRuntime");
13
+
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
19
+
20
+ var React = _interopRequireWildcard(require("react"));
21
+
22
+ var _Popper = require("../Popper/Popper");
23
+
24
+ var _useEventListener = require("../../hooks/useEventListener");
25
+
26
+ var _useTimeout = require("../../hooks/useTimeout");
27
+
28
+ var _usePatchChildrenRef3 = require("../../hooks/usePatchChildrenRef");
29
+
30
+ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
31
+
32
+ var _excluded = ["getRef", "content", "children", "onShownChange", "shown", "showDelay", "hideDelay"];
33
+
34
+ var HoverPopper = function HoverPopper(_ref) {
35
+ var getRef = _ref.getRef,
36
+ content = _ref.content,
37
+ children = _ref.children,
38
+ onShownChange = _ref.onShownChange,
39
+ _shown = _ref.shown,
40
+ showDelay = _ref.showDelay,
41
+ _ref$hideDelay = _ref.hideDelay,
42
+ hideDelay = _ref$hideDelay === void 0 ? 150 : _ref$hideDelay,
43
+ restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
44
+
45
+ var _React$useState = React.useState(_shown || false),
46
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
47
+ computedShown = _React$useState2[0],
48
+ setComputedShown = _React$useState2[1];
49
+
50
+ var shown = typeof _shown === 'boolean' ? _shown : computedShown;
51
+
52
+ var setShown = function setShown(value) {
53
+ if (typeof _shown !== 'boolean') {
54
+ setComputedShown(value);
55
+ }
56
+
57
+ typeof onShownChange === 'function' && onShownChange(value);
58
+ };
59
+
60
+ var showTimeout = (0, _useTimeout.useTimeout)(function () {
61
+ setShown(true);
62
+ }, showDelay);
63
+ var hideTimeout = (0, _useTimeout.useTimeout)(function () {
64
+ setShown(false);
65
+ }, hideDelay);
66
+
67
+ var _usePatchChildrenRef = (0, _usePatchChildrenRef3.usePatchChildrenRef)(children),
68
+ _usePatchChildrenRef2 = (0, _slicedToArray2.default)(_usePatchChildrenRef, 2),
69
+ childRef = _usePatchChildrenRef2[0],
70
+ child = _usePatchChildrenRef2[1];
71
+
72
+ var onTargetEnter = function onTargetEnter() {
73
+ hideTimeout.clear();
74
+ showTimeout.set();
75
+ };
76
+
77
+ var onTargetLeave = function onTargetLeave() {
78
+ showTimeout.clear();
79
+ hideTimeout.set();
80
+ };
81
+
82
+ var targetEnterListener = (0, _useEventListener.useEventListener)('pointerenter', onTargetEnter);
83
+ var targetLeaveListener = (0, _useEventListener.useEventListener)('pointerleave', onTargetLeave);
84
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
85
+ targetEnterListener.add(childRef.current);
86
+ targetLeaveListener.add(childRef.current);
87
+ }, []);
88
+ return (0, _jsxRuntime.createScopedElement)(React.Fragment, null, child, shown && (0, _jsxRuntime.createScopedElement)(_Popper.Popper, (0, _extends2.default)({}, restProps, {
89
+ onMouseOver: hideTimeout.clear,
90
+ onMouseOut: onTargetLeave,
91
+ getRef: getRef,
92
+ targetRef: childRef
93
+ }), content));
94
+ };
95
+
96
+ exports.HoverPopper = HoverPopper;
97
+ //# sourceMappingURL=HoverPopper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/HoverPopper/HoverPopper.tsx"],"names":["HoverPopper","getRef","content","children","onShownChange","_shown","shown","showDelay","hideDelay","restProps","React","useState","computedShown","setComputedShown","setShown","value","showTimeout","hideTimeout","childRef","child","onTargetEnter","clear","set","onTargetLeave","targetEnterListener","targetLeaveListener","add","current"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AA6BO,IAAMA,WAAuC,GAAG,SAA1CA,WAA0C,OAS/B;AAAA,MARtBC,MAQsB,QARtBA,MAQsB;AAAA,MAPtBC,OAOsB,QAPtBA,OAOsB;AAAA,MANtBC,QAMsB,QANtBA,QAMsB;AAAA,MALtBC,aAKsB,QALtBA,aAKsB;AAAA,MAJfC,MAIe,QAJtBC,KAIsB;AAAA,MAHtBC,SAGsB,QAHtBA,SAGsB;AAAA,4BAFtBC,SAEsB;AAAA,MAFtBA,SAEsB,+BAFV,GAEU;AAAA,MADnBC,SACmB;;AACtB,wBAA0CC,KAAK,CAACC,QAAN,CAAeN,MAAM,IAAI,KAAzB,CAA1C;AAAA;AAAA,MAAOO,aAAP;AAAA,MAAsBC,gBAAtB;;AAEA,MAAMP,KAAK,GAAG,OAAOD,MAAP,KAAkB,SAAlB,GAA8BA,MAA9B,GAAuCO,aAArD;;AAEA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAACC,KAAD,EAAoB;AACnC,QAAI,OAAOV,MAAP,KAAkB,SAAtB,EAAiC;AAC/BQ,MAAAA,gBAAgB,CAACE,KAAD,CAAhB;AACD;;AACD,WAAOX,aAAP,KAAyB,UAAzB,IAAuCA,aAAa,CAACW,KAAD,CAApD;AACD,GALD;;AAOA,MAAMC,WAAW,GAAG,4BAAW,YAAM;AACnCF,IAAAA,QAAQ,CAAC,IAAD,CAAR;AACD,GAFmB,EAEjBP,SAFiB,CAApB;AAIA,MAAMU,WAAW,GAAG,4BAAW,YAAM;AACnCH,IAAAA,QAAQ,CAAC,KAAD,CAAR;AACD,GAFmB,EAEjBN,SAFiB,CAApB;;AAIA,6BAA0B,+CAAoBL,QAApB,CAA1B;AAAA;AAAA,MAAOe,QAAP;AAAA,MAAiBC,KAAjB;;AAEA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1BH,IAAAA,WAAW,CAACI,KAAZ;AACAL,IAAAA,WAAW,CAACM,GAAZ;AACD,GAHD;;AAKA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1BP,IAAAA,WAAW,CAACK,KAAZ;AACAJ,IAAAA,WAAW,CAACK,GAAZ;AACD,GAHD;;AAKA,MAAME,mBAAmB,GAAG,wCAAiB,cAAjB,EAAiCJ,aAAjC,CAA5B;AACA,MAAMK,mBAAmB,GAAG,wCAAiB,cAAjB,EAAiCF,aAAjC,CAA5B;AAEA,4DAA0B,YAAM;AAC9BC,IAAAA,mBAAmB,CAACE,GAApB,CAAwBR,QAAQ,CAACS,OAAjC;AACAF,IAAAA,mBAAmB,CAACC,GAApB,CAAwBR,QAAQ,CAACS,OAAjC;AACD,GAHD,EAGG,EAHH;AAKA,SACE,qCAAC,KAAD,CAAO,QAAP,QACGR,KADH,EAEGb,KAAK,IACJ,qCAAC,cAAD,6BACMG,SADN;AAEE,IAAA,WAAW,EAAEQ,WAAW,CAACI,KAF3B;AAGE,IAAA,UAAU,EAAEE,aAHd;AAIE,IAAA,MAAM,EAAEtB,MAJV;AAKE,IAAA,SAAS,EAAEiB;AALb,MAOGhB,OAPH,CAHJ,CADF;AAgBD,CAjEM","sourcesContent":["import * as React from 'react';\nimport { Popper, PopperCommonProps } from '../Popper/Popper';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { usePatchChildrenRef } from '../../hooks/usePatchChildrenRef';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\n\nexport interface HoverPopperProps extends PopperCommonProps {\n /**\n * Содержимое тултипа\n */\n content?: React.ReactNode;\n /**\n * Если передан, то тултип будет показыван/скрыт в зависимости от значения свойства\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости тултипа\n */\n onShownChange?: (shown: boolean) => void;\n /**\n * Количество миллисекунд, после которых произойдет показ дропдауна\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдет скрытие дропдауна\n */\n hideDelay?: number;\n /**\n * Либо jsx-элемент (div, button, etc.), либо компонент со свойством `getRootRef`, которое применяется к корневому элементу компонента\n */\n children?: React.ReactElement;\n}\n\nexport const HoverPopper: React.FC<HoverPopperProps> = ({\n getRef,\n content,\n children,\n onShownChange,\n shown: _shown,\n showDelay,\n hideDelay = 150,\n ...restProps\n}: HoverPopperProps) => {\n const [computedShown, setComputedShown] = React.useState(_shown || false);\n\n const shown = typeof _shown === 'boolean' ? _shown : computedShown;\n\n const setShown = (value: boolean) => {\n if (typeof _shown !== 'boolean') {\n setComputedShown(value);\n }\n typeof onShownChange === 'function' && onShownChange(value);\n };\n\n const showTimeout = useTimeout(() => {\n setShown(true);\n }, showDelay);\n\n const hideTimeout = useTimeout(() => {\n setShown(false);\n }, hideDelay);\n\n const [childRef, child] = usePatchChildrenRef(children);\n\n const onTargetEnter = () => {\n hideTimeout.clear();\n showTimeout.set();\n };\n\n const onTargetLeave = () => {\n showTimeout.clear();\n hideTimeout.set();\n };\n\n const targetEnterListener = useEventListener('pointerenter', onTargetEnter);\n const targetLeaveListener = useEventListener('pointerleave', onTargetLeave);\n\n useIsomorphicLayoutEffect(() => {\n targetEnterListener.add(childRef.current);\n targetLeaveListener.add(childRef.current);\n }, []);\n\n return (\n <React.Fragment>\n {child}\n {shown &&\n <Popper\n {...restProps}\n onMouseOver={hideTimeout.clear}\n onMouseOut={onTargetLeave}\n getRef={getRef}\n targetRef={childRef}\n >\n {content}\n </Popper>\n }\n </React.Fragment>\n );\n};\n"],"file":"HoverPopper.js"}
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { HasRef } from '../../types';
3
+ import './Popper.css';
4
+ export declare type Placement = 'auto' | 'auto-start' | 'auto-end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'right-start' | 'right-end' | 'left-start' | 'left-end' | 'top' | 'bottom' | 'left' | 'right';
5
+ export interface PopperCommonProps extends React.HTMLAttributes<HTMLElement>, HasRef<HTMLElement> {
6
+ /**
7
+ * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
8
+ */
9
+ placement?: Placement;
10
+ /**
11
+ * Отступ по вспомогательной оси
12
+ */
13
+ offsetSkidding?: number;
14
+ /**
15
+ * Отступ по главной оси
16
+ */
17
+ offsetDistance?: number;
18
+ arrow?: boolean;
19
+ arrowClassName?: string;
20
+ onPlacementChange?: (data: {
21
+ placement?: Placement;
22
+ }) => void;
23
+ }
24
+ export interface PopperProps extends PopperCommonProps {
25
+ targetRef?: React.RefObject<HTMLElement>;
26
+ }
27
+ export declare const Popper: React.FC<PopperProps>;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.Popper = void 0;
11
+
12
+ var _jsxRuntime = require("../../lib/jsxRuntime");
13
+
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
+
16
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
+
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
20
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
21
+
22
+ var React = _interopRequireWildcard(require("react"));
23
+
24
+ var _reactPopper = require("react-popper");
25
+
26
+ var _AppRootPortal = require("../AppRoot/AppRootPortal");
27
+
28
+ var _usePlatform = require("../../hooks/usePlatform");
29
+
30
+ var _getClassName = require("../../helpers/getClassName");
31
+
32
+ var _useExternRef = require("../../hooks/useExternRef");
33
+
34
+ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
35
+
36
+ var _excluded = ["targetRef", "children", "getRef", "placement", "onPlacementChange", "arrow", "arrowClassName", "offsetDistance", "offsetSkidding", "style"];
37
+ var ARROW_PADDING = 8;
38
+ var ARROW_WIDTH = 20;
39
+ var ARROW_HEIGHT = 8;
40
+
41
+ var Popper = function Popper(_ref) {
42
+ var targetRef = _ref.targetRef,
43
+ children = _ref.children,
44
+ getRef = _ref.getRef,
45
+ _ref$placement = _ref.placement,
46
+ placement = _ref$placement === void 0 ? 'bottom-start' : _ref$placement,
47
+ onPlacementChange = _ref.onPlacementChange,
48
+ arrow = _ref.arrow,
49
+ arrowClassName = _ref.arrowClassName,
50
+ _ref$offsetDistance = _ref.offsetDistance,
51
+ offsetDistance = _ref$offsetDistance === void 0 ? 8 : _ref$offsetDistance,
52
+ _ref$offsetSkidding = _ref.offsetSkidding,
53
+ offsetSkidding = _ref$offsetSkidding === void 0 ? 0 : _ref$offsetSkidding,
54
+ compStyles = _ref.style,
55
+ restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
56
+
57
+ var _React$useState = React.useState(null),
58
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
59
+ popperNode = _React$useState2[0],
60
+ setPopperNode = _React$useState2[1];
61
+
62
+ var _React$useState3 = React.useState(0),
63
+ _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
64
+ smallTargetOffsetSkidding = _React$useState4[0],
65
+ setSmallTargetOffsetSkidding = _React$useState4[1];
66
+
67
+ var platform = (0, _usePlatform.usePlatform)();
68
+ var setExternalRef = (0, _useExternRef.useExternRef)(getRef, setPopperNode);
69
+ var modifiers = [{
70
+ name: 'preventOverflow'
71
+ }, {
72
+ name: 'offset',
73
+ options: {
74
+ offset: [arrow ? offsetSkidding - smallTargetOffsetSkidding : offsetSkidding, arrow ? offsetDistance + ARROW_HEIGHT : offsetDistance]
75
+ }
76
+ }, {
77
+ name: 'flip'
78
+ }];
79
+
80
+ if (arrow) {
81
+ modifiers.push({
82
+ name: 'arrow',
83
+ options: {
84
+ padding: ARROW_PADDING
85
+ }
86
+ });
87
+ }
88
+
89
+ var _usePopper = (0, _reactPopper.usePopper)(targetRef.current, popperNode, {
90
+ placement: placement,
91
+ modifiers: modifiers
92
+ }),
93
+ styles = _usePopper.styles,
94
+ state = _usePopper.state,
95
+ attributes = _usePopper.attributes;
96
+
97
+ var resolvedPlacement = state === null || state === void 0 ? void 0 : state.placement;
98
+ var isEdgePlacement = !!resolvedPlacement && resolvedPlacement.includes('-'); // true, если поппер отрисован скраю
99
+ // Если поппер рисуется скраю, то нужно опционально сместить его в тех случаях, когда стрелка не дотягивается до
100
+ // таргета из-за маленьких размеров последнего
101
+
102
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
103
+ if (arrow && isEdgePlacement) {
104
+ var placementDirection = resolvedPlacement.startsWith('bottom') || resolvedPlacement.startsWith('top') ? 'vertical' : 'horizontal';
105
+ var arrowSize = placementDirection === 'vertical' ? ARROW_WIDTH : ARROW_HEIGHT;
106
+ var targetSize = placementDirection === 'vertical' ? targetRef.current.offsetWidth : targetRef.current.offsetHeight;
107
+
108
+ if (targetSize < arrowSize + 2 * ARROW_PADDING) {
109
+ setSmallTargetOffsetSkidding(ARROW_PADDING + arrowSize / 2);
110
+ }
111
+ } else {
112
+ setSmallTargetOffsetSkidding(0);
113
+ }
114
+ }, [arrow, isEdgePlacement]);
115
+ React.useEffect(function () {
116
+ if (resolvedPlacement) {
117
+ onPlacementChange && onPlacementChange({
118
+ placement: resolvedPlacement
119
+ });
120
+ }
121
+ }, [resolvedPlacement]);
122
+ var dropdown = (0, _jsxRuntime.createScopedElement)("div", (0, _extends2.default)({}, restProps, attributes.popper, {
123
+ vkuiClass: (0, _getClassName.getClassName)('Popper', platform),
124
+ ref: setExternalRef,
125
+ style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, compStyles), styles.popper)
126
+ }), arrow && (0, _jsxRuntime.createScopedElement)("div", (0, _extends2.default)({}, attributes.arrow, {
127
+ vkuiClass: "Popper__arrow",
128
+ "data-popper-arrow": true,
129
+ style: styles.arrow
130
+ }), (0, _jsxRuntime.createScopedElement)("svg", {
131
+ vkuiClass: "Popper__arrow-in",
132
+ className: arrowClassName,
133
+ width: "20",
134
+ height: "8",
135
+ viewBox: "0 0 20 8",
136
+ fill: "none",
137
+ xmlns: "http://www.w3.org/2000/svg"
138
+ }, (0, _jsxRuntime.createScopedElement)("path", {
139
+ fillRule: "evenodd",
140
+ clipRule: "evenodd",
141
+ d: "M10 0C13 0 15.9999 8 20 8H0C3.9749 8 7 0 10 0Z",
142
+ fill: "currentColor"
143
+ }))), (0, _jsxRuntime.createScopedElement)("div", {
144
+ vkuiClass: "Popper__content"
145
+ }, children));
146
+ return (0, _jsxRuntime.createScopedElement)(_AppRootPortal.AppRootPortal, {
147
+ forcePortal: true,
148
+ vkuiClass: "PopperPortal"
149
+ }, dropdown);
150
+ };
151
+
152
+ exports.Popper = Popper;
153
+ //# sourceMappingURL=Popper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Popper/Popper.tsx"],"names":["ARROW_PADDING","ARROW_WIDTH","ARROW_HEIGHT","Popper","targetRef","children","getRef","placement","onPlacementChange","arrow","arrowClassName","offsetDistance","offsetSkidding","compStyles","style","restProps","React","useState","popperNode","setPopperNode","smallTargetOffsetSkidding","setSmallTargetOffsetSkidding","platform","setExternalRef","modifiers","name","options","offset","push","padding","current","styles","state","attributes","resolvedPlacement","isEdgePlacement","includes","placementDirection","startsWith","arrowSize","targetSize","offsetWidth","offsetHeight","useEffect","dropdown","popper"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { usePopper } from 'react-popper';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport { HasRef } from '../../types';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { getClassName } from '../../helpers/getClassName';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport './Popper.css';\n\nexport type Placement = 'auto' | 'auto-start' | 'auto-end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' |\n'right-start' | 'right-end' | 'left-start' | 'left-end' | 'top' | 'bottom' | 'left' | 'right';\n\ntype Modifier = {\n name: string;\n options?: {\n [index: string]: any;\n };\n};\n\nexport interface PopperCommonProps extends React.HTMLAttributes<HTMLElement>, HasRef<HTMLElement> {\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n /**\n * Отступ по вспомогательной оси\n */\n offsetSkidding?: number;\n /**\n * Отступ по главной оси\n */\n offsetDistance?: number;\n arrow?: boolean;\n arrowClassName?: string;\n onPlacementChange?: (data: { placement?: Placement }) => void;\n}\n\nexport interface PopperProps extends PopperCommonProps {\n targetRef?: React.RefObject<HTMLElement>;\n}\n\nconst ARROW_PADDING = 8;\nconst ARROW_WIDTH = 20;\nconst ARROW_HEIGHT = 8;\n\nexport const Popper: React.FC<PopperProps> = ({\n targetRef,\n children,\n getRef,\n placement = 'bottom-start',\n onPlacementChange,\n arrow,\n arrowClassName,\n offsetDistance = 8,\n offsetSkidding = 0,\n style: compStyles,\n ...restProps\n}: PopperProps) => {\n const [popperNode, setPopperNode] = React.useState(null);\n const [smallTargetOffsetSkidding, setSmallTargetOffsetSkidding] = React.useState(0);\n const platform = usePlatform();\n\n const setExternalRef = useExternRef(getRef, setPopperNode);\n\n const modifiers: Modifier[] = [{\n name: 'preventOverflow',\n }, {\n name: 'offset',\n options: {\n offset: [\n arrow ? offsetSkidding - smallTargetOffsetSkidding : offsetSkidding,\n arrow ? offsetDistance + ARROW_HEIGHT : offsetDistance,\n ],\n },\n }, {\n name: 'flip',\n }];\n\n if (arrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n padding: ARROW_PADDING,\n },\n });\n }\n\n const { styles, state, attributes } = usePopper(targetRef.current, popperNode, {\n placement,\n modifiers,\n });\n\n const resolvedPlacement = state?.placement;\n const isEdgePlacement = !!resolvedPlacement && resolvedPlacement.includes('-'); // true, если поппер отрисован скраю\n\n // Если поппер рисуется скраю, то нужно опционально сместить его в тех случаях, когда стрелка не дотягивается до\n // таргета из-за маленьких размеров последнего\n useIsomorphicLayoutEffect(() => {\n if (arrow && isEdgePlacement) {\n const placementDirection = resolvedPlacement.startsWith('bottom') || resolvedPlacement.startsWith('top') ? 'vertical' : 'horizontal';\n\n const arrowSize = placementDirection === 'vertical' ? ARROW_WIDTH : ARROW_HEIGHT;\n const targetSize = placementDirection === 'vertical' ? targetRef.current.offsetWidth : targetRef.current.offsetHeight;\n\n if (targetSize < arrowSize + 2 * ARROW_PADDING) {\n setSmallTargetOffsetSkidding(ARROW_PADDING + arrowSize / 2);\n }\n } else {\n setSmallTargetOffsetSkidding(0);\n }\n }, [arrow, isEdgePlacement]);\n\n React.useEffect(() => {\n if (resolvedPlacement) {\n onPlacementChange && onPlacementChange({ placement: resolvedPlacement });\n }\n }, [resolvedPlacement]);\n\n const dropdown = (\n <div\n {...restProps}\n {...attributes.popper}\n vkuiClass={getClassName('Popper', platform)}\n ref={setExternalRef}\n style={{ ...compStyles, ...styles.popper }}\n >\n {arrow && (\n <div\n {...attributes.arrow}\n vkuiClass=\"Popper__arrow\"\n data-popper-arrow={true}\n style={styles.arrow}\n >\n <svg vkuiClass=\"Popper__arrow-in\" className={arrowClassName} width=\"20\" height=\"8\" viewBox=\"0 0 20 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M10 0C13 0 15.9999 8 20 8H0C3.9749 8 7 0 10 0Z\" fill=\"currentColor\" />\n </svg>\n </div>\n )}\n <div vkuiClass=\"Popper__content\">\n {children}\n </div>\n </div>\n );\n\n return <AppRootPortal forcePortal vkuiClass=\"PopperPortal\">{dropdown}</AppRootPortal>;\n};\n"],"file":"Popper.js"}
@@ -0,0 +1,46 @@
1
+ import * as React from 'react';
2
+ import { Placement } from '../Popper/Popper';
3
+ import './RichTooltip.css';
4
+ export interface RichTooltipProps {
5
+ /**
6
+ * Содержимое тултипа
7
+ */
8
+ content?: React.ReactNode;
9
+ /**
10
+ * Если передан, то тултип будет показыван/скрыт в зависимости от значения свойства
11
+ */
12
+ shown?: boolean;
13
+ /**
14
+ * Вызывается при каждом изменении видимости тултипа
15
+ */
16
+ onShownChange?: (shown: boolean) => void;
17
+ /**
18
+ * Количество миллисекунд, после которых произойдет показ дропдауна
19
+ */
20
+ showDelay?: number;
21
+ /**
22
+ * Количество миллисекунд, после которых произойдет скрытие дропдауна
23
+ */
24
+ hideDelay?: number;
25
+ /**
26
+ * Либо jsx-элемент (div, button, etc.), либо компонент со свойством `getRootRef`, которое применяется к корневому элементу компонента
27
+ */
28
+ children?: React.ReactElement;
29
+ /**
30
+ * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
31
+ */
32
+ placement?: Placement;
33
+ /**
34
+ * Отступ по вспомогательной оси
35
+ */
36
+ offsetSkidding?: number;
37
+ /**
38
+ * Отступ по главной оси
39
+ */
40
+ offsetDistance?: number;
41
+ onPlacementChange?: (data: {
42
+ placement?: Placement;
43
+ }) => void;
44
+ arrow?: boolean;
45
+ }
46
+ export declare const RichTooltip: React.FC<RichTooltipProps>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.RichTooltip = void 0;
9
+
10
+ var _jsxRuntime = require("../../lib/jsxRuntime");
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
+
18
+ var _HoverPopper = require("../HoverPopper/HoverPopper");
19
+
20
+ var _getClassName = require("../../helpers/getClassName");
21
+
22
+ var _usePlatform = require("../../hooks/usePlatform");
23
+
24
+ var _useAppearance = require("../../hooks/useAppearance");
25
+
26
+ var _classNames2 = require("../../lib/classNames");
27
+
28
+ var _prefixClass = require("../../lib/prefixClass");
29
+
30
+ var _excluded = ["children", "arrow"];
31
+
32
+ var RichTooltip = function RichTooltip(_ref) {
33
+ var children = _ref.children,
34
+ _ref$arrow = _ref.arrow,
35
+ arrow = _ref$arrow === void 0 ? true : _ref$arrow,
36
+ popperProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
37
+ var platform = (0, _usePlatform.usePlatform)();
38
+ var appearance = (0, _useAppearance.useAppearance)();
39
+ return (0, _jsxRuntime.createScopedElement)(_HoverPopper.HoverPopper, (0, _extends2.default)({
40
+ vkuiClass: (0, _classNames2.classNames)((0, _getClassName.getClassName)('RichTooltip', platform), (0, _defineProperty2.default)({}, "RichTooltip--".concat(appearance), !!appearance)),
41
+ arrow: arrow,
42
+ arrowClassName: (0, _prefixClass.prefixClass)('RichTooltip__arrow')
43
+ }, popperProps), children);
44
+ };
45
+
46
+ exports.RichTooltip = RichTooltip;
47
+ //# sourceMappingURL=RichTooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/RichTooltip/RichTooltip.tsx"],"names":["RichTooltip","children","arrow","popperProps","platform","appearance"],"mappings":";;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AA+CO,IAAMA,WAAuC,GAAG,SAA1CA,WAA0C,OAAkE;AAAA,MAA/DC,QAA+D,QAA/DA,QAA+D;AAAA,wBAArDC,KAAqD;AAAA,MAArDA,KAAqD,2BAA7C,IAA6C;AAAA,MAApCC,WAAoC;AACvH,MAAMC,QAAQ,GAAG,+BAAjB;AACA,MAAMC,UAAU,GAAG,mCAAnB;AAEA,SACE,qCAAC,wBAAD;AACE,IAAA,SAAS,EAAE,6BAAW,gCAAa,aAAb,EAA4BD,QAA5B,CAAX,2DACQC,UADR,GACuB,CAAC,CAACA,UADzB,EADb;AAIE,IAAA,KAAK,EAAEH,KAJT;AAKE,IAAA,cAAc,EAAE,8BAAY,oBAAZ;AALlB,KAMMC,WANN,GAQGF,QARH,CADF;AAYD,CAhBM","sourcesContent":["import * as React from 'react';\nimport { HoverPopper } from '../HoverPopper/HoverPopper';\nimport { getClassName } from '../../helpers/getClassName';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport { classNames } from '../../lib/classNames';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { Placement } from '../Popper/Popper';\nimport './RichTooltip.css';\n\n// Приходится избегать экстендов от HoverPopperProps и PopperProps, потому что react-docgen не умеет в Omit.\n// Ждём либо фикса react-docgen (что вряд ли), либо переезда на react-docgen-typescript, где такой проблемы нет.\nexport interface RichTooltipProps {\n /**\n * Содержимое тултипа\n */\n content?: React.ReactNode;\n /**\n * Если передан, то тултип будет показыван/скрыт в зависимости от значения свойства\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости тултипа\n */\n onShownChange?: (shown: boolean) => void;\n /**\n * Количество миллисекунд, после которых произойдет показ дропдауна\n */\n showDelay?: number;\n /**\n * Количество миллисекунд, после которых произойдет скрытие дропдауна\n */\n hideDelay?: number;\n /**\n * Либо jsx-элемент (div, button, etc.), либо компонент со свойством `getRootRef`, которое применяется к корневому элементу компонента\n */\n children?: React.ReactElement;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n /**\n * Отступ по вспомогательной оси\n */\n offsetSkidding?: number;\n /**\n * Отступ по главной оси\n */\n offsetDistance?: number;\n onPlacementChange?: (data: { placement?: Placement }) => void;\n arrow?: boolean;\n}\n\nexport const RichTooltip: React.FC<RichTooltipProps> = ({ children, arrow = true, ...popperProps }: RichTooltipProps) => {\n const platform = usePlatform();\n const appearance = useAppearance();\n\n return (\n <HoverPopper\n vkuiClass={classNames(getClassName('RichTooltip', platform), {\n [`RichTooltip--${appearance}`]: !!appearance,\n })}\n arrow={arrow}\n arrowClassName={prefixClass('RichTooltip__arrow')}\n {...popperProps}\n >\n {children}\n </HoverPopper>\n );\n};\n"],"file":"RichTooltip.js"}
@@ -55,7 +55,7 @@ var _useExternRef = require("../../hooks/useExternRef");
55
55
 
56
56
  var _usePlatform = require("../../hooks/usePlatform");
57
57
 
58
- var _excluded = ["children", "Component", "onClick", "onKeyDown", "activeEffectDelay", "stopPropagation", "getRootRef", "sizeX", "hasMouse", "hasHover", "hoverMode", "hasActive", "activeMode", "focusVisibleMode"];
58
+ var _excluded = ["children", "Component", "onClick", "onKeyDown", "activeEffectDelay", "stopPropagation", "getRootRef", "sizeX", "hasMouse", "deviceHasHover", "hasHover", "hoverMode", "hasActive", "activeMode", "focusVisibleMode"];
59
59
  var ACTIVE_DELAY = 70;
60
60
  exports.ACTIVE_DELAY = ACTIVE_DELAY;
61
61
  var ACTIVE_EFFECT_DELAY = 600;
@@ -159,8 +159,9 @@ var Tappable = function Tappable(_ref) {
159
159
  getRootRef = _ref.getRootRef,
160
160
  sizeX = _ref.sizeX,
161
161
  hasMouse = _ref.hasMouse,
162
+ deviceHasHover = _ref.deviceHasHover,
162
163
  _ref$hasHover = _ref.hasHover,
163
- _hasHover = _ref$hasHover === void 0 ? _vkjs.hasHover : _ref$hasHover,
164
+ _hasHover = _ref$hasHover === void 0 ? true : _ref$hasHover,
164
165
  _ref$hoverMode = _ref.hoverMode,
165
166
  hoverMode = _ref$hoverMode === void 0 ? 'background' : _ref$hoverMode,
166
167
  _ref$hasActive = _ref.hasActive,
@@ -196,7 +197,7 @@ var Tappable = function Tappable(_ref) {
196
197
 
197
198
  var hovered = _hovered && !props.disabled;
198
199
  var hasActive = _hasActive && !childHover && !props.disabled;
199
- var hasHover = _hasHover && !childHover;
200
+ var hasHover = deviceHasHover && _hasHover && !childHover;
200
201
  var isCustomElement = Component !== 'a' && Component !== 'button' && !props.contentEditable;
201
202
  var isPresetHoverMode = ['opacity', 'background'].includes(hoverMode);
202
203
  var isPresetActiveMode = ['opacity', 'background'].includes(activeMode);
@@ -350,7 +351,8 @@ var Tappable = function Tappable(_ref) {
350
351
 
351
352
  var _default = (0, _withAdaptivity.withAdaptivity)(Tappable, {
352
353
  sizeX: true,
353
- hasMouse: true
354
+ hasMouse: true,
355
+ deviceHasHover: true
354
356
  });
355
357
 
356
358
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tappable/Tappable.tsx"],"names":["ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","none","pending","active","exiting","TappableContext","React","createContext","onHoverChange","noop","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","sizeX","hasMouse","hasHover","_hasHover","deviceHasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","props","href","useContext","insideTouchRoot","TouchRootContext","platform","clicks","setClicks","childHover","setChildHover","_hovered","setHovered","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","includes","isPresetActiveMode","containerRef","childContext","useRef","current","e","preventDefault","click","onStart","originalEvent","touches","length","ANDROID","top","left","x","y","Date","now","onMove","isSlide","onEnd","duration","activeDuraion","classes","handlers","role","undefined","map","wave","filter","c","Wave","onClear","timeout","useEffect"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport mitt from 'mitt';\nimport { hasHover as deviceHasHover, noop } from '@vkontakte/vkjs';\nimport { Touch, TouchEvent, TouchProps } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { ANDROID } from '../../lib/platform';\nimport { getOffsetRect } from '../../lib/offset';\nimport { coordX, coordY } from '../../lib/touch';\nimport { HasComponent, HasRootRef } from '../../types';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { shouldTriggerClickOnEnterOrSpace } from '../../lib/accessibility';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { FocusVisible, FocusVisibleMode } from '../FocusVisible/FocusVisible';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './Tappable.css';\n\nexport interface TappableProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement>, AdaptivityProps, HasComponent {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: 'opacity' | 'background' | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: 'opacity' | 'background' | string;\n /**\n * Стиль аутлайна focus visible.\n */\n focusVisibleMode?: FocusVisibleMode;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: string;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({ onHoverChange: noop });\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(() => Math.round(Math.random() * 1e8).toString(16), []);\n\n const [activity, setActivity] = React.useState<typeof TapState[keyof typeof TapState]>(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit('active', id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on('active', onActiveChange);\n return () => activeBus.off('active', onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\nconst Tappable: React.FC<TappableProps> = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n sizeX,\n hasMouse,\n hasHover: _hasHover = deviceHasHover,\n hoverMode = 'background',\n hasActive: _hasActive = true,\n activeMode = 'background',\n focusVisibleMode = 'inside',\n ...props\n}: TappableProps) => {\n Component = Component || (props.href ? 'a' : 'div') as React.ElementType;\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const [_hovered, setHovered] = React.useState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = _hasHover && !childHover;\n const isCustomElement = Component !== 'a' && Component !== 'button' && !props.contentEditable;\n const isPresetHoverMode = ['opacity', 'background'].includes(hoverMode);\n const isPresetActiveMode = ['opacity', 'background'].includes(activeMode);\n\n const [activity, { start, stop, delayStart }] = useActivity(hasActive, activeEffectDelay);\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current.click();\n }\n\n if (typeof _onKeyDown === 'function') {\n return _onKeyDown(e);\n }\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (platform === ANDROID) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - left;\n const y = coordY(originalEvent) - top;\n setClicks([...clicks, { x, y, id: Date.now().toString() }]);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuraion = duration - ACTIVE_DELAY;\n stop(activeDuraion >= 100 ? 0 : activeEffectDelay - activeDuraion);\n }\n\n const classes = classNames(\n getClassName('Tappable', platform),\n `Tappable--sizeX-${sizeX}`,\n {\n 'Tappable--active': hasActive && active,\n 'Tappable--mouse': hasMouse,\n [`Tappable--hover-${hoverMode}`]: hasHover && hovered && isPresetHoverMode,\n [`Tappable--active-${activeMode}`]: hasActive && active && isPresetActiveMode,\n [hoverMode]: hasHover && hovered && !isPresetHoverMode,\n [activeMode]: hasActive && active && !isPresetActiveMode,\n });\n\n const handlers: RootComponentProps = { onStart, onMove, onEnd, onClick, onKeyDown };\n const role = props.href ? 'link' : 'button';\n\n return (\n <Touch\n onEnter={() => setHovered(true)}\n onLeave={() => setHovered(false)}\n type={Component === 'button' ? 'button' : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : null}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n vkuiClass={classes}\n Component={Component}\n getRootRef={containerRef}\n {...(props.disabled ? {} : handlers)}>\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {platform === ANDROID && !hasMouse && hasActive && activeMode === 'background' && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__waves\">\n {clicks.map((wave) => (\n <Wave {...wave} key={wave.id} onClear={() => setClicks(clicks.filter((c) => c.id !== wave.id))} />\n ))}\n </span>\n )}\n {hasHover && hoverMode === 'background' && <span aria-hidden=\"true\" vkuiClass=\"Tappable__hoverShadow\" />}\n {!props.disabled && <FocusVisible mode={focusVisibleMode} />}\n </Touch>\n );\n};\n\nexport default withAdaptivity(Tappable, { sizeX: true, hasMouse: true });\n\nfunction Wave({ x, y, onClear }: Wave & { onClear: VoidFunction }) {\n const timeout = useTimeout(onClear, 225);\n React.useEffect(() => timeout.set(), []);\n return <span vkuiClass=\"Tappable__wave\" style={{ top: y, left: x }} />;\n}\n"],"file":"Tappable.js"}
1
+ {"version":3,"sources":["../../../../src/components/Tappable/Tappable.tsx"],"names":["ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","TapState","none","pending","active","exiting","TappableContext","React","createContext","onHoverChange","noop","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","stopTimeout","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","sizeX","hasMouse","deviceHasHover","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","props","href","useContext","insideTouchRoot","TouchRootContext","platform","clicks","setClicks","childHover","setChildHover","_hovered","setHovered","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","includes","isPresetActiveMode","containerRef","childContext","useRef","current","e","preventDefault","click","onStart","originalEvent","touches","length","ANDROID","top","left","x","y","Date","now","onMove","isSlide","onEnd","duration","activeDuraion","classes","handlers","role","undefined","map","wave","filter","c","Wave","onClear","timeout","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;AAyCO,IAAMA,YAAY,GAAG,EAArB;;AACA,IAAMC,mBAAmB,GAAG,GAA5B;;AAEP,IAAMC,SAAS,GAAG,oBAAlB;AACA,IAAMC,QAAQ,GAAG;AAAEC,EAAAA,IAAI,EAAE,CAAR;AAAWC,EAAAA,OAAO,EAAE,CAApB;AAAuBC,EAAAA,MAAM,EAAE,CAA/B;AAAkCC,EAAAA,OAAO,EAAE;AAA3C,CAAjB;AAGA,IAAMC,eAAe,gBAAGC,KAAK,CAACC,aAAN,CAA8C;AAAEC,EAAAA,aAAa,EAAEC;AAAjB,CAA9C,CAAxB;;AAEA,SAASC,WAAT,CAAqBC,SAArB,EAAyCC,SAAzC,EAA4D;AAC1D,MAAMC,EAAE,GAAGP,KAAK,CAACQ,OAAN,CAAc;AAAA,WAAMC,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,GAA3B,EAAgCC,QAAhC,CAAyC,EAAzC,CAAN;AAAA,GAAd,EAAkE,EAAlE,CAAX;;AAEA,wBAAgCZ,KAAK,CAACa,QAAN,CAAuDnB,QAAQ,CAACC,IAAhE,CAAhC;AAAA;AAAA,MAAOmB,QAAP;AAAA,MAAiBC,WAAjB;;AACA,MAAMC,KAAK,GAAG,SAARA,KAAQ;AAAA,WAAMD,WAAW,CAACrB,QAAQ,CAACC,IAAV,CAAjB;AAAA,GAAd;;AACA,MAAMsB,KAAK,GAAG,SAARA,KAAQ;AAAA,WAAMZ,SAAS,IAAIU,WAAW,CAACrB,QAAQ,CAACG,MAAV,CAA9B;AAAA,GAAd;;AACA,MAAMqB,UAAU,GAAG,SAAbA,UAAa,GAAM;AACvBb,IAAAA,SAAS,IAAIU,WAAW,CAACrB,QAAQ,CAACE,OAAV,CAAxB;AACD,GAFD;;AAIA,MAAMuB,aAAa,GAAG,4BAAWF,KAAX,EAAkB1B,YAAlB,CAAtB;AACA,MAAM6B,WAAW,GAAG,4BAAWJ,KAAX,EAAkBV,SAAlB,CAApB;AAEA,4DAA0B,YAAM;AAC9B,QAAIQ,QAAQ,KAAKpB,QAAQ,CAACE,OAA1B,EAAmC;AACjCuB,MAAAA,aAAa,CAACE,GAAd;AACA,aAAOF,aAAa,CAACG,KAArB;AACD;;AACD,QAAIR,QAAQ,KAAKpB,QAAQ,CAACI,OAA1B,EAAmC;AACjC,aAAOsB,WAAW,CAACE,KAAnB;AACD;;AACD,QAAIR,QAAQ,KAAKpB,QAAQ,CAACG,MAA1B,EAAkC;AAChCJ,MAAAA,SAAS,CAAC8B,IAAV,CAAe,QAAf,EAAyBhB,EAAzB;AACD;;AACD,WAAOJ,UAAP;AACD,GAZD,EAYG,CAACW,QAAD,CAZH;AAcA,4DAA0B,YAAM;AAC9B,QAAIA,QAAQ,KAAKpB,QAAQ,CAACC,IAA1B,EAAgC;AAC9B,aAAOQ,UAAP;AACD;;AACD,QAAMqB,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAsB;AAC3CA,MAAAA,QAAQ,KAAKlB,EAAb,IAAmBS,KAAK,EAAxB;AACD,KAFD;;AAGAvB,IAAAA,SAAS,CAACiC,EAAV,CAAa,QAAb,EAAuBF,cAAvB;AACA,WAAO;AAAA,aAAM/B,SAAS,CAACkC,GAAV,CAAc,QAAd,EAAwBH,cAAxB,CAAN;AAAA,KAAP;AACD,GATD,EASG,CAACV,QAAQ,KAAKpB,QAAQ,CAACC,IAAvB,CATH;AAWA,4DAA0B,YAAM;AAC9B,KAACU,SAAD,IAAcW,KAAK,EAAnB;AACD,GAFD,EAEG,CAACX,SAAD,CAFH;;AAIA,MAAMuB,IAAI,GAAG,SAAPA,IAAO,CAACC,KAAD,EAAoB;AAC/B,QAAIA,KAAJ,EAAW;AACTd,MAAAA,WAAW,CAACrB,QAAQ,CAACI,OAAV,CAAX;AACA,aAAOsB,WAAW,CAACC,GAAZ,CAAgBQ,KAAhB,CAAP;AACD;;AACDb,IAAAA,KAAK;AACN,GAND;;AAQA,SAAO,CAACF,QAAD,EAAW;AAAEI,IAAAA,UAAU,EAAVA,UAAF;AAAcD,IAAAA,KAAK,EAALA,KAAd;AAAqBW,IAAAA,IAAI,EAAJA;AAArB,GAAX,CAAP;AACD;;AAED,IAAME,QAAiC,GAAG,SAApCA,QAAoC,OAiBrB;AAAA;;AAAA,MAhBnBC,QAgBmB,QAhBnBA,QAgBmB;AAAA,MAfnBC,SAemB,QAfnBA,SAemB;AAAA,MAdnBC,OAcmB,QAdnBA,OAcmB;AAAA,MAbRC,UAaQ,QAbnBC,SAamB;AAAA,mCAZnBC,iBAYmB;AAAA,MAZnBA,iBAYmB,sCAZC5C,mBAYD;AAAA,kCAXnB6C,eAWmB;AAAA,MAXnBA,eAWmB,qCAXD,KAWC;AAAA,MAVnBC,UAUmB,QAVnBA,UAUmB;AAAA,MATnBC,KASmB,QATnBA,KASmB;AAAA,MARnBC,QAQmB,QARnBA,QAQmB;AAAA,MAPnBC,cAOmB,QAPnBA,cAOmB;AAAA,2BANnBC,QAMmB;AAAA,MANTC,SAMS,8BANG,IAMH;AAAA,4BALnBC,SAKmB;AAAA,MALnBA,SAKmB,+BALP,YAKO;AAAA,4BAJnBvC,SAImB;AAAA,MAJRwC,UAIQ,+BAJK,IAIL;AAAA,6BAHnBC,UAGmB;AAAA,MAHnBA,UAGmB,gCAHN,YAGM;AAAA,mCAFnBC,gBAEmB;AAAA,MAFnBA,gBAEmB,sCAFA,QAEA;AAAA,MADhBC,KACgB;;AACnBhB,EAAAA,SAAS,GAAGA,SAAS,KAAKgB,KAAK,CAACC,IAAN,GAAa,GAAb,GAAmB,KAAxB,CAArB;;AAEA,0BAA0BjD,KAAK,CAACkD,UAAN,CAAiBnD,eAAjB,CAA1B;AAAA,MAAQG,aAAR,qBAAQA,aAAR;;AACA,MAAMiD,eAAe,GAAGnD,KAAK,CAACkD,UAAN,CAAiBE,qBAAjB,CAAxB;AACA,MAAMC,QAAQ,GAAG,+BAAjB;;AAEA,yBAA4BrD,KAAK,CAACa,QAAN,CAAuB,EAAvB,CAA5B;AAAA;AAAA,MAAOyC,MAAP;AAAA,MAAeC,SAAf;;AACA,yBAAoCvD,KAAK,CAACa,QAAN,CAAe,KAAf,CAApC;AAAA;AAAA,MAAO2C,UAAP;AAAA,MAAmBC,aAAnB;;AACA,yBAA+BzD,KAAK,CAACa,QAAN,CAAe,KAAf,CAA/B;AAAA;AAAA,MAAO6C,QAAP;AAAA,MAAiBC,UAAjB;;AAEA,MAAMC,OAAO,GAAGF,QAAQ,IAAI,CAACV,KAAK,CAACa,QAAnC;AACA,MAAMxD,SAAS,GAAGwC,UAAU,IAAI,CAACW,UAAf,IAA6B,CAACR,KAAK,CAACa,QAAtD;AACA,MAAMnB,QAAQ,GAAGD,cAAc,IAAIE,SAAlB,IAA+B,CAACa,UAAjD;AACA,MAAMM,eAAe,GAAG9B,SAAS,KAAK,GAAd,IAAqBA,SAAS,KAAK,QAAnC,IAA+C,CAACgB,KAAK,CAACe,eAA9E;AACA,MAAMC,iBAAiB,GAAG,CAAC,SAAD,EAAY,YAAZ,EAA0BC,QAA1B,CAAmCrB,SAAnC,CAA1B;AACA,MAAMsB,kBAAkB,GAAG,CAAC,SAAD,EAAY,YAAZ,EAA0BD,QAA1B,CAAmCnB,UAAnC,CAA3B;;AAEA,qBAAgD1C,WAAW,CAACC,SAAD,EAAY+B,iBAAZ,CAA3D;AAAA;AAAA,MAAOtB,QAAP;AAAA;AAAA,MAAmBG,KAAnB,kBAAmBA,KAAnB;AAAA,MAA0BW,IAA1B,kBAA0BA,IAA1B;AAAA,MAAgCV,UAAhC,kBAAgCA,UAAhC;;AACA,MAAMrB,MAAM,GAAGiB,QAAQ,KAAKpB,QAAQ,CAACG,MAAtB,IAAgCiB,QAAQ,KAAKpB,QAAQ,CAACI,OAArE;AAEA,MAAMqE,YAAY,GAAG,gCAAa7B,UAAb,CAArB,CArBmB,CAuBnB;;AACA,MAAM8B,YAAY,GAAGpE,KAAK,CAACqE,MAAN,CAAa;AAAEnE,IAAAA,aAAa,EAAEuD;AAAjB,GAAb,EAA+Ca,OAApE;AACA,4DAA0B,YAAM;AAC9B,QAAI,CAACV,OAAL,EAAc;AACZ,aAAOzD,UAAP;AACD;;AACDD,IAAAA,aAAa,CAAC,IAAD,CAAb;AACA,WAAO;AAAA,aAAMA,aAAa,CAAC,KAAD,CAAnB;AAAA,KAAP;AACD,GAND,EAMG,CAAC0D,OAAD,CANH;AAQA;AACF;AACA;AACA;AACA;AACA;AACA;;AACE,WAASzB,SAAT,CAAmBoC,CAAnB,EAAwD;AACtD,QAAIT,eAAe,IAAI,qDAAiCS,CAAjC,CAAvB,EAA4D;AAC1DA,MAAAA,CAAC,CAACC,cAAF;AACAL,MAAAA,YAAY,CAACG,OAAb,CAAqBG,KAArB;AACD;;AAED,QAAI,OAAOvC,UAAP,KAAsB,UAA1B,EAAsC;AACpC,aAAOA,UAAU,CAACqC,CAAD,CAAjB;AACD;AACF;;AAED,WAASG,OAAT,QAAgD;AAAA,QAA7BC,aAA6B,SAA7BA,aAA6B;;AAC9C,QAAItE,SAAJ,EAAe;AACb,UAAIsE,aAAa,CAACC,OAAd,IAAyBD,aAAa,CAACC,OAAd,CAAsBC,MAAtB,GAA+B,CAA5D,EAA+D;AAC7D;AACA,eAAOjD,IAAI,EAAX;AACD;;AAED,UAAIyB,QAAQ,KAAKyB,iBAAjB,EAA0B;AACxB,6BAAsB,2BAAcX,YAAY,CAACG,OAA3B,CAAtB;AAAA,YAAQS,GAAR,kBAAQA,GAAR;AAAA,YAAaC,IAAb,kBAAaA,IAAb;;AACA,YAAMC,CAAC,GAAG,mBAAON,aAAP,IAAwBK,IAAlC;AACA,YAAME,CAAC,GAAG,mBAAOP,aAAP,IAAwBI,GAAlC;AACAxB,QAAAA,SAAS,4CAAKD,MAAL,IAAa;AAAE2B,UAAAA,CAAC,EAADA,CAAF;AAAKC,UAAAA,CAAC,EAADA,CAAL;AAAQ3E,UAAAA,EAAE,EAAE4E,IAAI,CAACC,GAAL,GAAWxE,QAAX;AAAZ,SAAb,GAAT;AACD;;AAEDM,MAAAA,UAAU;AACX;AACF;;AAED,WAASmE,MAAT,QAAyC;AAAA,QAAvBC,OAAuB,SAAvBA,OAAuB;;AACvC,QAAIA,OAAJ,EAAa;AACX1D,MAAAA,IAAI;AACL;AACF;;AAED,WAAS2D,KAAT,QAAyC;AAAA,QAAxBC,QAAwB,SAAxBA,QAAwB;;AACvC,QAAI1E,QAAQ,KAAKpB,QAAQ,CAACC,IAA1B,EAAgC;AAC9B;AACD;;AACD,QAAImB,QAAQ,KAAKpB,QAAQ,CAACE,OAA1B,EAAmC;AACjC;AACAqB,MAAAA,KAAK;AACN,KAPsC,CASvC;;;AACA,QAAMwE,aAAa,GAAGD,QAAQ,GAAGjG,YAAjC;AACAqC,IAAAA,IAAI,CAAC6D,aAAa,IAAI,GAAjB,GAAuB,CAAvB,GAA2BrD,iBAAiB,GAAGqD,aAAhD,CAAJ;AACD;;AAED,MAAMC,OAAO,GAAG,6BACd,gCAAa,UAAb,EAAyBrC,QAAzB,CADc,4BAEKd,KAFL;AAIZ,wBAAoBlC,SAAS,IAAIR,MAJrB;AAKZ,uBAAmB2C;AALP,0EAMQI,SANR,GAMsBF,QAAQ,IAAIkB,OAAZ,IAAuBI,iBAN7C,yEAOSlB,UAPT,GAOwBzC,SAAS,IAAIR,MAAb,IAAuBqE,kBAP/C,8CAQXtB,SARW,EAQCF,QAAQ,IAAIkB,OAAZ,IAAuB,CAACI,iBARzB,8CASXlB,UATW,EASEzC,SAAS,IAAIR,MAAb,IAAuB,CAACqE,kBAT1B,gBAAhB;AAYA,MAAMyB,QAA4B,GAAG;AAAEjB,IAAAA,OAAO,EAAPA,OAAF;AAAWW,IAAAA,MAAM,EAANA,MAAX;AAAmBE,IAAAA,KAAK,EAALA,KAAnB;AAA0BtD,IAAAA,OAAO,EAAPA,OAA1B;AAAmCE,IAAAA,SAAS,EAATA;AAAnC,GAArC;AACA,MAAMyD,IAAI,GAAG5C,KAAK,CAACC,IAAN,GAAa,MAAb,GAAsB,QAAnC;AAEA,SACE,qCAAC,YAAD;AACE,IAAA,OAAO,EAAE;AAAA,aAAMU,UAAU,CAAC,IAAD,CAAhB;AAAA,KADX;AAEE,IAAA,OAAO,EAAE;AAAA,aAAMA,UAAU,CAAC,KAAD,CAAhB;AAAA,KAFX;AAGE,IAAA,IAAI,EAAE3B,SAAS,KAAK,QAAd,GAAyB,QAAzB,GAAoC6D,SAH5C;AAIE,IAAA,QAAQ,EAAE/B,eAAe,IAAI,CAACd,KAAK,CAACa,QAA1B,GAAqC,CAArC,GAAyCgC,SAJrD;AAKE,IAAA,IAAI,EAAE/B,eAAe,GAAG8B,IAAH,GAAUC,SALjC;AAME,qBAAe/B,eAAe,GAAGd,KAAK,CAACa,QAAT,GAAoB,IANpD;AAOE,IAAA,eAAe,EAAExB,eAAe,IAAI,CAACc,eAApB,IAAuC,CAACH,KAAK,CAACa;AAPjE,KAQMb,KARN;AASE,IAAA,cAAc,EAAE,EATlB;AAUE,IAAA,eAAe,MAVjB;AAWE,IAAA,SAAS,EAAE0C,OAXb;AAYE,IAAA,SAAS,EAAE1D,SAZb;AAaE,IAAA,UAAU,EAAEmC;AAbd,KAcOnB,KAAK,CAACa,QAAN,GAAiB,EAAjB,GAAsB8B,QAd7B,GAeE,qCAAC,eAAD,CAAiB,QAAjB;AAA0B,IAAA,KAAK,EAAEvB;AAAjC,KACGrC,QADH,CAfF,EAkBGsB,QAAQ,KAAKyB,iBAAb,IAAwB,CAACtC,QAAzB,IAAqCnC,SAArC,IAAkDyC,UAAU,KAAK,YAAjE,IACC;AAAM,mBAAY,MAAlB;AAAyB,IAAA,SAAS,EAAC;AAAnC,KACGQ,MAAM,CAACwC,GAAP,CAAW,UAACC,IAAD;AAAA,WACV,qCAAC,IAAD,6BAAUA,IAAV;AAAgB,MAAA,GAAG,EAAEA,IAAI,CAACxF,EAA1B;AAA8B,MAAA,OAAO,EAAE;AAAA,eAAMgD,SAAS,CAACD,MAAM,CAAC0C,MAAP,CAAc,UAACC,CAAD;AAAA,iBAAOA,CAAC,CAAC1F,EAAF,KAASwF,IAAI,CAACxF,EAArB;AAAA,SAAd,CAAD,CAAf;AAAA;AAAvC,OADU;AAAA,GAAX,CADH,CAnBJ,EAyBGmC,QAAQ,IAAIE,SAAS,KAAK,YAA1B,IAA0C;AAAM,mBAAY,MAAlB;AAAyB,IAAA,SAAS,EAAC;AAAnC,IAzB7C,EA0BG,CAACI,KAAK,CAACa,QAAP,IAAmB,qCAAC,0BAAD;AAAc,IAAA,IAAI,EAAEd;AAApB,IA1BtB,CADF;AA8BD,CAvJD;;eAyJe,oCAAejB,QAAf,EAAyB;AAAES,EAAAA,KAAK,EAAE,IAAT;AAAeC,EAAAA,QAAQ,EAAE,IAAzB;AAA+BC,EAAAA,cAAc,EAAE;AAA/C,CAAzB,C;;;;AAEf,SAASyD,IAAT,QAAmE;AAAA,MAAnDjB,CAAmD,SAAnDA,CAAmD;AAAA,MAAhDC,CAAgD,SAAhDA,CAAgD;AAAA,MAA7CiB,OAA6C,SAA7CA,OAA6C;AACjE,MAAMC,OAAO,GAAG,4BAAWD,OAAX,EAAoB,GAApB,CAAhB;AACAnG,EAAAA,KAAK,CAACqG,SAAN,CAAgB;AAAA,WAAMD,OAAO,CAAC/E,GAAR,EAAN;AAAA,GAAhB,EAAqC,EAArC;AACA,SAAO;AAAM,IAAA,SAAS,EAAC,gBAAhB;AAAiC,IAAA,KAAK,EAAE;AAAE0D,MAAAA,GAAG,EAAEG,CAAP;AAAUF,MAAAA,IAAI,EAAEC;AAAhB;AAAxC,IAAP;AACD","sourcesContent":["import * as React from 'react';\nimport mitt from 'mitt';\nimport { noop } from '@vkontakte/vkjs';\nimport { Touch, TouchEvent, TouchProps } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { ANDROID } from '../../lib/platform';\nimport { getOffsetRect } from '../../lib/offset';\nimport { coordX, coordY } from '../../lib/touch';\nimport { HasComponent, HasRootRef } from '../../types';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { shouldTriggerClickOnEnterOrSpace } from '../../lib/accessibility';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { FocusVisible, FocusVisibleMode } from '../FocusVisible/FocusVisible';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './Tappable.css';\n\nexport interface TappableProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement>, AdaptivityProps, HasComponent {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: 'opacity' | 'background' | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: 'opacity' | 'background' | string;\n /**\n * Стиль аутлайна focus visible.\n */\n focusVisibleMode?: FocusVisibleMode;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: string;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({ onHoverChange: noop });\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(() => Math.round(Math.random() * 1e8).toString(16), []);\n\n const [activity, setActivity] = React.useState<typeof TapState[keyof typeof TapState]>(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit('active', id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on('active', onActiveChange);\n return () => activeBus.off('active', onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\nconst Tappable: React.FC<TappableProps> = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n sizeX,\n hasMouse,\n deviceHasHover,\n hasHover: _hasHover = true,\n hoverMode = 'background',\n hasActive: _hasActive = true,\n activeMode = 'background',\n focusVisibleMode = 'inside',\n ...props\n}: TappableProps) => {\n Component = Component || (props.href ? 'a' : 'div') as React.ElementType;\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const [_hovered, setHovered] = React.useState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = deviceHasHover && _hasHover && !childHover;\n const isCustomElement = Component !== 'a' && Component !== 'button' && !props.contentEditable;\n const isPresetHoverMode = ['opacity', 'background'].includes(hoverMode);\n const isPresetActiveMode = ['opacity', 'background'].includes(activeMode);\n\n const [activity, { start, stop, delayStart }] = useActivity(hasActive, activeEffectDelay);\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current.click();\n }\n\n if (typeof _onKeyDown === 'function') {\n return _onKeyDown(e);\n }\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (platform === ANDROID) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - left;\n const y = coordY(originalEvent) - top;\n setClicks([...clicks, { x, y, id: Date.now().toString() }]);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuraion = duration - ACTIVE_DELAY;\n stop(activeDuraion >= 100 ? 0 : activeEffectDelay - activeDuraion);\n }\n\n const classes = classNames(\n getClassName('Tappable', platform),\n `Tappable--sizeX-${sizeX}`,\n {\n 'Tappable--active': hasActive && active,\n 'Tappable--mouse': hasMouse,\n [`Tappable--hover-${hoverMode}`]: hasHover && hovered && isPresetHoverMode,\n [`Tappable--active-${activeMode}`]: hasActive && active && isPresetActiveMode,\n [hoverMode]: hasHover && hovered && !isPresetHoverMode,\n [activeMode]: hasActive && active && !isPresetActiveMode,\n });\n\n const handlers: RootComponentProps = { onStart, onMove, onEnd, onClick, onKeyDown };\n const role = props.href ? 'link' : 'button';\n\n return (\n <Touch\n onEnter={() => setHovered(true)}\n onLeave={() => setHovered(false)}\n type={Component === 'button' ? 'button' : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : null}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n vkuiClass={classes}\n Component={Component}\n getRootRef={containerRef}\n {...(props.disabled ? {} : handlers)}>\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {platform === ANDROID && !hasMouse && hasActive && activeMode === 'background' && (\n <span aria-hidden=\"true\" vkuiClass=\"Tappable__waves\">\n {clicks.map((wave) => (\n <Wave {...wave} key={wave.id} onClear={() => setClicks(clicks.filter((c) => c.id !== wave.id))} />\n ))}\n </span>\n )}\n {hasHover && hoverMode === 'background' && <span aria-hidden=\"true\" vkuiClass=\"Tappable__hoverShadow\" />}\n {!props.disabled && <FocusVisible mode={focusVisibleMode} />}\n </Touch>\n );\n};\n\nexport default withAdaptivity(Tappable, { sizeX: true, hasMouse: true, deviceHasHover: true });\n\nfunction Wave({ x, y, onClear }: Wave & { onClear: VoidFunction }) {\n const timeout = useTimeout(onClear, 225);\n React.useEffect(() => timeout.set(), []);\n return <span vkuiClass=\"Tappable__wave\" style={{ top: y, left: x }} />;\n}\n"],"file":"Tappable.js"}