{"version":3,"sources":["../src/useIntersectionObserver.ts","../src/utils/isBrowser.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { isBrowser } from \"./utils/isBrowser\";\n\nexport const useIntersectionObserver = <\n  E extends Element | null | undefined = HTMLElement,\n>(\n  ref: React.RefObject<E>,\n  options: IntersectionObserverInit = {},\n) => {\n  const [isIntersecting, setIsIntersecting] = useState<boolean>(false);\n  const observer = useRef<IntersectionObserver>(null);\n  const disconnect = useCallback(() => {\n    observer?.current?.disconnect();\n  }, []);\n\n  useEffect(() => {\n    if (!isBrowser) {\n      return;\n    }\n    const element = ref.current;\n    if (!element) {\n      return;\n    }\n    observer.current = new IntersectionObserver((entries) => {\n      /* istanbul ignore next */\n      if (!entries.length) {\n        return;\n      }\n      setIsIntersecting(entries[0].isIntersecting);\n    }, options);\n\n    observer.current.observe(element);\n    return () => {\n      disconnect();\n    };\n  }, [disconnect, options, ref]);\n\n  return { isIntersecting, disconnect };\n};\n","export const isBrowser =\n  typeof window !== \"undefined\" &&\n  typeof document !== \"undefined\" &&\n  window.document === document;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyD;;;ACAlD,IAAM,YACX,OAAO,WAAW,eAClB,OAAO,aAAa,eACpB,OAAO,aAAa;;;ADAf,IAAM,0BAA0B,CAGrC,KACA,UAAoC,CAAC,MAClC;AACH,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAkB,KAAK;AACnE,QAAM,eAAW,qBAA6B,IAAI;AAClD,QAAM,iBAAa,0BAAY,MAAM;AACnC,cAAU,SAAS,WAAW;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AACA,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,aAAS,UAAU,IAAI,qBAAqB,CAAC,YAAY;AAEvD,UAAI,CAAC,QAAQ,QAAQ;AACnB;AAAA,MACF;AACA,wBAAkB,QAAQ,CAAC,EAAE,cAAc;AAAA,IAC7C,GAAG,OAAO;AAEV,aAAS,QAAQ,QAAQ,OAAO;AAChC,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,YAAY,SAAS,GAAG,CAAC;AAE7B,SAAO,EAAE,gBAAgB,WAAW;AACtC;","names":[]}