{"version":3,"sources":["../../src/useInView/useInView.ts"],"names":["useRef","useState","useEffect","useEnhancedEffect","usePrevious","observe","useInView","threshold","delay","trackVisibility","rootMargin","root","triggerOnce","skip","initialInView","fallbackInView","onChange","_a","_b","ref","state","setState","unobserve","inView","entry","entryTarget","previousEntryTarget","useInView_default"],"mappings":"8BAAA,OAAS,UAAAA,EAAQ,YAAAC,EAAU,aAAAC,MAAiB,QAC5C,OAAOC,MAAuB,yCAC9B,OAAOC,MAAiB,6BAExB,OAAS,WAAAC,MAAe,UAExB,MAAMC,EAAuB,CAAC,CAC5B,UAAAC,EACA,MAAAC,EACA,gBAAAC,EACA,WAAAC,EACA,KAAAC,EACA,YAAAC,EACA,KAAAC,EACA,cAAAC,EACA,eAAAC,EACA,SAAAC,CACF,EAAI,CAAC,IAAM,CAjBX,IAAAC,EAAAC,EAkBE,MAAMC,EAAMnB,EAAiC,IAAI,EAE3C,CAACoB,EAAOC,CAAQ,EAAIpB,EAAyB,CACjD,OAAQ,CAAC,CAACa,EACV,MAAO,MACT,CAAC,EAEDX,EAAkB,IAAM,CACtB,GAAIU,GAAQ,CAACM,EAAI,QACf,OAGF,IAAIG,EAEJ,OAAAA,EAAYjB,EACVc,EAAI,QACJ,CAACI,EAAQC,IAAU,CACjBH,EAAS,CACP,OAAAE,EACA,MAAAC,CACF,CAAC,EAEDR,GAAA,MAAAA,EAAWO,EAAQC,GAEfA,EAAM,gBAAkBZ,GAAeU,IACzCA,EAAU,EACVA,EAAY,OAEhB,EACA,CACE,KAAAX,EACA,WAAAD,EACA,UAAAH,EACA,gBAAAE,EACA,MAAAD,CACF,EACAO,CACF,EAEO,IAAM,CACPO,GACFA,EAAU,CAEd,CACF,EAAG,CACD,MAAM,QAAQf,CAAS,EAAIA,EAAU,SAAS,EAAIA,EAClDY,EACAR,EACAD,EACAE,EACAC,EACAJ,EACAM,EACAP,CACF,CAAC,EAED,MAAMiB,GAAcR,EAAAG,EAAM,QAAN,YAAAH,EAAa,OAE3BS,EAAsBtB,GAAYc,EAAAE,EAAM,QAAN,YAAAF,EAAa,MAAM,EAE3D,OAAAhB,EAAU,IAAM,CACV,CAACiB,GAAOM,GAAe,CAACb,GAAe,CAACC,GAAQa,IAAwBD,GAC1EJ,EAAS,CACP,OAAQ,CAAC,CAACP,EACV,MAAO,MACT,CAAC,CAEL,EAAG,CAACA,EAAeF,EAAaC,EAAMY,EAAaC,CAAmB,CAAC,EAEhE,CACL,IAAAP,EACA,OAAQC,EAAM,OACd,MAAOA,EAAM,KACf,CACF,EAEA,IAAOO,EAAQrB","sourcesContent":["import { useRef, useState, useEffect } from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect/useEnhancedEffect';\nimport usePrevious from '../usePrevious/usePrevious';\nimport type { UseInView, UseInViewState } from './types';\nimport { observe } from './utils';\n\nconst useInView: UseInView = ({\n  threshold,\n  delay,\n  trackVisibility,\n  rootMargin,\n  root,\n  triggerOnce,\n  skip,\n  initialInView,\n  fallbackInView,\n  onChange\n} = {}) => {\n  const ref = useRef<NonNullable<typeof root>>(null);\n\n  const [state, setState] = useState<UseInViewState>({\n    inView: !!initialInView,\n    entry: undefined\n  });\n\n  useEnhancedEffect(() => {\n    if (skip || !ref.current) {\n      return;\n    }\n\n    let unobserve: (() => void) | undefined;\n\n    unobserve = observe(\n      ref.current,\n      (inView, entry) => {\n        setState({\n          inView,\n          entry\n        });\n\n        onChange?.(inView, entry);\n\n        if (entry.isIntersecting && triggerOnce && unobserve) {\n          unobserve();\n          unobserve = undefined;\n        }\n      },\n      {\n        root,\n        rootMargin,\n        threshold,\n        trackVisibility,\n        delay\n      } as IntersectionObserverInit,\n      fallbackInView\n    );\n\n    return () => {\n      if (unobserve) {\n        unobserve();\n      }\n    };\n  }, [\n    Array.isArray(threshold) ? threshold.toString() : threshold,\n    ref,\n    root,\n    rootMargin,\n    triggerOnce,\n    skip,\n    trackVisibility,\n    fallbackInView,\n    delay\n  ]);\n\n  const entryTarget = state.entry?.target;\n\n  const previousEntryTarget = usePrevious(state.entry?.target);\n\n  useEffect(() => {\n    if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget !== entryTarget) {\n      setState({\n        inView: !!initialInView,\n        entry: undefined\n      });\n    }\n  }, [initialInView, triggerOnce, skip, entryTarget, previousEntryTarget]);\n\n  return {\n    ref,\n    inView: state.inView,\n    entry: state.entry\n  };\n};\n\nexport default useInView;\n"]}