nishant-design-system
Version:
Sense UI components library
99 lines (97 loc) • 5.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Tooltip = exports.DELAY_MOTION_DURATION_TYPES = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactDom = require("react-dom");
var _reactDomInteractions = require("@floating-ui/react-dom-interactions");
var ELEVATION = _interopRequireWildcard(require("../../styles/variables/_elevation"));
var MOTION = _interopRequireWildcard(require("../../styles/variables/_motion"));
var _space = require("../../styles/variables/_space");
var _classify = require("../../utils/classify");
var _mergeRefs = require("../../utils/merge-refs");
var _string = require("../../utils/string");
var _Truncate = require("../Truncate");
var _TooltipModule = _interopRequireDefault(require("./Tooltip.module.css"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
const DELAY_MOTION_DURATION_TYPES = Object.freeze({
none: 'none',
fast: 'fast',
normal: 'normal',
slow: 'slow',
slower: 'slower',
slowest: 'slowest'
});
exports.DELAY_MOTION_DURATION_TYPES = DELAY_MOTION_DURATION_TYPES;
const Tooltip = _ref => {
let {
classNames,
children,
title,
body,
placement = 'top',
bodyMaxLines = 2,
titleMaxLines = 1,
delayMotionDuration = 'none',
elevation = ELEVATION['elevationTooltip']
} = _ref;
const bodyRef = React.useRef(document.querySelector('body'));
const [open, setOpen] = React.useState(false);
const {
x,
y,
reference,
floating,
strategy,
context
} = (0, _reactDomInteractions.useFloating)({
placement,
open,
onOpenChange: setOpen,
middleware: [(0, _reactDomInteractions.offset)(parseInt(_space.spaceXXSmall)), (0, _reactDomInteractions.flip)(), (0, _reactDomInteractions.shift)()],
whileElementsMounted: _reactDomInteractions.autoUpdate
});
const motionDurationToken = 'motionDuration' + (0, _string.capitalize)(delayMotionDuration);
const hoverDelay = parseInt(MOTION[motionDurationToken]) === NaN ? 0 : parseInt(MOTION[motionDurationToken]);
const {
getReferenceProps,
getFloatingProps
} = (0, _reactDomInteractions.useInteractions)([(0, _reactDomInteractions.useHover)(context, {
delay: {
open: hoverDelay,
close: 0
}
}), (0, _reactDomInteractions.useFocus)(context), (0, _reactDomInteractions.useRole)(context, {
role: 'tooltip'
}), (0, _reactDomInteractions.useDismiss)(context)]);
// Note(Nishant) Preserve the consumer's ref
const ref = React.useMemo(() => (0, _mergeRefs.mergeRefs)([reference, children.ref]), [reference, children]);
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(children, getReferenceProps({
ref,
...children.props
})), open && /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/React.createElement("div", _extends({
ref: floating,
className: (0, _classify.classify)(_TooltipModule.default.tooltip, classNames?.tooltip),
style: {
position: strategy,
top: y ?? _space.spaceNone,
left: x ?? _space.spaceNone,
'--tooltip-elevation': elevation
}
}, getFloatingProps()), !!title && /*#__PURE__*/React.createElement(_Truncate.Truncate, {
line: titleMaxLines
}, /*#__PURE__*/React.createElement("div", {
className: (0, _classify.classify)(_TooltipModule.default.title, classNames?.title)
}, title)), !!body && /*#__PURE__*/React.createElement(_Truncate.Truncate, {
line: bodyMaxLines
}, /*#__PURE__*/React.createElement("div", {
className: (0, _classify.classify)(_TooltipModule.default.body, {
[_TooltipModule.default.hasTitle]: !!title
}, classNames?.body)
}, body))), bodyRef.current));
};
exports.Tooltip = Tooltip;