UNPKG

ivt

Version:

Ivt Components Library

1 lines 58.4 kB
{"version":3,"file":"scroll-area-Cr1Iu-Ot.mjs","sources":["../../node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../../src/components/ui/scroll-area/scroll-area.tsx"],"sourcesContent":["\"use client\";\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = React2.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setScrollArea(node));\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n [\"--radix-scroll-area-corner-width\"]: cornerWidth + \"px\",\n [\"--radix-scroll-area-corner-height\"]: cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }\n);\nScrollArea.displayName = SCROLL_AREA_NAME;\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }\n);\nScrollAreaViewport.displayName = VIEWPORT_NAME;\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef }) : null;\n }\n);\nScrollAreaScrollbar.displayName = SCROLLBAR_NAME;\nvar ScrollAreaScrollbarHover = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = () => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n };\n const handlePointerLeave = () => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n };\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarScroll = React2.forwardRef((props, forwardedRef) => {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\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 send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n };\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n});\nvar ScrollAreaScrollbarAuto = React2.forwardRef((props, forwardedRef) => {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n});\nvar ScrollAreaScrollbarVisible = React2.forwardRef((props, forwardedRef) => {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: (thumb) => thumbRef.current = thumb,\n onThumbPointerUp: () => pointerOffsetRef.current = 0,\n onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\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, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\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 thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n});\nvar ScrollAreaScrollbarX = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n [\"--radix-scroll-area-thumb-width\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n});\nvar ScrollAreaScrollbarY = React2.forwardRef((props, forwardedRef) => {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n [\"--radix-scroll-area-thumb-height\"]: getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n});\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = React2.forwardRef((props, forwardedRef) => {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, (node) => setScrollbar(node));\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n React2.useEffect(() => {\n const handleWheel = (event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n };\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n});\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = React2.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }\n);\nvar ScrollAreaThumbImpl = React2.forwardRef(\n (props, forwardedRef) => {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(\n forwardedRef,\n (node) => scrollbarContext.onThumbChange(node)\n );\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\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 }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\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);\nScrollAreaThumb.displayName = THUMB_NAME;\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = React2.forwardRef(\n (props, forwardedRef) => {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }\n);\nScrollAreaCorner.displayName = CORNER_NAME;\nvar ScrollAreaCornerImpl = React2.forwardRef((props, forwardedRef) => {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n});\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\nvar addUnlinkedScrollListener = (node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n })();\n return () => window.cancelAnimationFrame(rAF);\n};\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction ScrollArea({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n\treturn (\n\t\t<ScrollAreaPrimitive.Root\n\t\t\tdata-slot=\"scroll-area\"\n\t\t\tclassName={cn(\"relative\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ScrollAreaPrimitive.Viewport\n\t\t\t\tdata-slot=\"scroll-area-viewport\"\n\t\t\t\tclassName=\"ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</ScrollAreaPrimitive.Viewport>\n\t\t\t<ScrollBar />\n\t\t\t<ScrollAreaPrimitive.Corner />\n\t\t</ScrollAreaPrimitive.Root>\n\t);\n}\n\nfunction ScrollBar({\n\tclassName,\n\torientation = \"vertical\",\n\t...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n\treturn (\n\t\t<ScrollAreaPrimitive.ScrollAreaScrollbar\n\t\t\tdata-slot=\"scroll-area-scrollbar\"\n\t\t\torientation={orientation}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex touch-none p-px transition-colors select-none\",\n\t\t\t\torientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent\",\n\t\t\t\torientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ScrollAreaPrimitive.ScrollAreaThumb\n\t\t\t\tdata-slot=\"scroll-area-thumb\"\n\t\t\t\tclassName=\"bg-border relative flex-1 rounded-full\"\n\t\t\t/>\n\t\t</ScrollAreaPrimitive.ScrollAreaScrollbar>\n\t);\n}\n\nexport { ScrollArea, ScrollBar };\n"],"names":["ScrollArea","React2","height","width","useLayoutEffect","className","children","props","React","ScrollAreaPrimitive","data-slot","cn","ScrollBar","orientation"],"mappings":"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