@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 (112 loc) • 6.02 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _mediaQuery = require("../utils/mediaQuery");
var _consts = require("./consts");
var _Text = require("../Text");
var _Portal = _interopRequireDefault(require("../Portal"));
var _randomID = _interopRequireDefault(require("../utils/randomID"));
var _consts2 = require("../utils/mediaQuery/consts");
var _useTheme = _interopRequireDefault(require("../hooks/useTheme"));
var _TooltipContent = _interopRequireDefault(require("./components/TooltipContent"));
var _useStateWithTimeout5 = _interopRequireDefault(require("../hooks/useStateWithTimeout"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var StyledTooltipChildren = _styledComponents.default.span.withConfig({
displayName: "Tooltip__StyledTooltipChildren",
componentId: "sc-1l15bi-0"
})(["display:inline-block;&:focus:active{outline:none;}", "{display:inline-block;text-decoration:underline currentColor dotted;}"], _Text.StyledText);
var Tooltip = function Tooltip(_ref) {
var children = _ref.children,
_ref$enabled = _ref.enabled,
enabled = _ref$enabled === void 0 ? true : _ref$enabled,
_ref$tabIndex = _ref.tabIndex,
tabIndex = _ref$tabIndex === void 0 ? "0" : _ref$tabIndex,
dataTest = _ref.dataTest,
_ref$size = _ref.size,
size = _ref$size === void 0 ? _consts.SIZE_OPTIONS.SMALL : _ref$size,
content = _ref.content,
preferredPosition = _ref.preferredPosition,
_ref$stopPropagation = _ref.stopPropagation,
stopPropagation = _ref$stopPropagation === void 0 ? false : _ref$stopPropagation;
var theme = (0, _useTheme.default)();
var _useState = (0, _react.useState)(false),
_useState2 = _slicedToArray(_useState, 2),
shown = _useState2[0],
setShown = _useState2[1];
var _useStateWithTimeout = (0, _useStateWithTimeout5.default)(false, 200),
_useStateWithTimeout2 = _slicedToArray(_useStateWithTimeout, 4),
render = _useStateWithTimeout2[0],
setRender = _useStateWithTimeout2[1],
setRenderWithTimeout = _useStateWithTimeout2[2],
clearRenderTimeout = _useStateWithTimeout2[3];
var _useStateWithTimeout3 = (0, _useStateWithTimeout5.default)(false, 200),
_useStateWithTimeout4 = _slicedToArray(_useStateWithTimeout3, 3),
shownMobile = _useStateWithTimeout4[0],
setShownMobile = _useStateWithTimeout4[1],
setShownMobileWithTimeout = _useStateWithTimeout4[2];
var tooltipId = (0, _react.useMemo)(function () {
return (0, _randomID.default)("tooltip");
}, []);
var container = (0, _react.useRef)(null);
var handleIn = (0, _react.useCallback)(function () {
if (window.innerWidth > +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) {
setRender(true);
setShown(true);
clearRenderTimeout();
}
}, [clearRenderTimeout, setRender, theme]);
var handleOut = (0, _react.useCallback)(function () {
if (window.innerWidth > +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) {
setShown(false);
setRenderWithTimeout(false);
}
}, [setRenderWithTimeout, theme]);
var handleInMobile = (0, _react.useCallback)(function (ev) {
if (stopPropagation) {
ev.stopPropagation();
}
if (window.innerWidth <= +(0, _mediaQuery.getBreakpointWidth)(_consts2.QUERIES.LARGEMOBILE, theme, true)) {
setRender(true);
setShownMobileWithTimeout(true);
clearRenderTimeout();
}
}, [clearRenderTimeout, setRender, setShownMobileWithTimeout, stopPropagation, theme]);
var handleOutMobile = (0, _react.useCallback)(function () {
setShownMobile(false);
setRenderWithTimeout(false);
}, [setRenderWithTimeout, setShownMobile]);
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(StyledTooltipChildren, {
onMouseEnter: handleIn,
onMouseLeave: handleOut,
onClick: handleInMobile,
onFocus: handleIn,
onBlur: handleOut,
ref: container,
"aria-describedby": tooltipId,
tabIndex: enabled && tabIndex
}, children), enabled && render && _react.default.createElement(_Portal.default, {
element: "tooltips"
}, _react.default.createElement(_TooltipContent.default, {
dataTest: dataTest,
shownMobile: shownMobile,
shown: shown,
size: size,
tooltipId: tooltipId,
onClose: handleOut,
onCloseMobile: handleOutMobile,
onEnter: handleIn,
preferredPosition: preferredPosition,
containerRef: container
}, content)));
};
var _default = Tooltip;
exports.default = _default;