{"version":3,"file":"scroll-area.mjs","sources":["../src/scroll-area/ScrollAreaRoot.ts","../src/scroll-area/ScrollAreaContent.ts","../src/scroll-area/ScrollAreaContent.vue","../src/scroll-area/ScrollAreaCorner.ts","../src/scroll-area/ScrollAreaCornerImpl.ts","../src/scroll-area/ScrollAreaCornerImpl.vue","../src/scroll-area/ScrollAreaCorner.vue","../src/scroll-area/ScrollAreaRoot.vue","../src/scroll-area/ScrollAreaScrollbar.ts","../src/scroll-area/ScrollAreaScrollbarAuto.ts","../src/scroll-area/utils.ts","../src/scroll-area/ScrollAreaScrollbarVisible.ts","../src/scroll-area/ScrollAreaScrollbarVisible.vue","../src/scroll-area/ScrollAreaScrollbarAuto.vue","../src/scroll-area/ScrollAreaScrollbarHover.ts","../src/scroll-area/ScrollAreaScrollbarHover.vue","../src/scroll-area/ScrollAreaScrollbarScroll.ts","../src/scroll-area/ScrollAreaScrollbarScroll.vue","../src/scroll-area/ScrollAreaScrollbar.vue","../src/scroll-area/ScrollAreaThumb.ts","../src/scroll-area/ScrollAreaThumbImpl.ts","../src/scroll-area/ScrollAreaThumbImpl.vue","../src/scroll-area/ScrollAreaThumb.vue","../src/scroll-area/ScrollAreaViewport.ts","../src/scroll-area/ScrollAreaViewport.vue"],"sourcesContent":["import { type MaybeRefOrGetter, type Ref, shallowRef } from 'vue'\nimport { type Direction, useDirection } from '../direction/index.ts'\nimport { createContext } from '../hooks/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type PrimitiveElAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\n\ntype ScrollAreaType = 'auto' | 'always' | 'scroll' | 'hover'\n\nexport interface ScrollAreaRootProps {\n  type?: ScrollAreaType\n  dir?: Direction\n  scrollHideDelay?: number\n}\n\nexport const DEFAULT_SCROLL_AREA_PROPS = {} satisfies PrimitiveDefaultProps<ScrollAreaRootProps>\n\nexport interface ScrollAreaContext {\n  type: ScrollAreaType\n  dir: Ref<Direction>\n  scrollHideDelay: number\n  scrollArea: Ref<HTMLElement | undefined>\n  viewport: Ref<HTMLElement | undefined>\n  content: Ref<HTMLElement | undefined>\n  scrollbarX: Ref<HTMLElement | undefined>\n  scrollbarXEnabled: Ref<boolean>\n  onScrollbarXEnabledChange: (rendered: boolean) => void\n  scrollbarY: Ref<HTMLElement | undefined>\n  scrollbarYEnabled: Ref<boolean>\n  onScrollbarYEnabledChange: (rendered: boolean) => void\n  onCornerWidthChange: (width: number) => void\n  onCornerHeightChange: (height: number) => void\n}\n\nexport const [provideScrollAreaContext, useScrollAreaContext] = createContext<ScrollAreaContext>('ScrollArea')\n\nexport interface UseScrollAreaRootProps {\n  el?: Ref<HTMLElement | undefined>\n  type?: ScrollAreaType\n  dir?: MaybeRefOrGetter<Direction | undefined>\n  scrollHideDelay?: number\n}\n\nexport function useScrollAreaRoot(props: UseScrollAreaRootProps): RadixPrimitiveReturns {\n  const {\n    type = 'hover',\n    scrollHideDelay = 600,\n  } = props\n\n  const el = props.el || shallowRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (value: HTMLElement | undefined) => el.value = value\n\n  const viewport = shallowRef<HTMLElement>()\n  const content = shallowRef<HTMLDivElement>()\n  const scrollbarX = shallowRef<HTMLElement>()\n  const scrollbarY = shallowRef<HTMLElement>()\n  const cornerWidth = shallowRef(0)\n  const cornerHeight = shallowRef(0)\n  const scrollbarXEnabled = shallowRef(false)\n  const scrollbarYEnabled = shallowRef(false)\n\n  const direction = useDirection(props.dir)\n\n  provideScrollAreaContext({\n    type,\n    dir: direction,\n    scrollHideDelay,\n    scrollArea: el,\n    viewport,\n    content,\n    scrollbarX,\n    scrollbarXEnabled,\n    onScrollbarXEnabledChange(rendered) {\n      scrollbarXEnabled.value = rendered\n    },\n    scrollbarY,\n    scrollbarYEnabled,\n    onScrollbarYEnabledChange(rendered) {\n      scrollbarYEnabled.value = rendered\n    },\n    onCornerWidthChange(width) {\n      cornerWidth.value = width\n    },\n    onCornerHeightChange(height) {\n      cornerHeight.value = height\n    },\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const attrs: PrimitiveElAttrs = {\n        elRef: setElRef,\n        dir: direction.value,\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.value}px`,\n          '--radix-scroll-area-corner-height': `${cornerHeight.value}px`,\n        },\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import { mergePrimitiveAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport function useScrollAreaContent(): RadixPrimitiveReturns {\n  const context = useScrollAreaContext('ScrollAreaContent')\n\n  function setElRef(templateEl: HTMLElement | undefined) {\n    context.content.value = templateEl\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        elRef: setElRef,\n        style: 'min-width: 100%; display: table',\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { useScrollAreaContent } from './ScrollAreaContent.ts'\n\ndefineOptions({\n  name: 'ScrollAreaContent',\n  inheritAttrs: false,\n})\n\nconst scrollAreaContent = useScrollAreaContent()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(scrollAreaContent.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { RadixPrimitiveReturns } from '../shared/index.ts'\nimport { computed, type Ref } from 'vue'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport function useScrollAreaCorner(): RadixPrimitiveReturns<{ hasCorner: Ref<boolean> }> {\n  const context = useScrollAreaContext('ScrollAreaCorner')\n  const hasCorner = computed(() => context.type !== 'scroll' && Boolean(context.scrollbarX.value && context.scrollbarY.value))\n\n  return {\n    hasCorner,\n  }\n}\n","import { useResizeObserver } from '@vueuse/core'\nimport { computed, type Ref, shallowRef } from 'vue'\nimport { mergePrimitiveAttrs, type PrimitiveElAttrs, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport function useScrollAreaCornerImpl(): RadixPrimitiveReturns<{\n  hasSize: Ref<boolean>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const context = useScrollAreaContext('ScrollAreaCornerImpl')\n\n  const width = shallowRef(0)\n  const height = shallowRef(0)\n\n  const hasSize = computed(() => Boolean(width.value && height.value))\n\n  useResizeObserver(context.scrollbarX, () => {\n    const _height = context.scrollbarX.value?.offsetHeight || 0\n    context.onCornerHeightChange(_height)\n    height.value = _height\n  })\n\n  useResizeObserver(context.scrollbarY, () => {\n    const _width = context.scrollbarY.value?.offsetWidth || 0\n    context.onCornerWidthChange(_width)\n    width.value = _width\n  })\n\n  return {\n    hasSize,\n    attrs(extraAttrs) {\n      const attrs: PrimitiveElAttrs = {\n        style: {\n          width: `${width.value}px`,\n          height: `${height.value}px`,\n          position: 'absolute',\n          right: context.dir.value === 'ltr' ? 0 : undefined,\n          left: context.dir.value === 'rtl' ? 0 : undefined,\n          bottom: 0,\n        },\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { useScrollAreaCornerImpl } from './ScrollAreaCornerImpl.ts'\n\ndefineOptions({\n  name: 'ScrollAreaCornerImpl',\n  inheritAttrs: false,\n})\n\nconst scrollAreaCornerImpl = useScrollAreaCornerImpl()\n</script>\n\n<template>\n  <Primitive\n    v-if=\"scrollAreaCornerImpl.hasSize.value\"\n    v-bind=\"normalizeAttrs(scrollAreaCornerImpl.attrs([$attrs]))\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { useScrollAreaCorner } from './ScrollAreaCorner.ts'\nimport ScrollAreaCornerImpl from './ScrollAreaCornerImpl.vue'\n\ndefineOptions({\n  name: 'ScrollAreaCorner',\n})\n\nconst scrollAreaCorner = useScrollAreaCorner()\n</script>\n\n<template>\n  <ScrollAreaCornerImpl v-if=\"scrollAreaCorner.hasCorner.value\">\n    <slot />\n  </ScrollAreaCornerImpl>\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SCROLL_AREA_PROPS, type ScrollAreaRootProps, useScrollAreaRoot } from './ScrollAreaRoot.ts'\n\ndefineOptions({\n  name: 'ScrollAreaRoot',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaRootProps>(), DEFAULT_SCROLL_AREA_PROPS)\n\nconst scrollAreaRoot = useScrollAreaRoot(convertPropsToHookProps(props, ['dir']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(scrollAreaRoot.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { ScrollAreaScrollbarVisibleProps } from './ScrollAreaScrollbarVisible.ts'\nimport { onBeforeUnmount, onMounted, type Ref } from 'vue'\nimport { createContext } from '../hooks/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport interface ScrollAreaScrollbarProps {\n  orientation?: ScrollAreaScrollbarVisibleProps['orientation']\n}\n\nexport const DEFAULT_SCROLLBAR_PROPS = {} satisfies PrimitiveDefaultProps<ScrollAreaScrollbarProps>\n\nexport interface ScrollbarContext {\n  hasThumb: Ref<boolean>\n  thumb: Ref<HTMLElement | undefined>\n  onThumbPointerUp: () => void\n  onThumbPointerDown: (pointerPos: { x: number, y: number }) => void\n  onThumbPositionChange: () => void\n}\n\nexport const [provideScrollbarContext, useScrollbarContext] = createContext<ScrollbarContext>('ScrollAreaScrollbar')\n\nexport interface UseScrollbarProps {\n  orientation?: ScrollAreaScrollbarVisibleProps['orientation']\n}\n\nexport function useScrollAreaScrollbar(props: UseScrollbarProps): RadixPrimitiveReturns {\n  const { orientation = 'vertical' } = props\n  const isHorizontal = orientation === 'horizontal'\n\n  const context = useScrollAreaContext('ScrollAreaScrollbar')\n\n  onMounted(() => {\n    if (isHorizontal)\n      context.onScrollbarXEnabledChange(true)\n    else\n      context.onScrollbarYEnabledChange(true)\n  })\n\n  onBeforeUnmount(() => {\n    if (isHorizontal)\n      context.onScrollbarXEnabledChange(false)\n    else\n      context.onScrollbarYEnabledChange(false)\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        orientation,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import type { ScrollAreaScrollbarVisibleProps, UseScrollAreaScrollbarVisibleProps } from './ScrollAreaScrollbarVisible.ts'\nimport { useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport interface ScrollAreaScrollbarAutoProps {\n  orientation?: ScrollAreaScrollbarVisibleProps['orientation']\n  forceMount?: boolean\n}\n\nexport const DEFAULT_SCROLLBAR_AUTO_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<ScrollAreaScrollbarAutoProps>\n\nexport interface UseScrollAreaScrollbarAutoProps extends UseScrollAreaScrollbarVisibleProps {\n  forceMount?: boolean\n}\n\nexport function useScrollAreaScrollbarAuto(props: UseScrollAreaScrollbarAutoProps): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const { orientation = 'vertical' } = props\n  const isHorizontal = orientation === 'horizontal'\n  const context = useScrollAreaContext('ScrollAreaScrollbarAuto')\n  const visible = shallowRef(false)\n  const scrollbar = isHorizontal ? context.scrollbarX : context.scrollbarY\n\n  const handleResize = useDebounceFn(() => {\n    const viewport = context.viewport.value\n    if (viewport) {\n      const isOverflowX = viewport.offsetWidth < viewport.scrollWidth\n      const isOverflowY = viewport.offsetHeight < viewport.scrollHeight\n\n      visible.value = orientation === 'horizontal' ? isOverflowX : isOverflowY\n    }\n  }, 10)\n\n  useResizeObserver(context.viewport, handleResize)\n  useResizeObserver(context.content, handleResize)\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(scrollbar, visible)\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'data-state': visible.value ? 'visible' : 'hidden',\n        'orientation': orientation,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import type { Direction } from '../direction/index.ts'\nimport type { Sizes } from './ScrollAreaScrollbarVisible.ts'\nimport { clamp } from '../shared/index.ts'\n\nexport function toInt(value?: string) {\n  return value ? Number.parseInt(value, 10) : 0\n}\n\nexport function getThumbRatio(viewportSize: number, contentSize: number) {\n  const ratio = viewportSize / contentSize\n\n  return Number.isNaN(ratio) ? 0 : ratio\n}\n\nexport function getThumbSize(sizes: 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\n  // minimum of 18 matches macOS minimum\n  return Math.max(thumbSize, 18)\n}\n\nexport function getScrollPositionFromPointer(\n  pointerPos: number,\n  pointerOffset: number,\n  sizes: Sizes,\n  dir: Direction = 'ltr',\n) {\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: [number, number] = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0]\n  const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange)\n\n  return interpolate(pointerPos)\n}\n\nexport function getThumbOffsetFromScroll(scrollPos: number, sizes: Sizes, dir: Direction = '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: [number, number] = dir === 'ltr' ? [0, maxScrollPos] : [maxScrollPos * -1, 0]\n  const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange[0], scrollClampRange[1])\n  const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos])\n\n  return interpolate(scrollWithoutMomentum)\n}\n\n// https://github.com/tmcw-up-for-adoption/simple-linear-scale/blob/master/index.js\nexport function linearScale(input: readonly [number, number], output: readonly [number, number]) {\n  return (value: number) => {\n    if (input[0] === input[1] || output[0] === output[1])\n      return output[0]\n\n    const ratio = (output[1] - output[0]) / (input[1] - input[0])\n\n    return output[0] + ratio * (value - input[0])\n  }\n}\n\nexport function isScrollingWithinScrollbarBounds(scrollPos: number, maxScrollPos: number) {\n  return scrollPos > 0 && scrollPos < maxScrollPos\n}\n\n// Custom scroll handler to avoid scroll-linked effects\n// https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\nexport function addUnlinkedScrollListener(node: HTMLElement, handler = () => { }) {\n  let prevPosition = { left: node.scrollLeft, top: node.scrollTop }\n  let rAF = 0\n\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\n    if (isHorizontalScroll || isVerticalScroll)\n      handler()\n\n    prevPosition = position\n    rAF = window.requestAnimationFrame(loop)\n  })()\n\n  return () => window.cancelAnimationFrame(rAF)\n}\n","import { useDebounceFn, useResizeObserver } from '@vueuse/core'\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type PrimitiveElAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\nimport { provideScrollbarContext } from './ScrollAreaScrollbar.ts'\nimport { getScrollPositionFromPointer, getThumbOffsetFromScroll, getThumbRatio, getThumbSize, isScrollingWithinScrollbarBounds, toInt } from './utils.ts'\n\nexport interface ScrollAreaScrollbarVisibleProps {\n  orientation?: 'horizontal' | 'vertical'\n}\n\nexport const DEFAULT_SCROLL_AREA_SCROLLBAR_VISIBLE_PROPS = {} satisfies PrimitiveDefaultProps<ScrollAreaScrollbarVisibleProps>\n\nexport interface Sizes {\n  content: number\n  viewport: number\n  scrollbar: {\n    size: number\n    paddingStart: number\n    paddingEnd: number\n  }\n}\n\nexport interface UseScrollAreaScrollbarVisibleProps {\n  orientation?: 'horizontal' | 'vertical'\n}\n\nlet wheelListeners: ((e: WheelEvent) => void)[] = []\n\nfunction onDocumentWheel(event: WheelEvent) {\n  for (const wheelListener of wheelListeners) {\n    wheelListener(event)\n  }\n}\n\nexport function useScrollAreaScrollbarVisible(props: UseScrollAreaScrollbarVisibleProps): RadixPrimitiveReturns {\n  const isHorizontal = props.orientation === 'horizontal'\n\n  // VISIBLE\n  const context = useScrollAreaContext('ScrollAreaScrollbarVisible')\n  const scrollbar = isHorizontal ? context.scrollbarX : context.scrollbarY\n\n  function setElRef(templateEl: HTMLElement | undefined) {\n    scrollbar.value = templateEl\n  }\n\n  const thumbRef = shallowRef<HTMLElement>()\n  let pointerOffset = 0\n  const sizes = shallowRef<Sizes>({\n    content: 0,\n    viewport: 0,\n    scrollbar: {\n      size: 0,\n      paddingStart: 0,\n      paddingEnd: 0,\n    },\n  })\n\n  const hasThumb = computed(() => {\n    const thumbRatio = getThumbRatio(sizes.value.viewport, sizes.value.content)\n    return Boolean(thumbRatio > 0 && thumbRatio < 1)\n  })\n\n  // VISIBLE::END\n\n  // IMPLEMENTATION\n  let rect: DOMRect | undefined\n  let prevWebkitUserSelect = ''\n\n  function handleDragScroll(event: PointerEvent) {\n    if (!rect)\n      return\n\n    // VISIBLE\n    const viewport = context.viewport.value\n    if (!viewport)\n      return\n\n    if (isHorizontal) {\n      viewport.scrollLeft = getScrollPositionFromPointer(\n        event.clientX - rect.left,\n        pointerOffset,\n        sizes.value,\n        context.dir.value,\n      )\n    }\n    else {\n      viewport.scrollTop = getScrollPositionFromPointer(\n        event.clientY - rect.top,\n        pointerOffset,\n        sizes.value,\n      )\n    }\n  // VISIBLE::END\n  }\n\n  function onPointerdown(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n\n    const mainPointer = 0\n    if (event.button !== mainPointer)\n      return\n\n    const element = event.target as HTMLElement\n    element.setPointerCapture(event.pointerId)\n    rect = scrollbar.value!.getBoundingClientRect()\n\n    // pointer capture doesn't prevent text selection in Safari\n    // so we remove text selection manually when scrolling\n    prevWebkitUserSelect = document.body.style.webkitUserSelect\n    document.body.style.webkitUserSelect = 'none'\n    if (context.viewport)\n      context.viewport.value!.style.scrollBehavior = 'auto'\n\n    handleDragScroll(event)\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    handleDragScroll(event)\n  }\n\n  function onPointerup(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    const element = event.target as HTMLElement\n    if (element.hasPointerCapture(event.pointerId))\n      element.releasePointerCapture(event.pointerId)\n\n    document.body.style.webkitUserSelect = prevWebkitUserSelect\n    if (context.viewport)\n      context.viewport.value!.style.scrollBehavior = ''\n\n    rect = undefined\n  }\n\n  function onImplWheelScroll(event: WheelEvent) {\n    const isScrollbarWheel = scrollbar.value?.contains(event.target as HTMLElement)\n    if (!isScrollbarWheel)\n      return\n\n    // AXIS\n    const viewport = context.viewport.value\n    if (!viewport)\n      return\n\n    const maxScrollPos = sizes.value.content - sizes.value.viewport\n\n    if (isHorizontal) {\n      const scrollPos = viewport.scrollLeft + event.deltaY\n      // VISIBLE\n      viewport.scrollLeft = scrollPos\n      // VISIBLE::END\n      // prevent window scroll when wheeling on scrollbar\n      if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos))\n        event.preventDefault()\n    }\n    else {\n      const scrollPos = viewport.scrollTop + event.deltaY\n      // VISIBLE\n      viewport.scrollTop = scrollPos\n      // VISIBLE::END\n      // prevent window scroll when wheeling on scrollbar\n      if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos))\n        event.preventDefault()\n    }\n  // AXIS::END\n  }\n\n  onMounted(() => {\n    if (wheelListeners.length === 0)\n      document.addEventListener('wheel', onDocumentWheel, { passive: false })\n    wheelListeners.push(onImplWheelScroll)\n  })\n\n  onBeforeUnmount(() => {\n    wheelListeners = wheelListeners.filter(i => i !== onImplWheelScroll)\n    if (wheelListeners.length === 0)\n      document.removeEventListener('wheel', onDocumentWheel)\n  })\n\n  /**\n   * Update thumb position on sizes change\n   */\n  watch(sizes, onThumbPositionChange)\n\n  function onThumbPositionChange() {\n  // AXIS\n    const viewport = context.viewport.value\n    const thumb = thumbRef.value\n    if (!viewport || !thumb)\n      return\n\n    if (isHorizontal)\n      thumb.style.transform = `translate3d(${getThumbOffsetFromScroll(viewport.scrollLeft, sizes.value, context.dir.value)}px, 0, 0)`\n    else\n      thumb.style.transform = `translate3d(0, ${getThumbOffsetFromScroll(viewport.scrollTop, sizes.value)}px, 0)`\n  // AXIS::END\n  }\n\n  function onResize() {\n    const viewportEl = context.viewport.value\n    const scrollbarEl = scrollbar.value\n    if (!scrollbarEl || !viewportEl)\n      return\n\n    if (isHorizontal) {\n      sizes.value = {\n        content: viewportEl.scrollWidth ?? 0,\n        viewport: viewportEl.offsetWidth ?? 0,\n        scrollbar: {\n          size: scrollbarEl.clientWidth ?? 0,\n          paddingStart: toInt(getComputedStyle(scrollbarEl).paddingLeft),\n          paddingEnd: toInt(getComputedStyle(scrollbarEl).paddingRight),\n        },\n      }\n    }\n    else {\n      sizes.value = {\n        content: viewportEl.scrollHeight ?? 0,\n        viewport: viewportEl.offsetHeight ?? 0,\n        scrollbar: {\n          size: scrollbarEl.clientHeight ?? 0,\n          paddingStart: toInt(getComputedStyle(scrollbarEl).paddingLeft),\n          paddingEnd: toInt(getComputedStyle(scrollbarEl).paddingRight),\n        },\n      }\n    }\n  }\n\n  const handleResize = useDebounceFn(onResize, 10)\n\n  useResizeObserver([context.scrollbarX, context.scrollbarY], handleResize)\n  useResizeObserver(context.content, handleResize)\n\n  provideScrollbarContext({\n    hasThumb,\n    thumb: thumbRef,\n    onThumbPointerUp() {\n      pointerOffset = 0\n    },\n    onThumbPositionChange,\n    onThumbPointerDown(payload) {\n      if (isHorizontal)\n        pointerOffset = payload.x\n      else\n        pointerOffset = payload.y\n    },\n  })\n  // IMPLEMENTATION::END\n\n  return {\n    attrs(extraAttrs) {\n      const attrs: PrimitiveElAttrs = {\n        'elRef': setElRef,\n        'style': isHorizontal\n          ? {\n              'position': 'absolute',\n              'bottom': 0,\n              'left': context.dir.value === 'rtl' ? 'var(--radix-scroll-area-corner-width)' : 0,\n              'right': context.dir.value === 'ltr' ? 'var(--radix-scroll-area-corner-width)' : 0,\n              '--radix-scroll-area-thumb-width': `${getThumbSize(sizes.value)}px`,\n            }\n          : {\n              'position': 'absolute',\n              'top': 0,\n              'right': context.dir.value === 'ltr' ? 0 : undefined,\n              'left': context.dir.value === 'rtl' ? 0 : undefined,\n              'bottom': 'var(--radix-scroll-area-corner-height)',\n              '--radix-scroll-area-thumb-height': `${getThumbSize(sizes.value)}px`,\n            },\n        'data-orientation': isHorizontal ? 'horizontal' : 'vertical',\n        onPointerdown,\n        onPointermove,\n        onPointerup,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport {\n  DEFAULT_SCROLL_AREA_SCROLLBAR_VISIBLE_PROPS,\n  type ScrollAreaScrollbarVisibleProps,\n  useScrollAreaScrollbarVisible,\n} from './ScrollAreaScrollbarVisible.ts'\n\ndefineOptions({\n  name: 'ScrollAreaScrollbarVisible',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaScrollbarVisibleProps>(), DEFAULT_SCROLL_AREA_SCROLLBAR_VISIBLE_PROPS)\n\nconst scrollAreaScrollbarVisible = useScrollAreaScrollbarVisible(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(scrollAreaScrollbarVisible.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SCROLLBAR_AUTO_PROPS, type ScrollAreaScrollbarAutoProps, useScrollAreaScrollbarAuto } from './ScrollAreaScrollbarAuto.ts'\nimport ScrollAreaScrollbarVisible from './ScrollAreaScrollbarVisible.vue'\n\ndefineOptions({\n  name: 'ScrollAreaScrollbarAuto',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaScrollbarAutoProps>(), DEFAULT_SCROLLBAR_AUTO_PROPS)\n\nconst scrollAreaScrollbarAuto = useScrollAreaScrollbarAuto(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <ScrollAreaScrollbarVisible\n    v-if=\"scrollAreaScrollbarAuto.isPresent.value\"\n    v-bind=\"normalizeAttrs(scrollAreaScrollbarAuto.attrs([$attrs]))\"\n  >\n    <slot />\n  </ScrollAreaScrollbarVisible>\n</template>\n","import type { PrimitiveDefaultProps, RadixPrimitiveGetAttrs, RadixPrimitiveReturns } from '../shared/index.ts'\nimport type { ScrollAreaScrollbarVisibleProps, UseScrollAreaScrollbarVisibleProps } from './ScrollAreaScrollbarVisible.ts'\nimport { onWatcherCleanup, type Ref, shallowRef, watchEffect } from 'vue'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport interface ScrollAreaScrollbarHoverProps {\n  orientation?: ScrollAreaScrollbarVisibleProps['orientation']\n  forceMount?: boolean\n}\n\nexport const DEFAULT_SCROLLBAR_HOVER_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<ScrollAreaScrollbarHoverProps>\n\nexport interface UseScrollAreaScrollbarHoverProps extends UseScrollAreaScrollbarVisibleProps {\n  forceMount?: boolean\n}\n\nexport function useScrollAreaScrollbarHover(props: UseScrollAreaScrollbarHoverProps): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const { orientation = 'vertical' } = props\n  const isHorizontal = orientation === 'horizontal'\n  const context = useScrollAreaContext('ScrollAreaScrollbarHover')\n  const visible = shallowRef(false)\n  const scrollbar = isHorizontal ? context.scrollbarX : context.scrollbarY\n\n  watchEffect(() => {\n    const scrollArea = context.scrollArea.value\n    if (!scrollArea)\n      return\n\n    let hideTimer = 0\n\n    const handlePointerEnter = () => {\n      window.clearTimeout(hideTimer)\n      visible.value = true\n    }\n\n    const handlePointerLeave = () => {\n      hideTimer = window.setTimeout(() => {\n        visible.value = false\n      }, context.scrollHideDelay)\n    }\n\n    scrollArea.addEventListener('pointerenter', handlePointerEnter)\n    scrollArea.addEventListener('pointerleave', handlePointerLeave)\n\n    onWatcherCleanup(() => {\n      window.clearTimeout(hideTimer)\n      scrollArea.removeEventListener('pointerenter', handlePointerEnter)\n      scrollArea.removeEventListener('pointerleave', handlePointerLeave)\n    })\n  })\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(scrollbar, visible)\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'data-state': visible.value ? 'visible' : 'hidden',\n        'orientation': orientation,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport ScrollAreaScrollbarAuto from './ScrollAreaScrollbarAuto.vue'\nimport { DEFAULT_SCROLLBAR_HOVER_PROPS, type ScrollAreaScrollbarHoverProps, useScrollAreaScrollbarHover } from './ScrollAreaScrollbarHover.ts'\n\ndefineOptions({\n  name: 'ScrollAreaScrollbarHover',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaScrollbarHoverProps>(), DEFAULT_SCROLLBAR_HOVER_PROPS)\n\nconst scrollAreaScrollbarHover = useScrollAreaScrollbarHover(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <ScrollAreaScrollbarAuto\n    v-if=\"scrollAreaScrollbarHover.isPresent.value\"\n    v-bind=\"normalizeAttrs(scrollAreaScrollbarHover.attrs([$attrs]))\"\n  >\n    <slot />\n  </ScrollAreaScrollbarAuto>\n</template>\n","import type { ScrollAreaScrollbarVisibleProps, UseScrollAreaScrollbarVisibleProps } from './ScrollAreaScrollbarVisible.ts'\nimport { isClient, useDebounceFn } from '@vueuse/core'\nimport { onWatcherCleanup, type Ref, shallowRef, watchEffect } from 'vue'\nimport { useStateMachine } from '../hooks/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveDefaultProps, type RadixPrimitiveGetAttrs, type RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport interface ScrollAreaScrollbarScrollProps {\n  orientation?: ScrollAreaScrollbarVisibleProps['orientation']\n  forceMount?: boolean\n}\n\nexport const DEFAULT_SCROLLBAR_SCROLL_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<ScrollAreaScrollbarScrollProps>\n\nexport interface UseScrollAreaScrollbarScrollProps extends UseScrollAreaScrollbarVisibleProps {\n  forceMount?: boolean\n}\n\nexport function useScrollAreaScrollbarScroll(props: UseScrollAreaScrollbarScrollProps): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const { orientation = 'vertical' } = props\n  const isHorizontal = orientation === 'horizontal'\n  const context = useScrollAreaContext('ScrollAreaScrollbarScroll')\n  const scrollbar = isHorizontal ? context.scrollbarX : context.scrollbarY\n\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\n  const debounceScrollEnd = useDebounceFn(() => send('SCROLL_END'), 100)\n\n  if (isClient) {\n    watchEffect(() => {\n      if (state.value !== 'idle')\n        return\n\n      const timeId = window.setTimeout(\n        () => send('HIDE'),\n        context.scrollHideDelay,\n      )\n\n      onWatcherCleanup(() => {\n        window.clearTimeout(timeId)\n      })\n    })\n  }\n\n  watchEffect(() => {\n    const viewport = context.viewport.value\n    if (!viewport)\n      return\n\n    const scrollDirection = orientation === 'horizontal'\n      ? 'scrollLeft'\n      : 'scrollTop'\n\n    let prevScrollPos = viewport[scrollDirection]\n\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\n    viewport.addEventListener('scroll', handleScroll)\n\n    onWatcherCleanup(() => {\n      viewport.removeEventListener('scroll', handleScroll)\n    })\n  })\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(scrollbar, () => state.value !== 'hidden')\n\n  function onPointerenter(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    send('POINTER_ENTER')\n  }\n\n  function onPointerleave(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    send('POINTER_LEAVE')\n  }\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'data-state': state.value === 'hidden' ? 'hidden' : 'visible',\n        'orientation': orientation,\n        onPointerenter,\n        onPointerleave,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_SCROLLBAR_SCROLL_PROPS, type ScrollAreaScrollbarScrollProps, useScrollAreaScrollbarScroll } from './ScrollAreaScrollbarScroll.ts'\nimport ScrollAreaScrollbarVisible from './ScrollAreaScrollbarVisible.vue'\n\ndefineOptions({\n  name: 'ScrollAreaScrollbarScroll',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaScrollbarScrollProps>(), DEFAULT_SCROLLBAR_SCROLL_PROPS)\n\nconst scrollAreaScrollbarScroll = useScrollAreaScrollbarScroll(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <ScrollAreaScrollbarVisible\n    v-if=\"scrollAreaScrollbarScroll.isPresent.value\"\n    v-bind=\"normalizeAttrs(scrollAreaScrollbarScroll.attrs([$attrs]))\"\n  >\n    <slot />\n  </ScrollAreaScrollbarVisible>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\nimport { DEFAULT_SCROLLBAR_PROPS, type ScrollAreaScrollbarProps, useScrollAreaScrollbar } from './ScrollAreaScrollbar.ts'\nimport ScrollAreaScrollbarAuto from './ScrollAreaScrollbarAuto.vue'\nimport ScrollAreaScrollbarHover from './ScrollAreaScrollbarHover.vue'\nimport ScrollAreaScrollbarScroll from './ScrollAreaScrollbarScroll.vue'\nimport ScrollAreaScrollbarVisible from './ScrollAreaScrollbarVisible.vue'\n\ndefineOptions({\n  name: 'ScrollAreaScrollbar',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ScrollAreaScrollbarProps>(), DEFAULT_SCROLLBAR_PROPS)\nconst context = useScrollAreaContext('ScrollAreaScrollbar')\n\nconst scrollAreaScrollbar = useScrollAreaScrollbar(convertPropsToHookProps(props))\n\nconst Comp = context.type === 'hover'\n  ? ScrollAreaScrollbarHover\n  : context.type === 'scroll'\n    ? ScrollAreaScrollbarScroll\n    : context.type === 'auto'\n      ? ScrollAreaScrollbarAuto\n      : ScrollAreaScrollbarVisible\n</script>\n\n<template>\n  <Comp v-bind=\"normalizeAttrs(scrollAreaScrollbar.attrs([$attrs]))\">\n    <slot />\n  </Comp>\n</template>\n","import type { PrimitiveDefaultProps } from '../shared/index.ts'\nimport { shallowRef } from 'vue'\nimport { usePresence } from '../presence/index.ts'\nimport { useScrollbarContext } from './ScrollAreaScrollbar.ts'\n\nexport interface ScrollAreaThumbProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_SCROLL_AREA_THUMB_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<ScrollAreaThumbProps>\n\nexport interface UseScrollAreaThumbProps {\n  forceMount?: boolean\n}\n\nexport function useScrollAreaThumb(props: UseScrollAreaThumbProps) {\n  const scrollbarContext = useScrollbarContext('ScrollAreaThumb')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(scrollbarContext.thumb, scrollbarContext.hasThumb)\n\n  return {\n    isPresent,\n  }\n}\n","import type { RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useDebounceFn } from '@vueuse/core'\nimport { onWatcherCleanup, watchEffect } from 'vue'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\nimport { useScrollbarContext } from './ScrollAreaScrollbar.ts'\nimport { addUnlinkedScrollListener } from './utils.ts'\n\nexport function useScrollAreaThumbImpl(): RadixPrimitiveReturns {\n  const scrollAreaContext = useScrollAreaContext('ScrollAreaThumb')\n  const scrollbarContext = useScrollbarContext('ScrollAreaThumb')\n\n  function setElRef(templateEl: HTMLElement | undefined) {\n    scrollbarContext.thumb.value = templateEl\n  }\n\n  let removeUnlinkedScrollListener: (() => void) | undefined\n\n  const debounceScrollEnd = useDebounceFn(() => {\n    if (!removeUnlinkedScrollListener)\n      return\n\n    removeUnlinkedScrollListener()\n    removeUnlinkedScrollListener = undefined\n  }, 100)\n\n  watchEffect(() => {\n    const viewport = scrollAreaContext.viewport.value\n    if (!viewport)\n      return\n\n    /**\n     * We only bind to native scroll event so we know when scroll starts and ends.\n     * When scroll starts we start a requestAnimationFrame loop that checks for\n     * changes to scroll position. That rAF loop triggers our thumb position change\n     * when relevant to avoid scroll-linked effects. We cancel the loop when scroll ends.\n     * https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_effects\n     */\n    function handleScroll() {\n      debounceScrollEnd()\n      if (!removeUnlinkedScrollListener) {\n        const listener = addUnlinkedScrollListener(viewport!, scrollbarContext.onThumbPositionChange)\n        removeUnlinkedScrollListener = listener\n        scrollbarContext.onThumbPositionChange()\n      }\n    }\n\n    scrollbarContext.onThumbPositionChange()\n    viewport.addEventListener('scroll', handleScroll)\n\n    onWatcherCleanup(() => {\n      viewport.removeEventListener('scroll', handleScroll)\n    })\n  })\n\n  function onPointerdownCapture(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\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\n  function onPointerup(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    scrollbarContext.onThumbPointerUp()\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'elRef': setElRef,\n        'data-state': scrollbarContext.hasThumb.value ? 'visible' : 'hidden',\n        'style': 'width: var(--radix-scroll-area-thumb-width); height: var(--radix-scroll-area-thumb-height)',\n        onPointerdownCapture,\n        onPointerup,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { useScrollAreaThumbImpl } from './ScrollAreaThumbImpl.ts'\n\ndefineOptions({\n  name: 'ScrollAreaThumbImpl',\n  inheritAttrs: false,\n})\n\nconst scrollAreaThumbImpl = useScrollAreaThumbImpl()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(scrollAreaThumbImpl.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { DEFAULT_SCROLL_AREA_THUMB_PROPS, type ScrollAreaThumbProps, useScrollAreaThumb } from './ScrollAreaThumb.ts'\nimport ScrollAreaThumbImpl from './ScrollAreaThumbImpl.vue'\n\ndefineOptions({\n  name: 'ScrollAreaThumb',\n})\n\nconst props = withDefaults(defineProps<ScrollAreaThumbProps>(), DEFAULT_SCROLL_AREA_THUMB_PROPS)\n\nconst scrollAreaThumb = useScrollAreaThumb(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <ScrollAreaThumbImpl v-if=\"scrollAreaThumb.isPresent.value\">\n    <slot />\n  </ScrollAreaThumbImpl>\n</template>\n","import { onMounted } from 'vue'\nimport { useRef } from '../hooks/index.ts'\nimport { mergePrimitiveAttrs, type PrimitiveElAttrs, type RadixPrimitiveReturns, type RefOrRefObject } from '../shared/index.ts'\nimport { useScrollAreaContext } from './ScrollAreaRoot.ts'\n\nexport interface ScrollAreaViewportProps {\n  el?: RefOrRefObject<HTMLElement | undefined>\n}\n\nexport function useScrollAreaViewport(props: ScrollAreaViewportProps = {}): RadixPrimitiveReturns {\n  const context = useScrollAreaContext('ScrollAreaViewport')\n  const el = props.el || useRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (value: HTMLElement | undefined) => el.value = value\n\n  onMounted(() => {\n    context.viewport.value = el.value\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const attrs: PrimitiveElAttrs = {\n        'elRef': setElRef,\n        'data-radix-scroll-area-viewport': '',\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/overflowed#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.value ? 'scroll' : 'hidden',\n          overflowY: context.scrollbarYEnabled.value ? 'scroll' : 'hidden',\n        },\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { useScrollAreaViewport } from './ScrollAreaViewport.ts'\n\ndefineOptions({\n  name: 'ScrollAreaViewport',\n  inheritAttrs: false,\n})\n\nconst scrollAreaViewport = useScrollAreaViewport()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(scrollAreaViewport.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":["ScrollAreaScrollbarHover","ScrollAreaScrollbarScroll","ScrollAreaScrollbarAuto","ScrollAreaScrollbarVisible"],"mappings":"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"}