{"version":3,"file":"useElementHeight.cjs","sources":["../../../../components/data-view/hooks/useElementHeight.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Measures a DOM element's height and keeps it up to date via `ResizeObserver`.\n * Returns a ref callback to attach to the element, plus the latest height.\n *\n * Used by the List renderer to track the column-header row's height so sticky\n * group headers and the sticky-group anchor can position themselves directly\n * underneath it, regardless of variant, custom header content, or hidden\n * headers.\n */\nexport function useElementHeight() {\n  const [height, setHeight] = useState(0);\n  const observerRef = useRef<ResizeObserver | null>(null);\n  const elementRef = useRef<HTMLElement | null>(null);\n\n  const cleanup = useCallback(() => {\n    if (observerRef.current) {\n      observerRef.current.disconnect();\n      observerRef.current = null;\n    }\n  }, []);\n\n  const ref = useCallback(\n    (el: HTMLElement | null) => {\n      cleanup();\n      elementRef.current = el;\n      if (!el) {\n        setHeight(0);\n        return;\n      }\n      setHeight(el.getBoundingClientRect().height);\n      if (typeof ResizeObserver === 'undefined') return;\n      const observer = new ResizeObserver(entries => {\n        const entry = entries[0];\n        if (!entry) return;\n        const next = entry.contentRect.height;\n        setHeight(prev => (Math.abs(prev - next) < 0.5 ? prev : next));\n      });\n      observer.observe(el);\n      observerRef.current = observer;\n    },\n    [cleanup]\n  );\n\n  useEffect(() => cleanup, [cleanup]);\n\n  return [ref, height] as const;\n}\n"],"names":[],"mappings":";;;;;AAIA;;;;;;;;AAQG;;;AAGD;AACA;AAEA;AACE;AACE;AACA;;;AAIJ;AAEI;AACA;;;;;;;;AAOA;AACE;AACA;;AACA;;AAEF;AACA;AACA;AACF;;AAMF;AACF;;"}