{"version":3,"file":"ScrollAreaScrollbarScroll.cjs","names":["useScrollAreaContext","ScrollAreaScrollbarVisible","composeEventHandlers"],"sources":["../../../../src/components/ScrollArea/ScrollAreaScrollbar/ScrollAreaScrollbarScroll.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useDebouncedCallback } from '@mantine/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 function ScrollAreaScrollbarScroll(props: ScrollAreaScrollbarScrollProps) {\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        onPointerEnter={composeEventHandlers(props.onPointerEnter, () => setState('interacting'))}\n        onPointerLeave={composeEventHandlers(props.onPointerLeave, () => setState('idle'))}\n      />\n    );\n  }\n\n  return null;\n}\n"],"mappings":";;;;;;;;;AAaA,SAAgB,0BAA0B,OAAuC;CAC/E,MAAM,EAAE,YAAY,GAAG,mBAAmB;CAC1C,MAAM,UAAUA,2BAAAA,sBAAsB;CACtC,MAAM,eAAe,MAAM,gBAAgB;CAC3C,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAsE,SAAS;CAC7F,MAAM,qBAAA,GAAA,eAAA,4BAA+C,SAAS,OAAO,EAAE,IAAI;AAE3E,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,UAAU,QAAQ;GACpB,MAAM,YAAY,OAAO,iBAAiB,SAAS,SAAS,EAAE,QAAQ,gBAAgB;AACtF,gBAAa,OAAO,aAAa,UAAU;;IAI5C,CAAC,OAAO,QAAQ,gBAAgB,CAAC;AAEpC,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,EAAE,aAAa;EACrB,MAAM,kBAAkB,eAAe,eAAe;AAEtD,MAAI,UAAU;GACZ,IAAI,gBAAgB,SAAS;GAC7B,MAAM,qBAAqB;IACzB,MAAM,YAAY,SAAS;AAE3B,QADoC,kBAAkB,WACrB;AAC/B,cAAS,YAAY;AACrB,wBAAmB;;AAErB,oBAAgB;;AAElB,YAAS,iBAAiB,UAAU,aAAa;AACjD,gBAAa,SAAS,oBAAoB,UAAU,aAAa;;IAIlE;EAAC,QAAQ;EAAU;EAAc;EAAkB,CAAC;AAEvD,KAAI,cAAc,UAAU,SAC1B,QACE,iBAAA,GAAA,kBAAA,KAACC,mCAAAA,4BAAD;EACE,cAAY,UAAU,WAAW,WAAW;EAC5C,GAAI;EACJ,gBAAgBC,+BAAAA,qBAAqB,MAAM,sBAAsB,SAAS,cAAc,CAAC;EACzF,gBAAgBA,+BAAAA,qBAAqB,MAAM,sBAAsB,SAAS,OAAO,CAAC;EAClF,CAAA;AAIN,QAAO"}