@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
JavaScript
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;