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.

101 lines (95 loc) 3.97 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import React, { useState, useRef, useMemo, useCallback } 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" })(["display:inline-flex;&:focus:active{outline:none;}", ";[disabled]{pointer-events:none;}"], function (_ref) { var enabled = _ref.enabled, removeUnderlinedText = _ref.removeUnderlinedText; return enabled && !removeUnderlinedText && css(["", "{display:inline-block;text-decoration:underline;text-decoration:underline currentColor dotted;}"], StyledText); }); var TooltipPrimitive = function TooltipPrimitive(_ref2) { var children = _ref2.children, _ref2$enabled = _ref2.enabled, enabled = _ref2$enabled === void 0 ? true : _ref2$enabled, _ref2$tabIndex = _ref2.tabIndex, tabIndex = _ref2$tabIndex === void 0 ? "0" : _ref2$tabIndex, dataTest = _ref2.dataTest, _ref2$size = _ref2.size, size = _ref2$size === void 0 ? SIZE_OPTIONS.SMALL : _ref2$size, content = _ref2.content, preferredPosition = _ref2.preferredPosition, preferredAlign = _ref2.preferredAlign, _ref2$stopPropagation = _ref2.stopPropagation, stopPropagation = _ref2$stopPropagation === void 0 ? false : _ref2$stopPropagation, removeUnderlinedText = _ref2.removeUnderlinedText; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), shown = _useState2[0], setShown = _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 = useMemo(function () { return randomID("TooltipID"); }, []); var container = useRef(null); var handleIn = useCallback(function () { setRender(true); setShown(true); clearRenderTimeout(); }, [clearRenderTimeout, setRender]); var handleOut = useCallback(function () { setShown(false); setRenderWithTimeout(false); }, [setRenderWithTimeout]); var handleInMobile = useCallback(function (ev) { if (stopPropagation) { ev.stopPropagation(); } ev.preventDefault(); setRender(true); clearRenderTimeout(); }, [clearRenderTimeout, setRender, stopPropagation]); var handleOutMobile = useCallback(function () { setRenderWithTimeout(false); }, [setRenderWithTimeout]); if (!enabled) return children; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledTooltipChildren, { onMouseEnter: handleIn, onMouseLeave: handleOut, onClick: handleInMobile, onFocus: handleIn, onBlur: handleOut, ref: container, "aria-describedby": enabled ? tooltipId : undefined, tabIndex: enabled ? tabIndex : undefined, enabled: enabled, removeUnderlinedText: removeUnderlinedText }, children), enabled && render && /*#__PURE__*/React.createElement(Portal, { renderInto: "tooltips" }, /*#__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))); }; export default TooltipPrimitive;