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.

174 lines (143 loc) 6.14 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _reactPopper = require("react-popper"); var _consts = require("../../../common/consts"); var _tooltipSize = _interopRequireDefault(require("../helpers/tooltipSize")); var _Text = require("../../../Text"); var _ListItem = require("../../../List/ListItem"); var _resolveBackgroundColor = _interopRequireDefault(require("../helpers/resolveBackgroundColor")); var _resolveArrow = require("../helpers/resolveArrow"); var _tooltipPadding = _interopRequireDefault(require("../helpers/tooltipPadding")); var _defaultTheme = _interopRequireDefault(require("../../../defaultTheme")); var _TextLink = require("../../../TextLink"); var _transition = _interopRequireDefault(require("../../../utils/transition")); var _consts2 = _interopRequireDefault(require("../../../hooks/useFocusTrap/consts")); const StyledTooltip = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltip", componentId: "sc-1eptatj-0" })(["width:100%;"]); const StyledTooltipArrow = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipArrow", componentId: "sc-1eptatj-1" })(["", ""], ({ transform, position }) => (0, _styledComponents.css)(["position:", ";transform:", ";", ";&:after{position:absolute;content:\"\";width:0;height:0;border-style:solid;", ";}"], position, transform, _resolveArrow.resolveArrowPlacement, _resolveArrow.resolveArrowStyle)); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 StyledTooltipArrow.defaultProps = { theme: _defaultTheme.default }; const StyledTooltipWrapper = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipWrapper", componentId: "sc-1eptatj-2" })(["", ""], ({ theme, shown, popper }) => (0, _styledComponents.css)(["display:block;", ";width:auto;max-width:", ";box-sizing:border-box;padding:", ";border-radius:", ";background:", ";box-shadow:", ";visibility:", ";opacity:", ";transition:", ";z-index:10012;overflow-y:scroll;overflow:visible;img{max-width:100%;}"], popper, _tooltipSize.default, _tooltipPadding.default, theme.orbit.borderRadiusNormal, _resolveBackgroundColor.default, theme.orbit.boxShadowRaised, shown ? "visible" : "hidden", shown ? "1" : "0", (0, _transition.default)(["opacity", "visibility"], "fast", "ease-in-out"))); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 StyledTooltipWrapper.defaultProps = { theme: _defaultTheme.default }; const StyledTooltipContent = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipContent", componentId: "sc-1eptatj-3" })(["", ""], ({ theme }) => (0, _styledComponents.css)(["font-family:", ";font-size:", ";font-weight:", ";line-height:", ";color:", ";margin-bottom:0;& ", ",", "{font-size:", ";font-weight:", ";color:", ";}& ", "{color:", ";}"], theme.orbit.fontFamily, theme.orbit.fontSizeTextSmall, theme.orbit.fontWeightMedium, theme.orbit.lineHeightTextNormal, theme.orbit.paletteWhite, _Text.StyledText, _ListItem.Item, theme.orbit.fontSizeTextSmall, theme.orbit.fontWeightMedium, theme.orbit.paletteWhite, _TextLink.StyledTextLink, theme.orbit.paletteWhite)); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 StyledTooltipContent.defaultProps = { theme: _defaultTheme.default }; const TooltipContent = ({ dataTest, shown, size, tooltipId, error, help, children, onClose, onCloseMobile, onEnter, placement = _consts.PLACEMENTS.AUTO, noFlip, offset = [0, 5], referenceElement }) => { const [tooltip, setTooltipRef] = React.useState(null); const [arrowRef, setArrowRef] = React.useState(null); const [contentHeight, setContentHeight] = React.useState(0); const content = React.useRef(null); const { styles, attributes: attrs, update } = (0, _reactPopper.usePopper)(referenceElement, tooltip, { placement, modifiers: [{ name: "arrow", options: { element: arrowRef } }, { name: "offset", options: { offset } }, { name: "flip", enabled: !noFlip }] }); React.useEffect(() => { if (update) update(); if (content.current) setContentHeight(content.current.clientHeight); }, [update, setContentHeight]); const { popper, arrow } = styles; const handleInnerClick = React.useCallback(ev => { if (tooltip) { const focusableElements = tooltip.querySelectorAll(_consts2.default); if (Object.values(focusableElements).some(v => v === ev.target)) { onClose(); onCloseMobile(); } } }, [onClose, onCloseMobile, tooltip]); return /*#__PURE__*/React.createElement(StyledTooltip, { role: "tooltip", id: tooltipId, "data-test": dataTest }, /*#__PURE__*/React.createElement(StyledTooltipWrapper, { shown: shown, size: size, ref: setTooltipRef, error: error, help: help, role: "tooltip", "aria-hidden": !shown, onMouseEnter: onEnter, onMouseLeave: onClose, contentHeight: contentHeight, onClick: handleInnerClick, popper: (0, _objectSpread2.default)({}, popper) }, /*#__PURE__*/React.createElement(StyledTooltipContent, { ref: content }, children), /*#__PURE__*/React.createElement(StyledTooltipArrow, { ref: setArrowRef, position: arrow.position, transform: arrow.transform, contentHeight: contentHeight, placement: attrs.popper && attrs.popper["data-popper-placement"] }))); }; var _default = TooltipContent; exports.default = _default;