{"version":3,"file":"ScrollAreaScrollbarVisible.cjs","sources":["../../../../src/components/ScrollArea/ScrollAreaScrollbar/ScrollAreaScrollbarVisible.tsx"],"sourcesContent":["import { forwardRef, useRef, useState } from 'react';\nimport { useDirection } from '../../../core';\nimport { useScrollAreaContext } from '../ScrollArea.context';\nimport {\n  ScrollAreaScrollbarAxisPrivateProps,\n  ScrollAreaScrollbarAxisProps,\n  Sizes,\n} from '../ScrollArea.types';\nimport { getScrollPositionFromPointer, getThumbOffsetFromScroll, getThumbRatio } from '../utils';\nimport { ScrollAreaScrollbarX } from './ScrollbarX';\nimport { ScrollAreaScrollbarY } from './ScrollbarY';\n\nexport interface ScrollAreaScrollbarVisibleProps\n  extends Omit<ScrollAreaScrollbarAxisProps, keyof ScrollAreaScrollbarAxisPrivateProps> {\n  orientation?: 'horizontal' | 'vertical';\n}\n\nexport const ScrollAreaScrollbarVisible = forwardRef<\n  HTMLDivElement,\n  ScrollAreaScrollbarVisibleProps\n>((props, forwardedRef) => {\n  const { orientation = 'vertical', ...scrollbarProps } = props;\n  const { dir } = useDirection();\n  const context = useScrollAreaContext();\n  const thumbRef = useRef<HTMLDivElement | null>(null);\n  const pointerOffsetRef = useRef(0);\n  const [sizes, setSizes] = useState<Sizes>({\n    content: 0,\n    viewport: 0,\n    scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 },\n  });\n\n  const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n\n  const commonProps: Omit<\n    ScrollAreaScrollbarAxisPrivateProps,\n    'onThumbPositionChange' | 'onDragScroll' | 'onWheelScroll'\n  > = {\n    ...scrollbarProps,\n    sizes,\n    onSizesChange: setSizes,\n    hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n    onThumbChange: (thumb) => {\n      thumbRef.current = thumb;\n    },\n    onThumbPointerUp: () => {\n      pointerOffsetRef.current = 0;\n    },\n    onThumbPointerDown: (pointerPos) => {\n      pointerOffsetRef.current = pointerPos;\n    },\n  };\n\n  const getScrollPosition = (pointerPos: number, direction?: 'ltr' | 'rtl') =>\n    getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, direction);\n\n  if (orientation === 'horizontal') {\n    return (\n      <ScrollAreaScrollbarX\n        {...commonProps}\n        ref={forwardedRef}\n        onThumbPositionChange={() => {\n          if (context.viewport && thumbRef.current) {\n            const scrollPos = context.viewport.scrollLeft;\n            const offset = getThumbOffsetFromScroll(scrollPos, sizes, dir);\n            thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n          }\n        }}\n        onWheelScroll={(scrollPos) => {\n          if (context.viewport) {\n            context.viewport.scrollLeft = scrollPos;\n          }\n        }}\n        onDragScroll={(pointerPos) => {\n          if (context.viewport) {\n            context.viewport.scrollLeft = getScrollPosition(pointerPos, dir);\n          }\n        }}\n      />\n    );\n  }\n\n  if (orientation === 'vertical') {\n    return (\n      <ScrollAreaScrollbarY\n        {...commonProps}\n        ref={forwardedRef}\n        onThumbPositionChange={() => {\n          if (context.viewport && thumbRef.current) {\n            const scrollPos = context.viewport.scrollTop;\n            const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n            if (sizes.scrollbar.size === 0) {\n              thumbRef.current.style.setProperty('--thumb-opacity', '0');\n            } else {\n              thumbRef.current.style.setProperty('--thumb-opacity', '1');\n            }\n            thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n          }\n        }}\n        onWheelScroll={(scrollPos) => {\n          if (context.viewport) {\n            context.viewport.scrollTop = scrollPos;\n          }\n        }}\n        onDragScroll={(pointerPos) => {\n          if (context.viewport) {\n            context.viewport.scrollTop = getScrollPosition(pointerPos);\n          }\n        }}\n      />\n    );\n  }\n\n  return null;\n});\n\nScrollAreaScrollbarVisible.displayName = '@raikou/core/ScrollAreaScrollbarVisible';\n"],"names":["forwardRef","useDirection","useScrollAreaContext","useRef","useState","getThumbRatio","getScrollPositionFromPointer","jsx","ScrollAreaScrollbarX","getThumbOffsetFromScroll","ScrollAreaScrollbarY"],"mappings":";;;;;;;;;;;;;;;;;AAiBO,MAAM,0BAA6B,GAAAA,gBAAA,CAGxC,CAAC,KAAA,EAAO,YAAiB,KAAA;AACzB,EAAA,MAAM,EAAE,WAAA,GAAc,UAAY,EAAA,GAAG,gBAAmB,GAAA,KAAA;AACxD,EAAM,MAAA,EAAE,GAAI,EAAA,GAAIC,8BAAa,EAAA;AAC7B,EAAA,MAAM,UAAUC,uCAAqB,EAAA;AACrC,EAAM,MAAA,QAAA,GAAWC,aAA8B,IAAI,CAAA;AACnD,EAAM,MAAA,gBAAA,GAAmBA,aAAO,CAAC,CAAA;AACjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,cAAgB,CAAA;AAAA,IACxC,OAAS,EAAA,CAAA;AAAA,IACT,QAAU,EAAA,CAAA;AAAA,IACV,WAAW,EAAE,IAAA,EAAM,GAAG,YAAc,EAAA,CAAA,EAAG,YAAY,CAAE;AAAA,GACtD,CAAA;AAED,EAAA,MAAM,UAAa,GAAAC,2BAAA,CAAc,KAAM,CAAA,QAAA,EAAU,MAAM,OAAO,CAAA;AAE9D,EAAA,MAAM,WAGF,GAAA;AAAA,IACF,GAAG,cAAA;AAAA,IACH,KAAA;AAAA,IACA,aAAe,EAAA,QAAA;AAAA,IACf,QAAU,EAAA,OAAA,CAAQ,UAAa,GAAA,CAAA,IAAK,aAAa,CAAC,CAAA;AAAA,IAClD,aAAA,EAAe,CAAC,KAAU,KAAA;AACxB,MAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AAAA,KACrB;AAAA,IACA,kBAAkB,MAAM;AACtB,MAAA,gBAAA,CAAiB,OAAU,GAAA,CAAA;AAAA,KAC7B;AAAA,IACA,kBAAA,EAAoB,CAAC,UAAe,KAAA;AAClC,MAAA,gBAAA,CAAiB,OAAU,GAAA,UAAA;AAAA;AAC7B,GACF;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,UAAoB,EAAA,SAAA,KAC7CC,0DAA6B,UAAY,EAAA,gBAAA,CAAiB,OAAS,EAAA,KAAA,EAAO,SAAS,CAAA;AAErF,EAAA,IAAI,gBAAgB,YAAc,EAAA;AAChC,IACE,uBAAAC,cAAA;AAAA,MAACC,+BAAA;AAAA,MAAA;AAAA,QACE,GAAG,WAAA;AAAA,QACJ,GAAK,EAAA,YAAA;AAAA,QACL,uBAAuB,MAAM;AAC3B,UAAI,IAAA,OAAA,CAAQ,QAAY,IAAA,QAAA,CAAS,OAAS,EAAA;AACxC,YAAM,MAAA,SAAA,GAAY,QAAQ,QAAS,CAAA,UAAA;AACnC,YAAA,MAAM,MAAS,GAAAC,iDAAA,CAAyB,SAAW,EAAA,KAAA,EAAO,GAAG,CAAA;AAC7D,YAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,SAAY,GAAA,CAAA,YAAA,EAAe,MAAM,CAAA,SAAA,CAAA;AAAA;AAC1D,SACF;AAAA,QACA,aAAA,EAAe,CAAC,SAAc,KAAA;AAC5B,UAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,YAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,SAAA;AAAA;AAChC,SACF;AAAA,QACA,YAAA,EAAc,CAAC,UAAe,KAAA;AAC5B,UAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,YAAA,OAAA,CAAQ,QAAS,CAAA,UAAA,GAAa,iBAAkB,CAAA,UAAA,EAAY,GAAG,CAAA;AAAA;AACjE;AACF;AAAA,KACF;AAAA;AAIJ,EAAA,IAAI,gBAAgB,UAAY,EAAA;AAC9B,IACE,uBAAAF,cAAA;AAAA,MAACG,+BAAA;AAAA,MAAA;AAAA,QACE,GAAG,WAAA;AAAA,QACJ,GAAK,EAAA,YAAA;AAAA,QACL,uBAAuB,MAAM;AAC3B,UAAI,IAAA,OAAA,CAAQ,QAAY,IAAA,QAAA,CAAS,OAAS,EAAA;AACxC,YAAM,MAAA,SAAA,GAAY,QAAQ,QAAS,CAAA,SAAA;AACnC,YAAM,MAAA,MAAA,GAASD,iDAAyB,CAAA,SAAA,EAAW,KAAK,CAAA;AACxD,YAAI,IAAA,KAAA,CAAM,SAAU,CAAA,IAAA,KAAS,CAAG,EAAA;AAC9B,cAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,WAAY,CAAA,iBAAA,EAAmB,GAAG,CAAA;AAAA,aACpD,MAAA;AACL,cAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,WAAY,CAAA,iBAAA,EAAmB,GAAG,CAAA;AAAA;AAE3D,YAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAM,SAAY,GAAA,CAAA,eAAA,EAAkB,MAAM,CAAA,MAAA,CAAA;AAAA;AAC7D,SACF;AAAA,QACA,aAAA,EAAe,CAAC,SAAc,KAAA;AAC5B,UAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,YAAA,OAAA,CAAQ,SAAS,SAAY,GAAA,SAAA;AAAA;AAC/B,SACF;AAAA,QACA,YAAA,EAAc,CAAC,UAAe,KAAA;AAC5B,UAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,YAAQ,OAAA,CAAA,QAAA,CAAS,SAAY,GAAA,iBAAA,CAAkB,UAAU,CAAA;AAAA;AAC3D;AACF;AAAA,KACF;AAAA;AAIJ,EAAO,OAAA,IAAA;AACT,CAAC;AAED,0BAAA,CAA2B,WAAc,GAAA,yCAAA;;;;"}