@vkontakte/vkui 5.6.2 → 5.7.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 (165) hide show
  1. package/dist/cjs/components/ActionSheet/ActionSheet.d.ts +4 -4
  2. package/dist/cjs/components/ActionSheet/ActionSheet.js +14 -4
  3. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  5. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  6. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  7. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  8. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  9. package/dist/cjs/components/ActionSheet/types.d.ts +9 -0
  10. package/dist/cjs/components/ActionSheet/types.js.map +1 -1
  11. package/dist/cjs/components/Alert/Alert.d.ts +8 -3
  12. package/dist/cjs/components/Alert/Alert.js +16 -96
  13. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  14. package/dist/cjs/components/Alert/AlertAction.d.ts +8 -0
  15. package/dist/cjs/components/Alert/AlertAction.js +52 -0
  16. package/dist/cjs/components/Alert/AlertAction.js.map +1 -0
  17. package/dist/cjs/components/Alert/AlertActions.d.ts +8 -0
  18. package/dist/cjs/components/Alert/AlertActions.js +54 -0
  19. package/dist/cjs/components/Alert/AlertActions.js.map +1 -0
  20. package/dist/cjs/components/Alert/AlertTypography.d.ts +8 -0
  21. package/dist/cjs/components/Alert/AlertTypography.js +65 -0
  22. package/dist/cjs/components/Alert/AlertTypography.js.map +1 -0
  23. package/dist/cjs/components/NativeSelect/NativeSelect.js +3 -1
  24. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  25. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js +1 -1
  26. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  27. package/dist/cjs/components/Popover/Popover.js +1 -1
  28. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  29. package/dist/cjs/components/PopperArrow/PopperArrow.d.ts +1 -2
  30. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -1
  31. package/dist/cjs/components/Progress/Progress.d.ts +5 -1
  32. package/dist/cjs/components/Progress/Progress.js +18 -3
  33. package/dist/cjs/components/Progress/Progress.js.map +1 -1
  34. package/dist/cjs/components/Root/Root.js +4 -4
  35. package/dist/cjs/components/Search/Search.d.ts +5 -1
  36. package/dist/cjs/components/Search/Search.js +10 -4
  37. package/dist/cjs/components/Search/Search.js.map +1 -1
  38. package/dist/cjs/components/Snackbar/Snackbar.d.ts +5 -1
  39. package/dist/cjs/components/Snackbar/Snackbar.js +8 -3
  40. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  41. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  42. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +17 -10
  43. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  44. package/dist/cjs/components/Tooltip/Tooltip.d.ts +3 -37
  45. package/dist/cjs/components/Tooltip/Tooltip.js +14 -39
  46. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  47. package/dist/cjs/components/TooltipBase/TooltipBase.d.ts +49 -0
  48. package/dist/cjs/components/TooltipBase/TooltipBase.js +58 -0
  49. package/dist/cjs/components/TooltipBase/TooltipBase.js.map +1 -0
  50. package/dist/cjs/components/View/View.js +4 -4
  51. package/dist/cjs/components/View/ViewInfinite.js +4 -4
  52. package/dist/components/ActionSheet/ActionSheet.d.ts +4 -4
  53. package/dist/components/ActionSheet/ActionSheet.js +14 -4
  54. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  55. package/dist/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  56. package/dist/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  57. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  58. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  59. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  60. package/dist/components/ActionSheet/types.d.ts +9 -0
  61. package/dist/components/ActionSheet/types.js.map +1 -1
  62. package/dist/components/Alert/Alert.d.ts +8 -3
  63. package/dist/components/Alert/Alert.js +14 -94
  64. package/dist/components/Alert/Alert.js.map +1 -1
  65. package/dist/components/Alert/AlertAction.d.ts +8 -0
  66. package/dist/components/Alert/AlertAction.js +41 -0
  67. package/dist/components/Alert/AlertAction.js.map +1 -0
  68. package/dist/components/Alert/AlertActions.d.ts +8 -0
  69. package/dist/components/Alert/AlertActions.js +43 -0
  70. package/dist/components/Alert/AlertActions.js.map +1 -0
  71. package/dist/components/Alert/AlertTypography.d.ts +8 -0
  72. package/dist/components/Alert/AlertTypography.js +46 -0
  73. package/dist/components/Alert/AlertTypography.js.map +1 -0
  74. package/dist/components/NativeSelect/NativeSelect.js +3 -1
  75. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  76. package/dist/components/PopoutWrapper/PopoutWrapper.js +1 -1
  77. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  78. package/dist/components/Popover/Popover.js +1 -1
  79. package/dist/components/Popover/Popover.js.map +1 -1
  80. package/dist/components/PopperArrow/PopperArrow.d.ts +1 -2
  81. package/dist/components/PopperArrow/PopperArrow.js.map +1 -1
  82. package/dist/components/Progress/Progress.d.ts +5 -1
  83. package/dist/components/Progress/Progress.js +18 -3
  84. package/dist/components/Progress/Progress.js.map +1 -1
  85. package/dist/components/Root/Root.js +4 -4
  86. package/dist/components/Search/Search.d.ts +5 -1
  87. package/dist/components/Search/Search.js +10 -4
  88. package/dist/components/Search/Search.js.map +1 -1
  89. package/dist/components/Snackbar/Snackbar.d.ts +5 -1
  90. package/dist/components/Snackbar/Snackbar.js +8 -3
  91. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  92. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  93. package/dist/components/SubnavigationButton/SubnavigationButton.js +17 -10
  94. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  95. package/dist/components/Tooltip/Tooltip.d.ts +3 -37
  96. package/dist/components/Tooltip/Tooltip.js +15 -40
  97. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  98. package/dist/components/TooltipBase/TooltipBase.d.ts +49 -0
  99. package/dist/components/TooltipBase/TooltipBase.js +51 -0
  100. package/dist/components/TooltipBase/TooltipBase.js.map +1 -0
  101. package/dist/components/View/View.js +4 -4
  102. package/dist/components/View/ViewInfinite.js +4 -4
  103. package/dist/components.css +10 -9
  104. package/dist/components.css.map +1 -1
  105. package/dist/components.js.tmp +1490 -1085
  106. package/dist/cssm/components/ActionSheet/ActionSheet.d.ts +4 -4
  107. package/dist/cssm/components/ActionSheet/ActionSheet.js +12 -3
  108. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  109. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +0 -1
  110. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  111. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  112. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  113. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js +3 -2
  114. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  115. package/dist/cssm/components/ActionSheet/types.d.ts +9 -0
  116. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  117. package/dist/cssm/components/Alert/Alert.d.ts +8 -3
  118. package/dist/cssm/components/Alert/Alert.js +11 -87
  119. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  120. package/dist/cssm/components/Alert/Alert.module.css +36 -30
  121. package/dist/cssm/components/Alert/AlertAction.d.ts +8 -0
  122. package/dist/cssm/components/Alert/AlertAction.js +36 -0
  123. package/dist/cssm/components/Alert/AlertAction.js.map +1 -0
  124. package/dist/cssm/components/Alert/AlertActions.d.ts +8 -0
  125. package/dist/cssm/components/Alert/AlertActions.js +34 -0
  126. package/dist/cssm/components/Alert/AlertActions.js.map +1 -0
  127. package/dist/cssm/components/Alert/AlertTypography.d.ts +8 -0
  128. package/dist/cssm/components/Alert/AlertTypography.js +51 -0
  129. package/dist/cssm/components/Alert/AlertTypography.js.map +1 -0
  130. package/dist/cssm/components/Button/Button.module.css +1 -1
  131. package/dist/cssm/components/Link/Link.module.css +1 -0
  132. package/dist/cssm/components/NativeSelect/NativeSelect.js +3 -1
  133. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  134. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +1 -0
  135. package/dist/cssm/components/Popover/Popover.js +1 -1
  136. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  137. package/dist/cssm/components/Popover/Popover.module.css +4 -0
  138. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +1 -2
  139. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -1
  140. package/dist/cssm/components/Progress/Progress.d.ts +5 -1
  141. package/dist/cssm/components/Progress/Progress.js +17 -1
  142. package/dist/cssm/components/Progress/Progress.js.map +1 -1
  143. package/dist/cssm/components/Search/Search.d.ts +5 -1
  144. package/dist/cssm/components/Search/Search.js +8 -3
  145. package/dist/cssm/components/Search/Search.js.map +1 -1
  146. package/dist/cssm/components/Search/Search.module.css +4 -1
  147. package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
  148. package/dist/cssm/components/Snackbar/Snackbar.js +6 -2
  149. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  150. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  151. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +16 -10
  152. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  153. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +25 -4
  154. package/dist/cssm/components/Tooltip/Tooltip.d.ts +3 -37
  155. package/dist/cssm/components/Tooltip/Tooltip.js +13 -33
  156. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  157. package/dist/cssm/components/Tooltip/Tooltip.module.css +3 -53
  158. package/dist/cssm/components/TooltipBase/TooltipBase.d.ts +49 -0
  159. package/dist/cssm/components/TooltipBase/TooltipBase.js +37 -0
  160. package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -0
  161. package/dist/cssm/components/TooltipBase/TooltipBase.module.css +57 -0
  162. package/dist/vkui.css +10 -9
  163. package/dist/vkui.css.map +1 -1
  164. package/dist/vkui.js.tmp +1490 -1085
  165. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n autoUpdateFloatingElement,\n checkIsNotAutoPlacement,\n convertFloatingDataToReactCSSProperties,\n flipMiddleware,\n getAutoPlacementAlign,\n offsetMiddleware,\n type Placement,\n type PlacementWithAuto,\n shiftMiddleware,\n useFloating,\n type UseFloatingMiddleware,\n} from '../../lib/floating';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRootRef } from '../../types';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { DefaultIcon } from '../PopperArrow/DefaultIcon';\nimport { PopperArrow, type PopperArrowProps } from '../PopperArrow/PopperArrow';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { tooltipContainerAttr } from './TooltipContainer';\nimport styles from './Tooltip.module.css';\n\n/**\n * Перебиваем `ref`.\n *\n * В оригинальном `React.DOMElement` задаётся `React.LegacyRef<T>`, в котором есть `string`.\n * Когда как `{ ref: \"string\" }` уже давно депрекейтнут.\n */\ninterface DOMElement<P extends React.HTMLAttributes<T> | React.SVGAttributes<T>, T extends Element>\n extends React.DOMElement<P, T> {\n ref: React.Ref<T>;\n}\n\nconst isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is DOMElement<P, T> => {\n return React.isValidElement(element) && typeof element.type === 'string';\n};\n\nconst warn = warnOnce('Tooltip');\n\nconst stylesAppearance = {\n accent: styles['Tooltip--appearance-accent'],\n white: styles['Tooltip--appearance-white'],\n black: styles['Tooltip--appearance-black'],\n inversion: styles['Tooltip--appearance-inversion'],\n};\n\nexport interface TooltipProps {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children: React.ReactElement<HasRootRef<any>> | React.ReactElement;\n /**\n * Стиль отображения подсказки\n */\n appearance?: 'accent' | 'neutral' | 'white' | 'black' | 'inversion';\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Положение по горизонтали (прижатие к левому или правому краю `children`).\n * Если не задано, позиция по горизонтали определятся автоматически\n */\n alignX?: 'center' | 'left' | 'right';\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: 'top' | 'bottom';\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 4. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n * 5. Если стрелка наезжает на якорный элемент, то увеличьте значение параметра `offsetY`.\n */\n ArrowIcon?: PopperArrowProps['Icon'];\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: PlacementWithAuto;\n /**\n * Пользовательские css-классы, будут добавлены на root-элемент\n */\n className?: string;\n}\n\nfunction mapAlignX(x: TooltipProps['alignX']) {\n switch (x) {\n case 'left':\n return 'start';\n case 'right':\n return 'end';\n default:\n return '';\n }\n}\nfunction getDefaultPlacement(\n alignX: TooltipProps['alignX'],\n alignY: TooltipProps['alignY'],\n): Placement {\n return [alignY || 'bottom', mapAlignX(alignX || 'left')]\n .filter((p) => !!p)\n .join('-') as Placement;\n}\nfunction isVerticalPlacement(placement: PlacementWithAuto) {\n return placement.startsWith('top') || placement.startsWith('bottom');\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: isShownProp = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n appearance = 'accent',\n arrow = true,\n arrowPadding = 14,\n ArrowIcon = DefaultIcon,\n placement: placementProp,\n text,\n header,\n className,\n ...restProps\n}: TooltipProps) => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement | null>(null);\n /* eslint-disable no-restricted-properties */\n const tooltipContainer = React.useMemo(\n () => target?.closest<HTMLDivElement>(`[${tooltipContainerAttr}]`),\n [target],\n );\n const { entering } = useNavTransition();\n const isShown = isShownProp && tooltipContainer && !entering;\n\n const placement = placementProp || getDefaultPlacement(alignX, alignY);\n const isNotAutoPlacement = checkIsNotAutoPlacement(placement);\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n }\n\n const floatingPositionStrategy = React.useMemo(\n () => (target?.style.position === 'fixed' ? 'fixed' : 'absolute'),\n [target],\n );\n\n if (process.env.NODE_ENV === 'development' && target && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n\n const memoizedMiddlewares = React.useMemo(() => {\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetX,\n mainAxis: offsetY,\n }),\n ];\n\n // см. https://floating-ui.com/docs/flip#conflict-with-autoplacement\n if (isNotAutoPlacement) {\n middlewares.push(flipMiddleware());\n } else {\n middlewares.push(\n autoPlacementMiddleware({\n alignment: placement ? getAutoPlacementAlign(placement) : null,\n }),\n );\n }\n\n middlewares.push(shiftMiddleware());\n\n // см. https://floating-ui.com/docs/arrow#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n middlewares.push({\n name: 'arrowOffset',\n fn({ placement, middlewareData }) {\n if (!middlewareData.arrow) {\n return Promise.resolve({});\n }\n if (isVerticalPlacement(placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n middlewareData.arrow.x = cornerAbsoluteOffset;\n } else if (middlewareData.arrow.x !== undefined) {\n middlewareData.arrow.x += cornerOffset;\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n middlewareData.arrow.y = cornerAbsoluteOffset;\n } else if (middlewareData.arrow.y !== undefined) {\n middlewareData.arrow.y += cornerOffset;\n }\n }\n return Promise.resolve({});\n },\n });\n }\n\n return middlewares;\n }, [\n arrow,\n arrowRef,\n arrowPadding,\n cornerAbsoluteOffset,\n cornerOffset,\n offsetX,\n offsetY,\n placement,\n isNotAutoPlacement,\n ]);\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n placement: resolvedPlacement,\n refs,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: floatingPositionStrategy,\n placement: isNotAutoPlacement ? placement : undefined,\n middleware: memoizedMiddlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n\n const { document } = useDOM();\n useGlobalEventListener(document, 'click', isShown && onClose, {\n capture: true,\n passive: true,\n });\n\n const childRef = isDOMTypeElement<React.HTMLAttributes<HTMLElement>, HTMLElement>(children)\n ? children.ref\n : React.isValidElement<HasRootRef<HTMLElement>>(children)\n ? children.props.getRootRef\n : null;\n const patchedRef = useExternRef<HTMLElement>(setTarget, refs.setReference, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? 'ref' : 'getRootRef']: patchedRef,\n })\n : children;\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <div\n {...restProps}\n className={classNames(\n styles['Tooltip'],\n appearance !== 'neutral' && stylesAppearance[appearance],\n className,\n )}\n >\n <div\n ref={refs.setFloating}\n style={convertFloatingDataToReactCSSProperties(\n floatingPositionStrategy,\n floatingDataX,\n floatingDataY,\n )}\n >\n {arrow && (\n <PopperArrow\n coords={arrowCoords}\n placement={resolvedPlacement}\n arrowClassName={styles['Tooltip__arrow']}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n )}\n <div className={styles['Tooltip__content']}>\n {header && <Subhead weight=\"2\">{header}</Subhead>}\n {text && <Subhead>{text}</Subhead>}\n </div>\n </div>\n </div>,\n tooltipContainer,\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","ReactDOM","classNames","hasReactNode","useExternRef","useGlobalEventListener","useDOM","arrowMiddleware","autoPlacementMiddleware","autoUpdateFloatingElement","checkIsNotAutoPlacement","convertFloatingDataToReactCSSProperties","flipMiddleware","getAutoPlacementAlign","offsetMiddleware","shiftMiddleware","useFloating","warnOnce","useNavTransition","DefaultIcon","PopperArrow","Subhead","tooltipContainerAttr","styles","isDOMTypeElement","element","isValidElement","type","warn","stylesAppearance","accent","white","black","inversion","mapAlignX","x","getDefaultPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","Tooltip","children","isShown","isShownProp","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","appearance","arrow","arrowPadding","ArrowIcon","placementProp","text","header","className","restProps","arrowRef","setArrowRef","useState","target","setTarget","tooltipContainer","useMemo","closest","entering","isNotAutoPlacement","process","env","NODE_ENV","multiChildren","Children","count","primitiveChild","JSON","stringify","Boolean","floatingPositionStrategy","style","position","Error","memoizedMiddlewares","middlewares","crossAxis","mainAxis","push","alignment","padding","name","fn","middlewareData","Promise","resolve","undefined","y","floatingDataX","floatingDataY","resolvedPlacement","refs","arrowCoords","strategy","middleware","whileElementsMounted","document","capture","passive","childRef","ref","props","getRootRef","patchedRef","setReference","child","cloneElement","Fragment","createPortal","div","setFloating","coords","arrowClassName","Icon","weight"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport {\n arrowMiddleware,\n autoPlacementMiddleware,\n autoUpdateFloatingElement,\n checkIsNotAutoPlacement,\n convertFloatingDataToReactCSSProperties,\n flipMiddleware,\n getAutoPlacementAlign,\n offsetMiddleware,\n type Placement,\n type PlacementWithAuto,\n shiftMiddleware,\n useFloating,\n type UseFloatingMiddleware,\n} from '../../lib/floating';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRootRef } from '../../types';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';\nimport { tooltipContainerAttr } from './TooltipContainer';\nimport styles from './Tooltip.module.css';\n\n/**\n * Перебиваем `ref`.\n *\n * В оригинальном `React.DOMElement` задаётся `React.LegacyRef<T>`, в котором есть `string`.\n * Когда как `{ ref: \"string\" }` уже давно депрекейтнут.\n */\ninterface DOMElement<P extends React.HTMLAttributes<T> | React.SVGAttributes<T>, T extends Element>\n extends React.DOMElement<P, T> {\n ref: React.Ref<T>;\n}\n\nconst isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is DOMElement<P, T> => {\n return React.isValidElement(element) && typeof element.type === 'string';\n};\n\nconst warn = warnOnce('Tooltip');\n\nexport interface TooltipProps\n extends Omit<\n TooltipBaseProps,\n 'arrowCoords' | 'arrowPlacement' | 'getArrowRef' | 'floatingStyle' | 'withArrow'\n > {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children: React.ReactElement<HasRootRef<any>> | React.ReactElement;\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n alignX?: 'center' | 'left' | 'right';\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: 'top' | 'bottom';\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Безопасная зона вокруг стрелки, чтобы та не выходила за края контента.\n */\n arrowPadding?: number;\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: PlacementWithAuto;\n}\n\nfunction mapAlignX(x: TooltipProps['alignX']) {\n switch (x) {\n case 'left':\n return 'start';\n case 'right':\n return 'end';\n default:\n return '';\n }\n}\nfunction getDefaultPlacement(\n alignX: TooltipProps['alignX'],\n alignY: TooltipProps['alignY'],\n): Placement {\n return [alignY || 'bottom', mapAlignX(alignX || 'left')]\n .filter((p) => !!p)\n .join('-') as Placement;\n}\nfunction isVerticalPlacement(placement: PlacementWithAuto) {\n return placement.startsWith('top') || placement.startsWith('bottom');\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: isShownProp = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n arrow = true,\n arrowPadding = 14,\n placement: placementProp,\n ...restProps\n}: TooltipProps) => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement | null>(null);\n /* eslint-disable no-restricted-properties */\n const tooltipContainer = React.useMemo(\n () => target?.closest<HTMLDivElement>(`[${tooltipContainerAttr}]`),\n [target],\n );\n const { entering } = useNavTransition();\n const isShown = isShownProp && tooltipContainer && !entering;\n\n const placement = placementProp || getDefaultPlacement(alignX, alignY);\n const isNotAutoPlacement = checkIsNotAutoPlacement(placement);\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n }\n\n const floatingPositionStrategy = React.useMemo(\n () => (target?.style.position === 'fixed' ? 'fixed' : 'absolute'),\n [target],\n );\n\n if (process.env.NODE_ENV === 'development' && target && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n\n const memoizedMiddlewares = React.useMemo(() => {\n const middlewares: UseFloatingMiddleware[] = [\n offsetMiddleware({\n crossAxis: offsetX,\n mainAxis: offsetY,\n }),\n ];\n\n // см. https://floating-ui.com/docs/flip#conflict-with-autoplacement\n if (isNotAutoPlacement) {\n middlewares.push(flipMiddleware());\n } else {\n middlewares.push(\n autoPlacementMiddleware({\n alignment: placement ? getAutoPlacementAlign(placement) : null,\n }),\n );\n }\n\n middlewares.push(shiftMiddleware());\n\n // см. https://floating-ui.com/docs/arrow#order\n if (arrow) {\n middlewares.push(\n arrowMiddleware({\n element: arrowRef,\n padding: arrowPadding,\n }),\n );\n middlewares.push({\n name: 'arrowOffset',\n fn({ placement, middlewareData }) {\n if (!middlewareData.arrow) {\n return Promise.resolve({});\n }\n if (isVerticalPlacement(placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n middlewareData.arrow.x = cornerAbsoluteOffset;\n } else if (middlewareData.arrow.x !== undefined) {\n middlewareData.arrow.x += cornerOffset;\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n middlewareData.arrow.y = cornerAbsoluteOffset;\n } else if (middlewareData.arrow.y !== undefined) {\n middlewareData.arrow.y += cornerOffset;\n }\n }\n return Promise.resolve({});\n },\n });\n }\n\n return middlewares;\n }, [\n arrow,\n arrowRef,\n arrowPadding,\n cornerAbsoluteOffset,\n cornerOffset,\n offsetX,\n offsetY,\n placement,\n isNotAutoPlacement,\n ]);\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n placement: resolvedPlacement,\n refs,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: floatingPositionStrategy,\n placement: isNotAutoPlacement ? placement : undefined,\n middleware: memoizedMiddlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n\n const childRef = isDOMTypeElement<React.HTMLAttributes<HTMLElement>, HTMLElement>(children)\n ? children.ref\n : React.isValidElement<HasRootRef<HTMLElement>>(children)\n ? children.props.getRootRef\n : null;\n const patchedRef = useExternRef<HTMLElement>(setTarget, refs.setReference, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? 'ref' : 'getRootRef']: patchedRef,\n })\n : children;\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <>\n <TooltipBase\n {...restProps}\n getRootRef={refs.setFloating}\n floatingStyle={convertFloatingDataToReactCSSProperties(\n floatingPositionStrategy,\n floatingDataX,\n floatingDataY,\n )}\n withArrow={arrow}\n arrowCoords={arrowCoords}\n arrowPlacement={resolvedPlacement}\n getArrowRef={setArrowRef}\n />\n <div className={styles['Tooltip__overlay']} onClickCapture={onClose} />\n </>,\n tooltipContainer,\n )}\n </React.Fragment>\n );\n};\n"],"names":["React","ReactDOM","hasReactNode","useExternRef","arrowMiddleware","autoPlacementMiddleware","autoUpdateFloatingElement","checkIsNotAutoPlacement","convertFloatingDataToReactCSSProperties","flipMiddleware","getAutoPlacementAlign","offsetMiddleware","shiftMiddleware","useFloating","warnOnce","useNavTransition","TooltipBase","tooltipContainerAttr","styles","isDOMTypeElement","element","isValidElement","type","warn","mapAlignX","x","getDefaultPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","Tooltip","children","isShown","isShownProp","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","arrow","arrowPadding","placementProp","restProps","arrowRef","setArrowRef","useState","target","setTarget","tooltipContainer","useMemo","closest","entering","isNotAutoPlacement","process","env","NODE_ENV","multiChildren","Children","count","primitiveChild","JSON","stringify","Boolean","floatingPositionStrategy","style","position","Error","memoizedMiddlewares","middlewares","crossAxis","mainAxis","push","alignment","padding","name","fn","middlewareData","Promise","resolve","undefined","y","floatingDataX","floatingDataY","resolvedPlacement","refs","arrowCoords","strategy","middleware","whileElementsMounted","childRef","ref","props","getRootRef","patchedRef","setReference","child","cloneElement","Fragment","createPortal","setFloating","floatingStyle","withArrow","arrowPlacement","getArrowRef","div","className","onClickCapture"],"mappings":"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"}
