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.

138 lines (119 loc) 5.26 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.StyledTooltipChildren = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); 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 _useStateWithTimeout3 = _interopRequireDefault(require("../../hooks/useStateWithTimeout")); var StyledTooltipChildren = _styledComponents.default.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 && (0, _styledComponents.css)(["display:inline-flex;"]); }, function (_ref2) { var enabled = _ref2.enabled, removeUnderlinedText = _ref2.removeUnderlinedText; return enabled && !removeUnderlinedText && (0, _styledComponents.css)(["", "{display:inline-block;text-decoration:underline;text-decoration:underline currentColor dotted;}"], _Text.StyledText); }); exports.StyledTooltipChildren = StyledTooltipChildren; var TooltipPrimitive = function TooltipPrimitive(_ref3) { var children = _ref3.children, _ref3$enabled = _ref3.enabled, enabled = _ref3$enabled === void 0 ? true : _ref3$enabled, tooltipShown = _ref3.tooltipShown, _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 ? _consts.SIZE_OPTIONS.SMALL : _ref3$size, content = _ref3.content, error = _ref3.error, help = _ref3.help, 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 = (0, _slicedToArray2.default)(_React$useState, 2), shown = _React$useState2[0], setShown = _React$useState2[1]; var _useStateWithTimeout = (0, _useStateWithTimeout3.default)(false, 200), _useStateWithTimeout2 = (0, _slicedToArray2.default)(_useStateWithTimeout, 4), render = _useStateWithTimeout2[0], setRender = _useStateWithTimeout2[1], setRenderWithTimeout = _useStateWithTimeout2[2], clearRenderTimeout = _useStateWithTimeout2[3]; var tooltipId = (0, _useRandomId.default)(); 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]); React.useEffect(function () { if (tooltipShown) handleIn();else { handleOut(); } }, [tooltipShown, handleIn, handleOut]); var handleOutMobile = React.useCallback(function () { setRenderWithTimeout(false); }, [setRenderWithTimeout]); if (!enabled) return children; var tooltip = /*#__PURE__*/React.createElement(_TooltipContent.default, { parent: children, dataTest: dataTest, shown: shown, size: size, error: error, help: help, 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.default, { renderInto: "tooltips" }, tooltip) : tooltip)); }; var _default = TooltipPrimitive; exports.default = _default;