UNPKG

@grafana/ui

Version:
79 lines (71 loc) 2.63 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var jsxRuntime = require('react/jsx-runtime'); var React = require('react'); var ReactDOMServer = require('react-dom/server'); var Tooltip = require('../Tooltip/Tooltip.cjs'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } function _interopNamespaceCompat(e) { if (e && typeof e === 'object' && 'default' in e) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespaceCompat(React); var ReactDOMServer__default = /*#__PURE__*/_interopDefaultCompat(ReactDOMServer); "use strict"; const TruncatedText = React__namespace.forwardRef(({ childElement, children }, ref) => { const [isOverflowing, setIsOverflowing] = React.useState(false); const internalRef = React.useRef(null); React.useImperativeHandle(ref, () => internalRef.current); const resizeObserver = React.useMemo( () => new ResizeObserver((entries) => { for (const entry of entries) { if (entry.target.clientWidth && entry.target.scrollWidth) { if (entry.target.scrollWidth > entry.target.clientWidth) { setIsOverflowing(true); } if (entry.target.scrollWidth <= entry.target.clientWidth) { setIsOverflowing(false); } } } }), [] ); React.useEffect(() => { const { current } = internalRef; if (current) { resizeObserver.observe(current); } return () => { resizeObserver.disconnect(); }; }, [setIsOverflowing, resizeObserver]); const getTooltipText = (children2) => { if (typeof children2 === "string") { return children2; } const html = ReactDOMServer__default.default.renderToStaticMarkup(/* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: children2 })); return html.replace(/(<([^>]+)>)/gi, ""); }; if (isOverflowing) { return /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { ref: internalRef, content: getTooltipText(children), children: childElement(void 0) }); } else { return childElement(internalRef); } }); TruncatedText.displayName = "TruncatedText"; exports.TruncatedText = TruncatedText; //# sourceMappingURL=TruncatedText.cjs.map