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.

288 lines (247 loc) 12.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _useTheme = _interopRequireDefault(require("../../hooks/useTheme")); var _resolveContainerPosition = _interopRequireDefault(require("../helpers/resolveContainerPosition")); var _resolveTooltipArrowAlign = _interopRequireDefault(require("../helpers/resolveTooltipArrowAlign")); var _resolveTooltipArrowPosition = _interopRequireDefault(require("../helpers/resolveTooltipArrowPosition")); var _index = require("../../Text/index"); var _index2 = require("../../List/ListItem/index"); var _index3 = _interopRequireDefault(require("../../utils/mediaQuery/index")); var _tooltipSize = _interopRequireDefault(require("../helpers/tooltipSize")); var _resolveContainerAlign = _interopRequireDefault(require("../helpers/resolveContainerAlign")); var _tooltipArrowStyle = _interopRequireDefault(require("../helpers/tooltipArrowStyle")); var _tooltipPadding = _interopRequireDefault(require("../helpers/tooltipPadding")); var _defaultTheme = _interopRequireDefault(require("../../defaultTheme")); var _Button = _interopRequireDefault(require("../../Button")); var _Translate = _interopRequireDefault(require("../../Translate")); var _calculateTooltipPosition = _interopRequireDefault(require("../helpers/calculateTooltipPosition")); var _calculateTooltipAlign = _interopRequireDefault(require("../helpers/calculateTooltipAlign")); var _sortPositionsAndAligns = _interopRequireDefault(require("../helpers/sortPositionsAndAligns")); var _useDimensions = _interopRequireDefault(require("../hooks/useDimensions")); 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 StyledTooltip = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltip", componentId: "sc-1umu28w-0" })(["width:100%;"]); var StyledTooltipWrapper = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipWrapper", componentId: "sc-1umu28w-1" })(["display:block;position:fixed;width:100%;box-sizing:border-box;border-top-left-radius:9px;border-top-right-radius:9px;background-color:", ";box-shadow:", ";padding:", ";visibility:", ";opacity:", ";transition:bottom ", " ease-in-out,visibility ", " linear ", ";z-index:10012;bottom:", ";left:0;right:0;max-height:", ";overflow-y:scroll;img{max-width:100%;}", ";&::after{width:0;height:0;border-style:solid;content:\" \";display:none;position:absolute;", ";", ";", ";", ";}"], function (_ref) { var theme = _ref.theme; return theme.orbit.paletteWhite; }, function (_ref2) { var theme = _ref2.theme; return theme.orbit.boxShadowElevatedLevel1; }, function (_ref3) { var theme = _ref3.theme; return theme.orbit.spaceMedium; }, function (_ref4) { var shownMobile = _ref4.shownMobile; return shownMobile ? "visible" : "hidden"; }, function (_ref5) { var shownMobile = _ref5.shownMobile; return shownMobile ? "1" : "0"; }, function (_ref6) { var theme = _ref6.theme; return theme.orbit.durationNormal; }, function (_ref7) { var theme = _ref7.theme; return theme.orbit.durationFast; }, function (_ref8) { var shownMobile = _ref8.shownMobile, theme = _ref8.theme; return !shownMobile && theme.orbit.durationNormal; }, function (_ref9) { var shownMobile = _ref9.shownMobile, tooltipWidth = _ref9.tooltipWidth; return shownMobile ? "0" : "-".concat(tooltipWidth, "px"); }, function (_ref10) { var theme = _ref10.theme; return "calc(100% - ".concat(theme.orbit.spaceXLarge, ")"); }, _index3.default.largeMobile((0, _styledComponents.css)(["max-height:none;overflow:visible;width:auto;position:absolute;max-width:", ";border-radius:", ";padding:", ";background-color:", ";visibility:", ";opacity:", ";transition:opacity ", " ease-in-out,visibility ", " ease-in-out;top:auto;right:auto;bottom:auto;left:auto;", ";", ";"], _tooltipSize.default, function (_ref11) { var theme = _ref11.theme; return theme.orbit.borderRadiusNormal; }, _tooltipPadding.default, function (_ref12) { var theme = _ref12.theme; return theme.orbit.paletteBlueDark; }, function (_ref13) { var shown = _ref13.shown; return shown ? "visible" : "hidden"; }, function (_ref14) { var shown = _ref14.shown; return shown ? "1" : "0"; }, function (_ref15) { var theme = _ref15.theme; return theme.orbit.durationFast; }, function (_ref16) { var theme = _ref16.theme; return theme.orbit.durationFast; }, _resolveContainerPosition.default, _resolveContainerAlign.default)), _tooltipArrowStyle.default, _resolveTooltipArrowPosition.default, _resolveTooltipArrowAlign.default, _index3.default.largeMobile((0, _styledComponents.css)(["display:block;"]))); StyledTooltipWrapper.defaultProps = { theme: _defaultTheme.default }; var StyledTooltipContent = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipContent", componentId: "sc-1umu28w-2" })(["font-family:", ";font-size:", ";font-weight:", ";line-height:", ";color:", ";margin-bottom:16px;& ", ",", "{font-size:", ";font-weight:", ";color:", ";}", ";"], function (_ref17) { var theme = _ref17.theme; return theme.orbit.fontFamily; }, function (_ref18) { var theme = _ref18.theme; return theme.orbit.fontSizeTextNormal; }, function (_ref19) { var theme = _ref19.theme; return theme.orbit.fontWeightNormal; }, function (_ref20) { var theme = _ref20.theme; return theme.orbit.lineHeightText; }, function (_ref21) { var theme = _ref21.theme; return theme.orbit.paletteInkNormal; }, _index.StyledText, _index2.Item, function (_ref22) { var theme = _ref22.theme; return theme.orbit.fontSizeTextNormal; }, function (_ref23) { var theme = _ref23.theme; return theme.orbit.fontWeightNormal; }, function (_ref24) { var theme = _ref24.theme; return theme.orbit.paletteInkNormal; }, _index3.default.largeMobile((0, _styledComponents.css)(["color:", ";font-size:", ";font-weight:", ";margin-bottom:0;& ", ",", "{color:", ";font-weight:", ";font-size:", ";}"], function (_ref25) { var theme = _ref25.theme; return theme.orbit.paletteWhite; }, function (_ref26) { var theme = _ref26.theme; return theme.orbit.fontSizeTextSmall; }, function (_ref27) { var theme = _ref27.theme; return theme.orbit.fontWeightMedium; }, _index.StyledText, _index2.Item, function (_ref28) { var theme = _ref28.theme; return theme.orbit.paletteWhite; }, function (_ref29) { var theme = _ref29.theme; return theme.orbit.fontWeightMedium; }, function (_ref30) { var theme = _ref30.theme; return theme.orbit.fontSizeTextSmall; }))); StyledTooltipContent.defaultProps = { theme: _defaultTheme.default }; var StyledTooltipClose = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipClose", componentId: "sc-1umu28w-3" })(["", ""], _index3.default.largeMobile((0, _styledComponents.css)(["display:none;visibility:hidden;"]))); StyledTooltipClose.defaultProps = { theme: _defaultTheme.default }; var StyledTooltipOverlay = _styledComponents.default.div.withConfig({ displayName: "TooltipContent__StyledTooltipOverlay", componentId: "sc-1umu28w-4" })(["position:fixed;display:block;visibility:", ";width:100%;height:100%;top:0;right:0;bottom:0;left:0;background-color:rgba(23,27,30,0.6);z-index:10011;opacity:", ";transition:opacity ", " ease-in-out,visibility ", " linear ", ";", ";"], function (_ref31) { var shownMobile = _ref31.shownMobile; return shownMobile ? "visible" : "hidden"; }, function (_ref32) { var shownMobile = _ref32.shownMobile; return shownMobile ? "1" : "0"; }, function (_ref33) { var theme = _ref33.theme; return theme.orbit.durationNormal; }, function (_ref34) { var theme = _ref34.theme; return theme.orbit.durationFast; }, function (_ref35) { var shownMobile = _ref35.shownMobile, theme = _ref35.theme; return !shownMobile && theme.orbit.durationNormal; }, _index3.default.largeMobile((0, _styledComponents.css)(["display:none;visibility:hidden;"]))); StyledTooltipOverlay.defaultProps = { theme: _defaultTheme.default }; var TooltipContent = function TooltipContent(_ref36) { var dataTest = _ref36.dataTest, shownMobile = _ref36.shownMobile, shown = _ref36.shown, size = _ref36.size, tooltipId = _ref36.tooltipId, children = _ref36.children, onClose = _ref36.onClose, onCloseMobile = _ref36.onCloseMobile, onEnter = _ref36.onEnter, preferredPosition = _ref36.preferredPosition, containerRef = _ref36.containerRef; var theme = (0, _useTheme.default)(); var overlay = (0, _react.useRef)(null); var tooltip = (0, _react.useRef)(null); var content = (0, _react.useRef)(null); var _useMemo = (0, _react.useMemo)(function () { return (0, _sortPositionsAndAligns.default)(preferredPosition, theme); }, [preferredPosition, theme]), _useMemo2 = _slicedToArray(_useMemo, 2), positions = _useMemo2[0], aligns = _useMemo2[1]; var dimensions = (0, _useDimensions.default)({ containerRef: containerRef, tooltip: tooltip, content: content }, children); var position = (0, _react.useMemo)(function () { return (0, _calculateTooltipPosition.default)(positions, dimensions); }, [dimensions, positions]); var align = (0, _react.useMemo)(function () { return (0, _calculateTooltipAlign.default)(position, aligns, dimensions); }, [aligns, dimensions, position]); var handleClickOutside = (0, _react.useCallback)(function (ev) { ev.stopPropagation(); if (ev.target === overlay.current) { onCloseMobile(); } }, [onCloseMobile]); return _react.default.createElement(StyledTooltip, { "data-test": dataTest }, _react.default.createElement(StyledTooltipOverlay, { shownMobile: shownMobile, ref: overlay, onClick: handleClickOutside }), _react.default.createElement(StyledTooltipWrapper, { shown: shown && position && align, shownMobile: shownMobile, size: size, align: align, position: position, ref: tooltip, containerTop: dimensions.containerTop, containerLeft: dimensions.containerLeft, containerHeight: dimensions.containerHeight, containerWidth: dimensions.containerWidth, tooltipHeight: dimensions.tooltipHeight, tooltipWidth: dimensions.tooltipWidth, contentHeight: dimensions.contentHeight, role: "tooltip", "aria-hidden": !shown && !shownMobile, id: tooltipId, onMouseEnter: onEnter, onMouseLeave: onClose }, _react.default.createElement(StyledTooltipContent, { ref: content }, children), _react.default.createElement(StyledTooltipClose, null, _react.default.createElement(_Button.default, { type: "secondary", block: true, onClick: onCloseMobile }, _react.default.createElement(_Translate.default, { tKey: "button_close" }))))); }; var _default = TooltipContent; exports.default = _default;