{"version":3,"file":"ScrollAreaScrollbarScroll.mjs","sources":["../../../../src/components/ScrollArea/ScrollAreaScrollbar/ScrollAreaScrollbarScroll.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react';\nimport { useDebouncedCallback } from '@raikou/hooks';\nimport { useScrollAreaContext } from '../ScrollArea.context';\nimport { composeEventHandlers } from '../utils';\nimport {\n  ScrollAreaScrollbarVisible,\n  ScrollAreaScrollbarVisibleProps,\n} from './ScrollAreaScrollbarVisible';\n\ninterface ScrollAreaScrollbarScrollProps extends ScrollAreaScrollbarVisibleProps {\n  forceMount?: true;\n}\n\nexport const ScrollAreaScrollbarScroll = forwardRef<HTMLDivElement, ScrollAreaScrollbarScrollProps>(\n  (props, red) => {\n    const { forceMount, ...scrollbarProps } = props;\n    const context = useScrollAreaContext();\n    const isHorizontal = props.orientation === 'horizontal';\n    const [state, setState] = useState<'hidden' | 'idle' | 'interacting' | 'scrolling'>('hidden');\n    const debounceScrollEnd = useDebouncedCallback(() => setState('idle'), 100);\n\n    useEffect(() => {\n      if (state === 'idle') {\n        const hideTimer = window.setTimeout(() => setState('hidden'), context.scrollHideDelay);\n        return () => window.clearTimeout(hideTimer);\n      }\n\n      return undefined;\n    }, [state, context.scrollHideDelay]);\n\n    useEffect(() => {\n      const { viewport } = context;\n      const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n\n      if (viewport) {\n        let prevScrollPos = viewport[scrollDirection];\n        const handleScroll = () => {\n          const scrollPos = viewport[scrollDirection];\n          const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n          if (hasScrollInDirectionChanged) {\n            setState('scrolling');\n            debounceScrollEnd();\n          }\n          prevScrollPos = scrollPos;\n        };\n        viewport.addEventListener('scroll', handleScroll);\n        return () => viewport.removeEventListener('scroll', handleScroll);\n      }\n\n      return undefined;\n    }, [context.viewport, isHorizontal, debounceScrollEnd]);\n\n    if (forceMount || state !== 'hidden') {\n      return (\n        <ScrollAreaScrollbarVisible\n          data-state={state === 'hidden' ? 'hidden' : 'visible'}\n          {...scrollbarProps}\n          ref={red}\n          onPointerEnter={composeEventHandlers(props.onPointerEnter, () => setState('interacting'))}\n          onPointerLeave={composeEventHandlers(props.onPointerLeave, () => setState('idle'))}\n        />\n      );\n    }\n\n    return null;\n  }\n);\n"],"names":[],"mappings":";;;;;;;AAaO,MAAM,yBAA4B,GAAA,UAAA;AAAA,EACvC,CAAC,OAAO,GAAQ,KAAA;AACd,IAAA,MAAM,EAAE,UAAA,EAAY,GAAG,cAAA,EAAmB,GAAA,KAAA;AAC1C,IAAA,MAAM,UAAU,oBAAqB,EAAA;AACrC,IAAM,MAAA,YAAA,GAAe,MAAM,WAAgB,KAAA,YAAA;AAC3C,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAA0D,QAAQ,CAAA;AAC5F,IAAA,MAAM,oBAAoB,oBAAqB,CAAA,MAAM,QAAS,CAAA,MAAM,GAAG,GAAG,CAAA;AAE1E,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,QAAM,MAAA,SAAA,GAAY,OAAO,UAAW,CAAA,MAAM,SAAS,QAAQ,CAAA,EAAG,QAAQ,eAAe,CAAA;AACrF,QAAO,OAAA,MAAM,MAAO,CAAA,YAAA,CAAa,SAAS,CAAA;AAAA;AAG5C,MAAO,OAAA,KAAA,CAAA;AAAA,KACN,EAAA,CAAC,KAAO,EAAA,OAAA,CAAQ,eAAe,CAAC,CAAA;AAEnC,IAAA,SAAA,CAAU,MAAM;AACd,MAAM,MAAA,EAAE,UAAa,GAAA,OAAA;AACrB,MAAM,MAAA,eAAA,GAAkB,eAAe,YAAe,GAAA,WAAA;AAEtD,MAAA,IAAI,QAAU,EAAA;AACZ,QAAI,IAAA,aAAA,GAAgB,SAAS,eAAe,CAAA;AAC5C,QAAA,MAAM,eAAe,MAAM;AACzB,UAAM,MAAA,SAAA,GAAY,SAAS,eAAe,CAAA;AAC1C,UAAA,MAAM,8BAA8B,aAAkB,KAAA,SAAA;AACtD,UAAA,IAAI,2BAA6B,EAAA;AAC/B,YAAA,QAAA,CAAS,WAAW,CAAA;AACpB,YAAkB,iBAAA,EAAA;AAAA;AAEpB,UAAgB,aAAA,GAAA,SAAA;AAAA,SAClB;AACA,QAAS,QAAA,CAAA,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAChD,QAAA,OAAO,MAAM,QAAA,CAAS,mBAAoB,CAAA,QAAA,EAAU,YAAY,CAAA;AAAA;AAGlE,MAAO,OAAA,KAAA,CAAA;AAAA,OACN,CAAC,OAAA,CAAQ,QAAU,EAAA,YAAA,EAAc,iBAAiB,CAAC,CAAA;AAEtD,IAAI,IAAA,UAAA,IAAc,UAAU,QAAU,EAAA;AACpC,MACE,uBAAA,GAAA;AAAA,QAAC,0BAAA;AAAA,QAAA;AAAA,UACC,YAAA,EAAY,KAAU,KAAA,QAAA,GAAW,QAAW,GAAA,SAAA;AAAA,UAC3C,GAAG,cAAA;AAAA,UACJ,GAAK,EAAA,GAAA;AAAA,UACL,gBAAgB,oBAAqB,CAAA,KAAA,CAAM,gBAAgB,MAAM,QAAA,CAAS,aAAa,CAAC,CAAA;AAAA,UACxF,gBAAgB,oBAAqB,CAAA,KAAA,CAAM,gBAAgB,MAAM,QAAA,CAAS,MAAM,CAAC;AAAA;AAAA,OACnF;AAAA;AAIJ,IAAO,OAAA,IAAA;AAAA;AAEX;;;;"}