@@ -1,57 +1,7 @@
1
- .Tooltip {
2
- position: absolute;
1
+ .Tooltip__overlay {
2
+ position: fixed;
3
3
  left: 0;
4
4
  top: 0;
5
- height: 100%;
6
5
  width: 100%;
7
- white-space: normal;
8
- }
9
-
10
- .Tooltip__content {
11
- background-color: var(--vkui--color_background_modal);
12
- box-shadow: var(--vkui--elevation3);
13
- padding: 9px 12px 10px;
14
- border-radius: var(--vkui--size_border_radius--regular);
15
- color: var(--vkui--color_text_primary);
16
- max-width: 220px;
17
- }
18
-
19
- .Tooltip__arrow {
20
- color: var(--vkui--color_background_modal);
21
- }
22
-
23
- .Tooltip--appearance-accent .Tooltip__content {
24
- background-color: var(--vkui--color_background_accent_tint);
25
- color: var(--vkui--color_text_contrast);
26
- }
27
-
28
- .Tooltip--appearance-accent .Tooltip__arrow {
29
- color: var(--vkui--color_background_accent_tint);
30
- }
31
-
32
- .Tooltip--appearance-white .Tooltip__content {
33
- background-color: var(--vkui--color_background_contrast);
34
- color: var(--vkui--color_text_primary_invariably);
35
- }
36
-
37
- .Tooltip--appearance-white .Tooltip__arrow {
38
- color: var(--vkui--color_background_contrast);
39
- }
40
-
41
- .Tooltip--appearance-black .Tooltip__content {
42
- background-color: var(--vkui--color_background_contrast_inverse);
43
- color: var(--vkui--color_text_contrast);
44
- }
45
-
46
- .Tooltip--appearance-black .Tooltip__arrow {
47
- color: var(--vkui--color_background_contrast_inverse);
48
- }
49
-
50
- .Tooltip--appearance-inversion .Tooltip__content {
51
- background-color: var(--vkui--color_background_modal_inverse);
52
- color: var(--vkui--color_text_contrast_themed);
53
- }
54
-
55
- .Tooltip--appearance-inversion .Tooltip__arrow {
56
- color: var(--vkui--color_background_modal_inverse);
6
+ height: 100%;
57
7
  }
@@ -0,0 +1,49 @@
1
+ import * as React from 'react';
2
+ import { HasRootRef } from '../../types';
3
+ import { type PopperArrowProps } from '../PopperArrow/PopperArrow';
4
+ export interface TooltipBaseProps extends HasRootRef<HTMLDivElement> {
5
+ /**
6
+ * Стиль отображения подсказки
7
+ */
8
+ appearance?: 'accent' | 'neutral' | 'white' | 'black' | 'inversion';
9
+ /**
10
+ * Текст тултипа.
11
+ */
12
+ text?: React.ReactNode;
13
+ /**
14
+ * Заголовок тултипа.
15
+ */
16
+ header?: React.ReactNode;
17
+ /**
18
+ * Отображать ли стрелку, указывающую на якорный элемент
19
+ */
20
+ withArrow?: boolean;
21
+ arrowCoords?: PopperArrowProps['coords'];
22
+ arrowPlacement?: PopperArrowProps['placement'];
23
+ getArrowRef?: PopperArrowProps['getRootRef'];
24
+ /**
25
+ * Пользовательская SVG иконка.
26
+ *
27
+ * Требования:
28
+ *
29
+ * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).
30
+ * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,
31
+ * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.
32
+ * (см. https://github.com/VKCOM/VKUI/pull/4496).
33
+ * 3. Убедитесь, что компонент принимает все валидные для SVG параметры.
34
+ * 4. Убедитесь, что SVG и её элементы наследует цвет через `fill="currentColor"`.
35
+ * 5. Если стрелка наезжает на якорный элемент, то увеличьте значение параметра `offsetY`.
36
+ */
37
+ ArrowIcon?: PopperArrowProps['Icon'];
38
+ /**
39
+ * Пользовательские css-классы, будут добавлены на root-элемент
40
+ */
41
+ className?: string;
42
+ floatingStyle?: React.CSSProperties;
43
+ }
44
+ /**
45
+ * Низкоуровневый компонент для отрисовки тултипа.
46
+ * Примеры использования и Readme можно найти в документации Tooltip
47
+ * @see https://vkcom.github.io/VKUI/#/Tooltip
48
+ */
49
+ export declare const TooltipBase: ({ appearance, withArrow, arrowCoords, arrowPlacement, getArrowRef, getRootRef, floatingStyle, ArrowIcon, text, header, className, ...restProps }: TooltipBaseProps) => React.JSX.Element;
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import { classNames } from '@vkontakte/vkjs';
3
+ import { DefaultIcon } from '../PopperArrow/DefaultIcon';
4
+ import { PopperArrow } from '../PopperArrow/PopperArrow';
5
+ import { Subhead } from '../Typography/Subhead/Subhead';
6
+ import styles from './TooltipBase.module.css';
7
+ const stylesAppearance = {
8
+ accent: styles['TooltipBase--appearance-accent'],
9
+ white: styles['TooltipBase--appearance-white'],
10
+ black: styles['TooltipBase--appearance-black'],
11
+ inversion: styles['TooltipBase--appearance-inversion']
12
+ };
13
+ /**
14
+ * Низкоуровневый компонент для отрисовки тултипа.
15
+ * Примеры использования и Readme можно найти в документации Tooltip
16
+ * @see https://vkcom.github.io/VKUI/#/Tooltip
17
+ */ export const TooltipBase = ({ appearance = 'accent', withArrow = true, arrowCoords, arrowPlacement = 'top', getArrowRef, getRootRef, floatingStyle, ArrowIcon = DefaultIcon, text, header, className, ...restProps })=>{
18
+ return /*#__PURE__*/ React.createElement("div", {
19
+ ...restProps,
20
+ className: classNames(styles['TooltipBase'], appearance !== 'neutral' && stylesAppearance[appearance], className)
21
+ }, /*#__PURE__*/ React.createElement("div", {
22
+ ref: getRootRef,
23
+ style: floatingStyle
24
+ }, withArrow && /*#__PURE__*/ React.createElement(PopperArrow, {
25
+ coords: arrowCoords,
26
+ placement: arrowPlacement,
27
+ arrowClassName: styles['TooltipBase__arrow'],
28
+ getRootRef: getArrowRef,
29
+ Icon: ArrowIcon
30
+ }), /*#__PURE__*/ React.createElement("div", {
31
+ className: styles['TooltipBase__content']
32
+ }, header && /*#__PURE__*/ React.createElement(Subhead, {
33
+ weight: "2"
34
+ }, header), text && /*#__PURE__*/ React.createElement(Subhead, null, text))));
35
+ };
36
+
37
+ //# sourceMappingURL=TooltipBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/TooltipBase/TooltipBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { HasRootRef } from '../../types';\nimport { DefaultIcon } from '../PopperArrow/DefaultIcon';\nimport { PopperArrow, type PopperArrowProps } from '../PopperArrow/PopperArrow';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport styles from './TooltipBase.module.css';\n\nconst stylesAppearance = {\n accent: styles['TooltipBase--appearance-accent'],\n white: styles['TooltipBase--appearance-white'],\n black: styles['TooltipBase--appearance-black'],\n inversion: styles['TooltipBase--appearance-inversion'],\n};\n\nexport interface TooltipBaseProps extends HasRootRef<HTMLDivElement> {\n /**\n * Стиль отображения подсказки\n */\n appearance?: 'accent' | 'neutral' | 'white' | 'black' | 'inversion';\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n withArrow?: boolean;\n arrowCoords?: PopperArrowProps['coords'];\n arrowPlacement?: PopperArrowProps['placement'];\n getArrowRef?: PopperArrowProps['getRootRef'];\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (см. https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 4. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n * 5. Если стрелка наезжает на якорный элемент, то увеличьте значение параметра `offsetY`.\n */\n ArrowIcon?: PopperArrowProps['Icon'];\n /**\n * Пользовательские css-классы, будут добавлены на root-элемент\n */\n className?: string;\n floatingStyle?: React.CSSProperties;\n}\n\n/**\n * Низкоуровневый компонент для отрисовки тултипа.\n * Примеры использования и Readme можно найти в документации Tooltip\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const TooltipBase = ({\n appearance = 'accent',\n withArrow = true,\n arrowCoords,\n arrowPlacement = 'top',\n getArrowRef,\n getRootRef,\n floatingStyle,\n ArrowIcon = DefaultIcon,\n text,\n header,\n className,\n ...restProps\n}: TooltipBaseProps) => {\n return (\n <div\n {...restProps}\n className={classNames(\n styles['TooltipBase'],\n appearance !== 'neutral' && stylesAppearance[appearance],\n className,\n )}\n >\n <div ref={getRootRef} style={floatingStyle}>\n {withArrow && (\n <PopperArrow\n coords={arrowCoords}\n placement={arrowPlacement}\n arrowClassName={styles['TooltipBase__arrow']}\n getRootRef={getArrowRef}\n Icon={ArrowIcon}\n />\n )}\n <div className={styles['TooltipBase__content']}>\n {header && <Subhead weight=\"2\">{header}</Subhead>}\n {text && <Subhead>{text}</Subhead>}\n </div>\n </div>\n </div>\n );\n};\n"],"names":["React","classNames","DefaultIcon","PopperArrow","Subhead","styles","stylesAppearance","accent","white","black","inversion","TooltipBase","appearance","withArrow","arrowCoords","arrowPlacement","getArrowRef","getRootRef","floatingStyle","ArrowIcon","text","header","className","restProps","div","ref","style","coords","placement","arrowClassName","Icon","weight"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,WAAW,QAAQ,6BAA6B;AACzD,SAASC,WAAW,QAA+B,6BAA6B;AAChF,SAASC,OAAO,QAAQ,gCAAgC;AACxD,OAAOC,YAAY,2BAA2B;AAE9C,MAAMC,mBAAmB;IACvBC,QAAQF,MAAM,CAAC,iCAAiC;IAChDG,OAAOH,MAAM,CAAC,gCAAgC;IAC9CI,OAAOJ,MAAM,CAAC,gCAAgC;IAC9CK,WAAWL,MAAM,CAAC,oCAAoC;AACxD;AA2CA;;;;CAIC,GACD,OAAO,MAAMM,cAAc,CAAC,EAC1BC,aAAa,QAAQ,EACrBC,YAAY,IAAI,EAChBC,WAAW,EACXC,iBAAiB,KAAK,EACtBC,WAAW,EACXC,UAAU,EACVC,aAAa,EACbC,YAAYjB,WAAW,EACvBkB,IAAI,EACJC,MAAM,EACNC,SAAS,EACT,GAAGC,WACc;IACjB,qBACE,oBAACC;QACE,GAAGD,SAAS;QACbD,WAAWrB,WACTI,MAAM,CAAC,cAAc,EACrBO,eAAe,aAAaN,gBAAgB,CAACM,WAAW,EACxDU;qBAGF,oBAACE;QAAIC,KAAKR;QAAYS,OAAOR;OAC1BL,2BACC,oBAACV;QACCwB,QAAQb;QACRc,WAAWb;QACXc,gBAAgBxB,MAAM,CAAC,qBAAqB;QAC5CY,YAAYD;QACZc,MAAMX;sBAGV,oBAACK;QAAIF,WAAWjB,MAAM,CAAC,uBAAuB;OAC3CgB,wBAAU,oBAACjB;QAAQ2B,QAAO;OAAKV,SAC/BD,sBAAQ,oBAAChB,eAASgB;AAK7B,EAAE"}
@@ -0,0 +1,57 @@
1
+ .TooltipBase {
2
+ position: absolute;
3
+ left: 0;
4
+ top: 0;
5
+ height: 100%;
6
+ width: 100%;
7
+ white-space: normal;
8
+ }
9
+
10
+ .TooltipBase__content {
11
+ background-color: var(--vkui--color_background_modal);
12
+ box-shadow: var(--vkui--elevation3);
13
+ padding: 9px 12px 10px;
14
+ border-radius: var(--vkui--size_border_radius--regular);
15
+ color: var(--vkui--color_text_primary);
16
+ max-width: 220px;
17
+ }
18
+
19
+ .TooltipBase__arrow {
20
+ color: var(--vkui--color_background_modal);
21
+ }
22
+
23
+ .TooltipBase--appearance-accent .TooltipBase__content {
24
+ background-color: var(--vkui--color_background_accent_tint);
25
+ color: var(--vkui--color_text_contrast);
26
+ }
27
+
28
+ .TooltipBase--appearance-accent .TooltipBase__arrow {
29
+ color: var(--vkui--color_background_accent_tint);
30
+ }
31
+
32
+ .TooltipBase--appearance-white .TooltipBase__content {
33
+ background-color: var(--vkui--color_background_contrast);
34
+ color: var(--vkui--color_text_primary_invariably);
35
+ }
36
+
37
+ .TooltipBase--appearance-white .TooltipBase__arrow {
38
+ color: var(--vkui--color_background_contrast);
39
+ }
40
+
41
+ .TooltipBase--appearance-black .TooltipBase__content {
42
+ background-color: var(--vkui--color_background_contrast_inverse);
43
+ color: var(--vkui--color_text_contrast);
44
+ }
45
+
46
+ .TooltipBase--appearance-black .TooltipBase__arrow {
47
+ color: var(--vkui--color_background_contrast_inverse);
48
+ }
49
+
50
+ .TooltipBase--appearance-inversion .TooltipBase__content {
51
+ background-color: var(--vkui--color_background_modal_inverse);
52
+ color: var(--vkui--color_text_contrast_themed);
53
+ }
54
+
55
+ .TooltipBase--appearance-inversion .TooltipBase__arrow {
56
+ color: var(--vkui--color_background_modal_inverse);
57
+ }