{"version":3,"file":"ScrollAreaThumb.cjs","names":["useScrollAreaContext","useScrollbarContext","addUnlinkedScrollListener","composeEventHandlers"],"sources":["../../../../src/components/ScrollArea/ScrollAreaThumb/ScrollAreaThumb.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useDebouncedCallback, useMergedRef } from '@mantine/hooks';\nimport { useScrollAreaContext } from '../ScrollArea.context';\nimport { useScrollbarContext } from '../ScrollAreaScrollbar/Scrollbar.context';\nimport { addUnlinkedScrollListener, composeEventHandlers } from '../utils';\n\ninterface ThumbProps extends React.ComponentProps<'div'> {}\n\nexport function Thumb(props: ThumbProps) {\n  const { style, ref: forwardedRef, ...others } = props;\n  const scrollAreaContext = useScrollAreaContext();\n  const scrollbarContext = useScrollbarContext();\n  const { onThumbPositionChange } = scrollbarContext;\n  const composedRef = useMergedRef(forwardedRef, (node) => scrollbarContext.onThumbChange(node));\n  const removeUnlinkedScrollListenerRef = useRef<(() => void) | undefined>(undefined);\n  const debounceScrollEnd = useDebouncedCallback(() => {\n    if (removeUnlinkedScrollListenerRef.current) {\n      removeUnlinkedScrollListenerRef.current();\n      removeUnlinkedScrollListenerRef.current = undefined;\n    }\n  }, 100);\n\n  useEffect(() => {\n    const { viewport } = scrollAreaContext;\n    if (viewport) {\n      const handleScroll = () => {\n        debounceScrollEnd();\n        if (!removeUnlinkedScrollListenerRef.current) {\n          const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n          removeUnlinkedScrollListenerRef.current = listener;\n          onThumbPositionChange();\n        }\n      };\n      onThumbPositionChange();\n      viewport.addEventListener('scroll', handleScroll);\n      return () => viewport.removeEventListener('scroll', handleScroll);\n    }\n\n    return undefined;\n  }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n\n  return (\n    <div\n      data-state={scrollbarContext.hasThumb ? 'visible' : 'hidden'}\n      {...others}\n      ref={composedRef}\n      style={{\n        width: 'var(--sa-thumb-width)',\n        height: 'var(--sa-thumb-height)',\n        ...style,\n      }}\n      onPointerDownCapture={composeEventHandlers(props.onPointerDownCapture, (event) => {\n        const thumb = event.target as HTMLElement;\n        const thumbRect = thumb.getBoundingClientRect();\n        const x = event.clientX - thumbRect.left;\n        const y = event.clientY - thumbRect.top;\n        scrollbarContext.onThumbPointerDown({ x, y });\n      })}\n      onPointerUp={composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)}\n    />\n  );\n}\n\nThumb.displayName = '@mantine/core/ScrollAreaThumb';\n\ninterface ScrollAreaThumbProps extends ThumbProps {\n  forceMount?: true;\n}\n\nexport function ScrollAreaThumb(props: ScrollAreaThumbProps) {\n  const { forceMount, ...thumbProps } = props;\n  const scrollbarContext = useScrollbarContext();\n\n  if (forceMount || scrollbarContext.hasThumb) {\n    return <Thumb {...thumbProps} />;\n  }\n\n  return null;\n}\n\nScrollAreaThumb.displayName = '@mantine/core/ScrollAreaThumb';\n"],"mappings":";;;;;;;;;;AAQA,SAAgB,MAAM,OAAmB;CACvC,MAAM,EAAE,OAAO,KAAK,cAAc,GAAG,WAAW;CAChD,MAAM,oBAAoBA,2BAAAA,sBAAsB;CAChD,MAAM,mBAAmBC,0BAAAA,qBAAqB;CAC9C,MAAM,EAAE,0BAA0B;CAClC,MAAM,eAAA,GAAA,eAAA,cAA2B,eAAe,SAAS,iBAAiB,cAAc,KAAK,CAAC;CAC9F,MAAM,mCAAA,GAAA,MAAA,QAAmE,KAAA,EAAU;CACnF,MAAM,qBAAA,GAAA,eAAA,4BAA+C;AACnD,MAAI,gCAAgC,SAAS;AAC3C,mCAAgC,SAAS;AACzC,mCAAgC,UAAU,KAAA;;IAE3C,IAAI;AAEP,EAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,EAAE,aAAa;AACrB,MAAI,UAAU;GACZ,MAAM,qBAAqB;AACzB,uBAAmB;AACnB,QAAI,CAAC,gCAAgC,SAAS;AAE5C,qCAAgC,UADfC,qCAAAA,0BAA0B,UAAU,sBAAsB;AAE3E,4BAAuB;;;AAG3B,0BAAuB;AACvB,YAAS,iBAAiB,UAAU,aAAa;AACjD,gBAAa,SAAS,oBAAoB,UAAU,aAAa;;IAIlE;EAAC,kBAAkB;EAAU;EAAmB;EAAsB,CAAC;AAE1E,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,cAAY,iBAAiB,WAAW,YAAY;EACpD,GAAI;EACJ,KAAK;EACL,OAAO;GACL,OAAO;GACP,QAAQ;GACR,GAAG;GACJ;EACD,sBAAsBC,+BAAAA,qBAAqB,MAAM,uBAAuB,UAAU;GAEhF,MAAM,YADQ,MAAM,OACI,uBAAuB;GAC/C,MAAM,IAAI,MAAM,UAAU,UAAU;GACpC,MAAM,IAAI,MAAM,UAAU,UAAU;AACpC,oBAAiB,mBAAmB;IAAE;IAAG;IAAG,CAAC;IAC7C;EACF,aAAaA,+BAAAA,qBAAqB,MAAM,aAAa,iBAAiB,iBAAiB;EACvF,CAAA;;AAIN,MAAM,cAAc;AAMpB,SAAgB,gBAAgB,OAA6B;CAC3D,MAAM,EAAE,YAAY,GAAG,eAAe;CACtC,MAAM,mBAAmBF,0BAAAA,qBAAqB;AAE9C,KAAI,cAAc,iBAAiB,SACjC,QAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAO,GAAI,YAAc,CAAA;AAGlC,QAAO;;AAGT,gBAAgB,cAAc"}