UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

107 lines (102 loc) 4.32 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import * as React from "react"; import styled, { css } from "styled-components"; import { SIZE_OPTIONS } from "./consts"; import { StyledText } from "../../Text"; import Portal from "../../Portal"; import randomID from "../../utils/randomID"; import TooltipContent from "./components/TooltipContent"; import useStateWithTimeout from "../../hooks/useStateWithTimeout"; export var StyledTooltipChildren = styled.span.withConfig({ displayName: "TooltipPrimitive__StyledTooltipChildren", componentId: "sc-1xrafc8-0" })(["", ";&:focus:active{outline:none;}", ";[disabled]{pointer-events:none;}"], function (_ref) { var block = _ref.block; return !block && "\n display: inline-flex;\n "; }, function (_ref2) { var enabled = _ref2.enabled, removeUnderlinedText = _ref2.removeUnderlinedText; return enabled && !removeUnderlinedText && css(["", "{display:inline-block;text-decoration:underline;text-decoration:underline currentColor dotted;}"], StyledText); }); var TooltipPrimitive = function TooltipPrimitive(_ref3) { var children = _ref3.children, _ref3$enabled = _ref3.enabled, enabled = _ref3$enabled === void 0 ? true : _ref3$enabled, _ref3$tabIndex = _ref3.tabIndex, tabIndex = _ref3$tabIndex === void 0 ? "0" : _ref3$tabIndex, dataTest = _ref3.dataTest, _ref3$renderInPortal = _ref3.renderInPortal, renderInPortal = _ref3$renderInPortal === void 0 ? true : _ref3$renderInPortal, _ref3$size = _ref3.size, size = _ref3$size === void 0 ? SIZE_OPTIONS.SMALL : _ref3$size, content = _ref3.content, preferredPosition = _ref3.preferredPosition, preferredAlign = _ref3.preferredAlign, _ref3$stopPropagation = _ref3.stopPropagation, stopPropagation = _ref3$stopPropagation === void 0 ? false : _ref3$stopPropagation, removeUnderlinedText = _ref3.removeUnderlinedText, _ref3$block = _ref3.block, block = _ref3$block === void 0 ? false : _ref3$block; var _React$useState = React.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), shown = _React$useState2[0], setShown = _React$useState2[1]; var _useStateWithTimeout = useStateWithTimeout(false, 200), _useStateWithTimeout2 = _slicedToArray(_useStateWithTimeout, 4), render = _useStateWithTimeout2[0], setRender = _useStateWithTimeout2[1], setRenderWithTimeout = _useStateWithTimeout2[2], clearRenderTimeout = _useStateWithTimeout2[3]; var tooltipId = React.useMemo(function () { return randomID("TooltipID"); }, []); var container = React.useRef(null); var handleIn = React.useCallback(function () { setRender(true); setShown(true); clearRenderTimeout(); }, [clearRenderTimeout, setRender]); var handleOut = React.useCallback(function () { setShown(false); setRenderWithTimeout(false); }, [setRenderWithTimeout]); var handleClick = React.useCallback(function (ev) { if (stopPropagation) { ev.stopPropagation(); } }, [stopPropagation]); var handleOutMobile = React.useCallback(function () { setRenderWithTimeout(false); }, [setRenderWithTimeout]); if (!enabled) return children; var tooltip = /*#__PURE__*/React.createElement(TooltipContent, { parent: children, dataTest: dataTest, shown: shown, size: size, tooltipId: tooltipId, onClose: handleOut, onCloseMobile: handleOutMobile, onEnter: handleIn, preferredPosition: preferredPosition, preferredAlign: preferredAlign, containerRef: container }, content); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledTooltipChildren, { as: block ? "div" : "span", onMouseEnter: handleIn, onMouseLeave: handleOut, onClick: handleClick, onFocus: handleIn, onBlur: handleOut, ref: container, "aria-describedby": enabled ? tooltipId : undefined, tabIndex: enabled ? tabIndex : undefined, enabled: enabled, removeUnderlinedText: removeUnderlinedText, block: block }, children), enabled && render && (renderInPortal ? /*#__PURE__*/React.createElement(Portal, { renderInto: "tooltips" }, tooltip) : tooltip)); }; export default TooltipPrimitive;