import type { UseInViewOptions } from "motion/react"; import { useInView } from "motion/react"; import * as React from "react"; type UseIsInViewOptions = { inView?: boolean; inViewOnce?: boolean; inViewMargin?: UseInViewOptions["margin"]; }; function useIsInView( ref: React.Ref, options: UseIsInViewOptions = {}, ) { const { inView, inViewOnce = false, inViewMargin = "0px" } = options; const localRef = React.useRef(null); React.useImperativeHandle(ref, () => localRef.current as T); const inViewResult = useInView(localRef, { once: inViewOnce, margin: inViewMargin, }); const isInView = !inView || inViewResult; return { ref: localRef, isInView }; } export { useIsInView, type UseIsInViewOptions };