UNPKG

@smart-react-components/ui

Version:
39 lines (38 loc) 3.84 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TriggerInteraction = exports.Position = void 0; const CSSTransition_1 = __importDefault(require("@smart-react-components/transition/CSSTransition")); const react_1 = __importDefault(require("react")); const react_dom_1 = require("react-dom"); const styled_components_1 = require("styled-components"); const TooltipElement_1 = __importDefault(require("../components/Tooltip/TooltipElement")); const PopoverArrow_1 = __importDefault(require("../components/Popover/PopoverArrow")); const useFixedBoxMethods_1 = __importDefault(require("../hooks/useFixedBoxMethods")); const types_1 = require("../types"); const dom_1 = require("../util/dom"); const popover_1 = require("../util/popover"); var types_2 = require("../types"); Object.defineProperty(exports, "Position", { enumerable: true, get: function () { return types_2.Position; } }); Object.defineProperty(exports, "TriggerInteraction", { enumerable: true, get: function () { return types_2.TriggerInteraction; } }); const Tooltip = react_1.default.forwardRef(({ afterHide, afterShow, beforeHide, beforeShow, children, hasHideAnimation = true, hasShowAnimation = true, hoverDelay, isDismissible, isSoft, palette = '!dynamic', position = types_1.Position.TOP, setStatus, size = 'medium', sizeSm, sizeMd, sizeLg, sizeXl, space = 0, status, transitionClassName, transitionDuration, triggerInteraction = types_1.TriggerInteraction.CLICK | types_1.TriggerInteraction.HOVER }, forwardRef) => { var _a; const theme = react_1.default.useContext(styled_components_1.ThemeContext); const triggerEl = react_1.default.useRef(null); const boxEl = react_1.default.useRef(null); const arrowEl = react_1.default.useRef(null); const getTriggerEl = () => { var _a; return ((_a = forwardRef !== null && forwardRef !== void 0 ? forwardRef : children[0].ref) !== null && _a !== void 0 ? _a : triggerEl).current; }; const getTransitionDuration = () => transitionDuration !== null && transitionDuration !== void 0 ? transitionDuration : theme.$.transition.tooltipDuration; const handlePosition = () => (0, popover_1.calculatePosition)(getTriggerEl(), boxEl.current, null, arrowEl.current, position, space); const { getStatus, handleBeforeShow, } = (0, useFixedBoxMethods_1.default)({ beforeShow, boxEl, getTriggerEl, handlePosition, hoverDelay, isDismissible, key: 'tooltip', setStatus, status, triggerInteraction }); const content = (react_1.default.createElement(CSSTransition_1.default, { afterHide: afterHide, afterShow: afterShow, beforeHide: beforeHide, beforeShow: handleBeforeShow, className: transitionClassName !== null && transitionClassName !== void 0 ? transitionClassName : 'src-tooltip', duration: getTransitionDuration(), hasHideAnimation: hasHideAnimation, hasShowAnimation: hasShowAnimation, status: getStatus() }, react_1.default.createElement(TooltipElement_1.default, { duration: getTransitionDuration(), hasTransition: !transitionClassName, isSoft: isSoft, palette: palette, tooltipSize: size, tooltipSizeSm: sizeSm, tooltipSizeMd: sizeMd, tooltipSizeLg: sizeLg, tooltipSizeXl: sizeXl, ref: boxEl }, children[1], react_1.default.createElement(PopoverArrow_1.default, { ref: arrowEl })))); return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.cloneElement(children[0], { ref: (_a = forwardRef !== null && forwardRef !== void 0 ? forwardRef : children[0].ref) !== null && _a !== void 0 ? _a : triggerEl }), (0, dom_1.canBeRenderedInPortal)() ? (0, react_dom_1.createPortal)(content, document.body) : content)); }); exports.default = Tooltip;