@daveyplate/better-auth-ui
Version:
Plug & play shadcn/ui components for better-auth
41 lines (32 loc) • 1.1 kB
text/typescript
import { useEffect, useRef, useState } from "react"
export function useIsOverflow<T extends HTMLElement>() {
const [isOverflow, setIsOverflow] = useState(false)
const ref = useRef<T>(null)
const triggerRef = useRef<unknown>(undefined)
// Monitor overflow state
useEffect(() => {
const element = ref.current
if (!element) {
setIsOverflow(false)
return
}
// Reset if trigger changed
const currentTrigger = element.textContent
if (triggerRef.current !== currentTrigger) {
triggerRef.current = currentTrigger
setIsOverflow(false)
}
const checkOverflow = () => {
setIsOverflow(element.offsetWidth < element.scrollWidth)
}
// Check immediately
checkOverflow()
// Use ResizeObserver to watch for size changes
const resizeObserver = new ResizeObserver(checkOverflow)
resizeObserver.observe(element)
return () => {
resizeObserver.disconnect()
}
})
return { ref, isOverflow }
}