{"version":3,"names":["useEffect","useRef","findNodeHandle","useEvent","useSharedValue","scrollEventNames","useScrollViewOffset","animatedRef","initialRef","offsetRef","undefined","eventHandler","event","current","value","contentOffset","x","y","_eventHandler$current","viewTag","registerForEvents","_eventHandler$current2","unregisterFromEvents"],"sources":["useScrollViewOffset.ts"],"sourcesContent":["'use strict';\nimport { useEffect, useRef } from 'react';\nimport type { SharedValue } from '../commonTypes';\nimport { findNodeHandle } from 'react-native';\nimport type { EventHandlerInternal } from './useEvent';\nimport { useEvent } from './useEvent';\nimport { useSharedValue } from './useSharedValue';\nimport type { AnimatedScrollView } from '../component/ScrollView';\nimport type {\n AnimatedRef,\n RNNativeScrollEvent,\n ReanimatedScrollEvent,\n} from './commonTypes';\n\nconst scrollEventNames = [\n 'onScroll',\n 'onScrollBeginDrag',\n 'onScrollEndDrag',\n 'onMomentumScrollBegin',\n 'onMomentumScrollEnd',\n];\n\n/**\n * Lets you synchronously get the current offset of a `ScrollView`.\n *\n * @param animatedRef - An [animated ref](https://docs.swmansion.com/react-native-reanimated/docs/core/useAnimatedRef) attached to an Animated.ScrollView component.\n * @returns A shared value which holds the current offset of the `ScrollView`.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/scroll/useScrollViewOffset\n */\nexport function useScrollViewOffset(\n animatedRef: AnimatedRef,\n initialRef?: SharedValue\n): SharedValue {\n const offsetRef = useRef(\n // eslint-disable-next-line react-hooks/rules-of-hooks\n initialRef !== undefined ? initialRef : useSharedValue(0)\n );\n\n const eventHandler = useEvent(\n (event: ReanimatedScrollEvent) => {\n 'worklet';\n offsetRef.current.value =\n event.contentOffset.x === 0\n ? event.contentOffset.y\n : event.contentOffset.x;\n },\n scrollEventNames\n // Read https://github.com/software-mansion/react-native-reanimated/pull/5056\n // for more information about this cast.\n ) as unknown as EventHandlerInternal;\n\n useEffect(() => {\n const viewTag = findNodeHandle(animatedRef.current);\n eventHandler.current?.registerForEvents(viewTag as number);\n\n return () => {\n eventHandler.current?.unregisterFromEvents();\n };\n }, [animatedRef.current]);\n\n return offsetRef.current;\n}\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEzC,SAASC,cAAc,QAAQ,cAAc;AAE7C,SAASC,QAAQ,QAAQ,YAAY;AACrC,SAASC,cAAc,QAAQ,kBAAkB;AAQjD,MAAMC,gBAAgB,GAAG,CACvB,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,CACtB;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CACjCC,WAA4C,EAC5CC,UAAgC,EACX;EACrB,MAAMC,SAAS,GAAGR,MAAM;EACtB;EACAO,UAAU,KAAKE,SAAS,GAAGF,UAAU,GAAGJ,cAAc,CAAC,CAAC,CAAC,CAC1D;EAED,MAAMO,YAAY,GAAGR,QAAQ,CAC1BS,KAA4B,IAAK;IAChC,SAAS;;IACTH,SAAS,CAACI,OAAO,CAACC,KAAK,GACrBF,KAAK,CAACG,aAAa,CAACC,CAAC,KAAK,CAAC,GACvBJ,KAAK,CAACG,aAAa,CAACE,CAAC,GACrBL,KAAK,CAACG,aAAa,CAACC,CAAC;EAC7B,CAAC,EACDX;EACA;EACA;EAAA,CACyD;;EAE3DL,SAAS,CAAC,MAAM;IAAA,IAAAkB,qBAAA;IACd,MAAMC,OAAO,GAAGjB,cAAc,CAACK,WAAW,CAACM,OAAO,CAAC;IACnD,CAAAK,qBAAA,GAAAP,YAAY,CAACE,OAAO,cAAAK,qBAAA,uBAApBA,qBAAA,CAAsBE,iBAAiB,CAACD,OAAO,CAAW;IAE1D,OAAO,MAAM;MAAA,IAAAE,sBAAA;MACX,CAAAA,sBAAA,GAAAV,YAAY,CAACE,OAAO,cAAAQ,sBAAA,uBAApBA,sBAAA,CAAsBC,oBAAoB,EAAE;IAC9C,CAAC;EACH,CAAC,EAAE,CAACf,WAAW,CAACM,OAAO,CAAC,CAAC;EAEzB,OAAOJ,SAAS,CAACI,OAAO;AAC1B"}