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