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.

123 lines (105 loc) 4.36 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.StyledTooltipChildren = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _consts = require("./consts"); var _Text = require("../../Text"); var _Portal = _interopRequireDefault(require("../../Portal")); var _useRandomId = _interopRequireDefault(require("../../hooks/useRandomId")); var _TooltipContent = _interopRequireDefault(require("./components/TooltipContent")); var _useStateWithTimeout = _interopRequireDefault(require("../../hooks/useStateWithTimeout")); const _excluded = ["children", "enabled", "tooltipShown", "tabIndex", "dataTest", "renderInPortal", "size", "content", "error", "help", "stopPropagation", "removeUnderlinedText", "block"]; const StyledTooltipChildren = _styledComponents.default.span.withConfig({ displayName: "TooltipPrimitive__StyledTooltipChildren", componentId: "sc-1wxi344-0" })(["", ";&:focus:active{outline:none;}", ";[disabled]{pointer-events:none;}"], ({ block }) => !block && (0, _styledComponents.css)(["display:inline-flex;"]), ({ enabled, removeUnderlinedText }) => enabled && !removeUnderlinedText && (0, _styledComponents.css)(["", "{display:inline-block;text-decoration:underline;text-decoration:underline currentColor dotted;}"], _Text.StyledText)); exports.StyledTooltipChildren = StyledTooltipChildren; const TooltipPrimitive = (_ref) => { let { children, enabled = true, tooltipShown, tabIndex = "0", dataTest, renderInPortal = true, size = _consts.SIZE_OPTIONS.SMALL, content, error, help, stopPropagation = false, removeUnderlinedText, block = false } = _ref, popper = (0, _objectWithoutProperties2.default)(_ref, _excluded); const [shown, setShown] = React.useState(false); const [referenceElement, setReferenceElement] = React.useState(null); const [render, setRender, setRenderWithTimeout, clearRenderTimeout] = (0, _useStateWithTimeout.default)(false, 200); const tooltipId = (0, _useRandomId.default)(); const handleIn = React.useCallback(() => { setRender(true); setShown(true); clearRenderTimeout(); }, [clearRenderTimeout, setRender]); const handleOut = React.useCallback(() => { setShown(false); setRenderWithTimeout(false); }, [setRenderWithTimeout]); const handleClick = React.useCallback(ev => { if (stopPropagation) { ev.stopPropagation(); } }, [stopPropagation]); React.useEffect(() => { if (tooltipShown) handleIn();else { handleOut(); } }, [tooltipShown, handleIn, handleOut]); const handleOutMobile = React.useCallback(() => { setRenderWithTimeout(false); }, [setRenderWithTimeout]); if (!enabled) return children; const tooltip = /*#__PURE__*/React.createElement(_TooltipContent.default, (0, _extends2.default)({ parent: children, dataTest: dataTest, shown: shown, size: size, error: error, help: help, tooltipId: tooltipId, onClose: handleOut, onCloseMobile: handleOutMobile, onEnter: handleIn }, popper, { referenceElement: referenceElement }), 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: setReferenceElement, "aria-describedby": enabled ? tooltipId : undefined, tabIndex: enabled ? tabIndex : undefined, enabled: enabled, removeUnderlinedText: removeUnderlinedText, block: block }, children), enabled && render && (renderInPortal ? /*#__PURE__*/React.createElement(_Portal.default, { renderInto: "tooltips" }, tooltip) : tooltip)); }; var _default = TooltipPrimitive; exports.default = _default;