UNPKG

pouncejs

Version:

A collection of UI components from Panther labs

76 lines (72 loc) 2.43 kB
import _extends from "@babel/runtime/helpers/extends"; import React from 'react'; import { useTooltip, TooltipPopup } from '@reach/tooltip'; import { useTransition, animated } from 'react-spring'; import { useAlignmentFunction } from '../../utils/useAlignment'; import Box from '../Box'; var AnimatedTooltipPopup = animated(TooltipPopup); var DefaultWrapper = function DefaultWrapper(_ref) { var children = _ref.children; return /*#__PURE__*/React.createElement(Box, { borderRadius: "medium", bg: "navyblue-300", p: 4, m: 2, fontSize: "small", boxShadow: "dark250" }, children); }; /** A tooltip is a helper that shows some helping text when hovering or clicking something */ var Tooltip = /*#__PURE__*/React.forwardRef(function Tooltip(_ref2, ref) { var content = _ref2.content, _ref2$alignment = _ref2.alignment, alignment = _ref2$alignment === void 0 ? 'right-center' : _ref2$alignment, _ref2$wrapper = _ref2.wrapper, wrapper = _ref2$wrapper === void 0 ? DefaultWrapper : _ref2$wrapper, children = _ref2.children; var _useTooltip = useTooltip(), trigger = _useTooltip[0], triggerRect = _useTooltip[1].triggerRect, isVisible = _useTooltip[2]; var alignmentFunction = useAlignmentFunction(alignment); var transitions = useTransition(isVisible, null, { from: { opacity: 0, transform: 'scale(0.95, 0.95)' }, enter: { opacity: 1, transform: 'scale(1, 1)' }, leave: { opacity: 0, transform: 'scale(0.95, 0.95)' }, config: { duration: 150 } }); var childrenWithHandler = React.useMemo(function () { return /*#__PURE__*/React.cloneElement(children, trigger); }, [children, trigger]); var Wrapper = wrapper; return /*#__PURE__*/React.createElement(React.Fragment, null, childrenWithHandler, transitions.map(function (_ref3) { var item = _ref3.item, key = _ref3.key, styles = _ref3.props; return item && /*#__PURE__*/React.createElement(AnimatedTooltipPopup, { triggerRect: triggerRect, isVisible: item, key: key, style: _extends({}, styles, { zIndex: 11, position: 'absolute' }), ref: ref, position: alignmentFunction, as: 'div', label: /*#__PURE__*/React.createElement(Wrapper, null, content) }); })); }); export default /*#__PURE__*/React.memo(Tooltip);