{"version":3,"file":"TruncatedText.cjs","sources":["../../../../src/components/Text/TruncatedText.tsx"],"sourcesContent":["import { useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport * as React from 'react';\nimport ReactDOMServer from 'react-dom/server';\n\nimport { Tooltip } from '../Tooltip/Tooltip';\n\ninterface TruncatedTextProps {\n  childElement: (ref: React.ForwardedRef<HTMLElement> | undefined) => React.ReactElement;\n  children: NonNullable<React.ReactNode>;\n}\n\nexport const TruncatedText = React.forwardRef<HTMLElement, TruncatedTextProps>(({ childElement, children }, ref) => {\n  const [isOverflowing, setIsOverflowing] = useState(false);\n  const internalRef = useRef<HTMLElement>(null);\n\n  // Wire up the forwarded ref to the internal ref\n  useImperativeHandle<HTMLElement | null, HTMLElement | null>(ref, () => internalRef.current);\n\n  const resizeObserver = useMemo(\n    () =>\n      new ResizeObserver((entries) => {\n        for (const entry of entries) {\n          if (entry.target.clientWidth && entry.target.scrollWidth) {\n            if (entry.target.scrollWidth > entry.target.clientWidth) {\n              setIsOverflowing(true);\n            }\n            if (entry.target.scrollWidth <= entry.target.clientWidth) {\n              setIsOverflowing(false);\n            }\n          }\n        }\n      }),\n    []\n  );\n\n  useEffect(() => {\n    const { current } = internalRef;\n    if (current) {\n      resizeObserver.observe(current);\n    }\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, [setIsOverflowing, resizeObserver]);\n\n  const getTooltipText = (children: NonNullable<React.ReactNode>) => {\n    if (typeof children === 'string') {\n      return children;\n    }\n    const html = ReactDOMServer.renderToStaticMarkup(<>{children}</>);\n    return html.replace(/(<([^>]+)>)/gi, '');\n  };\n\n  if (isOverflowing) {\n    return (\n      <Tooltip ref={internalRef} content={getTooltipText(children)}>\n        {childElement(undefined)}\n      </Tooltip>\n    );\n  } else {\n    return childElement(internalRef);\n  }\n});\n\nTruncatedText.displayName = 'TruncatedText';\n"],"names":["React","useState","useRef","useImperativeHandle","useMemo","useEffect","children","ReactDOMServer","jsx","Fragment","Tooltip"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAM,aAAA,GAAgBA,iBAAM,UAAA,CAA4C,CAAC,EAAE,YAAA,EAAc,QAAA,IAAY,GAAA,KAAQ;AAClH,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAS,KAAK,CAAA;AACxD,EAAA,MAAM,WAAA,GAAcC,aAAoB,IAAI,CAAA;AAG5C,EAAAC,yBAAA,CAA4D,GAAA,EAAK,MAAM,WAAA,CAAY,OAAO,CAAA;AAE1F,EAAA,MAAM,cAAA,GAAiBC,aAAA;AAAA,IACrB,MACE,IAAI,cAAA,CAAe,CAAC,OAAA,KAAY;AAC9B,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,KAAA,CAAM,MAAA,CAAO,WAAA,IAAe,KAAA,CAAM,OAAO,WAAA,EAAa;AACxD,UAAA,IAAI,KAAA,CAAM,MAAA,CAAO,WAAA,GAAc,KAAA,CAAM,OAAO,WAAA,EAAa;AACvD,YAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,UACvB;AACA,UAAA,IAAI,KAAA,CAAM,MAAA,CAAO,WAAA,IAAe,KAAA,CAAM,OAAO,WAAA,EAAa;AACxD,YAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,IACH;AAAC,GACH;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAE,SAAQ,GAAI,WAAA;AACpB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,cAAA,CAAe,QAAQ,OAAO,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,MAAM;AACX,MAAA,cAAA,CAAe,UAAA,EAAW;AAAA,IAC5B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,cAAc,CAAC,CAAA;AAErC,EAAA,MAAM,cAAA,GAAiB,CAACC,SAAAA,KAA2C;AACjE,IAAA,IAAI,OAAOA,cAAa,QAAA,EAAU;AAChC,MAAA,OAAOA,SAAAA;AAAA,IACT;AACA,IAAA,MAAM,OAAOC,+BAAA,CAAe,oBAAA,iBAAqBC,cAAA,CAAAC,mBAAA,EAAA,EAAG,QAAA,EAAAH,WAAS,CAAG,CAAA;AAChE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAAA,EACzC,CAAA;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,uBACEE,cAAA,CAACE,eAAA,EAAA,EAAQ,GAAA,EAAK,WAAA,EAAa,OAAA,EAAS,eAAe,QAAQ,CAAA,EACxD,QAAA,EAAA,YAAA,CAAa,KAAA,CAAS,CAAA,EACzB,CAAA;AAAA,EAEJ,CAAA,MAAO;AACL,IAAA,OAAO,aAAa,WAAW,CAAA;AAAA,EACjC;AACF,CAAC;AAED,aAAA,CAAc,WAAA,GAAc,eAAA;;;;"}