@activecollab/components
Version:
ActiveCollab Components
89 lines • 3.03 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["children"];
import React, { useState, forwardRef } from "react";
import classnames from "classnames";
import { StyledTooltip } from "./Styles";
import { Portal, useLayerContext } from "../../helpers";
import { layers } from "../../utils";
import useForkRef from "../../utils/useForkRef";
import { Popper } from "../Popper";
import { FromElement } from "../Transitions/FromElement";
const TooltipAnimation = _ref => {
let {
children
} = _ref,
props = _objectWithoutPropertiesLoose(_ref, _excluded);
return /*#__PURE__*/React.createElement(FromElement, _extends({
timeout: 0
}, props), children);
};
export const Tooltip = /*#__PURE__*/forwardRef((_ref2, ref) => {
let {
children,
title,
className,
style,
isLight = false,
placement = "top",
TransitionComponent = TooltipAnimation,
popperTooltipStyle,
popperTooltipClassName,
disable
} = _ref2;
const {
zIndex = layers.skyscraper
} = useLayerContext();
const [open, setOpen] = useState(false);
const [childNode, setChildNode] = useState();
const handleEnter = event => {
const childrenProps = children.props;
if (event.type === "mouseover" && childrenProps.onMouseOver) {
childrenProps.onMouseOver(event);
}
childNode && childNode.removeAttribute("title");
setOpen(true);
};
const handleLeave = event => {
const childrenProps = children.props;
if (event.type === "mouseleave" && childrenProps.onMouseLeave && event.currentTarget === childNode) {
childrenProps.onMouseLeave(event);
}
setOpen(false);
};
const handleOwnRef = useForkRef(children.ref, ref);
const handleRef = useForkRef(setChildNode, handleOwnRef);
const childrenProps = {
onMouseOver: handleEnter,
onMouseLeave: handleLeave,
ref: handleRef
};
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(children, childrenProps), !disable && /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Popper, {
anchorEl: childNode,
open: childNode ? open : false,
placement: placement,
transition: true,
className: popperTooltipClassName,
style: _extends({
zIndex
}, popperTooltipStyle),
role: "tooltip"
}, _ref3 => {
let {
transitionProps = {}
} = _ref3;
return (
/*#__PURE__*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore - due to @node/types making ts more strict
React.createElement(TransitionComponent, _extends({}, transitionProps, {
style: style
}), /*#__PURE__*/React.createElement(StyledTooltip, {
className: classnames("c-tooltip-ds", className),
$isLight: isLight
}, title))
);
})));
});
Tooltip.displayName = "Tooltip";
//# sourceMappingURL=Tooltip.js.map