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