{"version":3,"file":"scroll.vue2.mjs","sources":["../../../components/scroll/scroll.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Scrollbar } from '@/components/scrollbar'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport {\r\n  computed,\r\n  nextTick,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  ref,\r\n  shallowReadonly,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport { useRtl, useSetTimeout } from '@vexip-ui/hooks'\r\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\r\nimport { scrollProps } from './props'\r\nimport { useScrollWrapper } from './hooks'\r\nimport { MOVE_EVENT, UP_EVENT, scrollModes } from './symbol'\r\n\r\nimport type { ScrollbarExposed } from '@/components/scrollbar'\r\nimport type { EventHandler } from '@vexip-ui/utils'\r\nimport type { ScrollMode } from './symbol'\r\n\r\ndefineOptions({ name: 'Scroll' })\r\n\r\nconst _props = defineProps(scrollProps)\r\nconst props = useProps('scroll', _props, {\r\n  scrollClass: null,\r\n  scrollStyle: null,\r\n  scrollAttrs: null,\r\n  mode: {\r\n    default: 'vertical',\r\n    validator: value => scrollModes.includes(value),\r\n  },\r\n  width: '',\r\n  height: '',\r\n  deltaX: 40,\r\n  deltaY: 40,\r\n  disabled: false,\r\n  pointer: USE_TOUCH,\r\n  wheel: true,\r\n  scrollX: {\r\n    default: 0,\r\n    static: true,\r\n  },\r\n  scrollY: {\r\n    default: 0,\r\n    static: true,\r\n  },\r\n  useXBar: false,\r\n  useYBar: false,\r\n  barFade: 1500,\r\n  barClass: null,\r\n  autoplay: false,\r\n  playWaiting: 500,\r\n  noBuffer: false,\r\n  noTransition: false,\r\n  onBeforeScroll: {\r\n    default: null,\r\n    isFunc: true,\r\n  },\r\n  useBarTrack: false,\r\n  scrollTag: 'div',\r\n})\r\n\r\nconst emitter = createEventEmitter()\r\n\r\nconst nh = useNameHelper('scroll')\r\nconst { isRtl } = useRtl()\r\nconst { timer } = useSetTimeout()\r\n\r\nconst usingBar = ref(false)\r\nconst scrolling = ref(false)\r\nconst transitionDuration = ref<number>(0)\r\nconst mode = computed(() => (props.mode === 'horizontal-exact' ? 'horizontal' : props.mode))\r\n\r\nlet waitDelay = 180\r\n\r\nconst xBar = ref<ScrollbarExposed>()\r\nconst yBar = ref<ScrollbarExposed>()\r\n\r\nlet initialized = false\r\n\r\nconst {\r\n  wrapperEl,\r\n  contentEl,\r\n\r\n  wrapper,\r\n  isReady,\r\n  x,\r\n  y,\r\n  percentX,\r\n  percentY,\r\n  xScrollLimit,\r\n  yScrollLimit,\r\n  enableXScroll,\r\n  enableYScroll,\r\n  xBarLength,\r\n  yBarLength,\r\n\r\n  handleResize,\r\n  verifyScroll,\r\n  computePercent,\r\n  refresh,\r\n  triggerUpdate,\r\n} = useScrollWrapper({\r\n  mode,\r\n  disabled: toRef(props, 'disabled'),\r\n  width: toRef(props, 'width'),\r\n  height: toRef(props, 'height'),\r\n  scrollX: toRef(props, 'scrollX'),\r\n  scrollY: toRef(props, 'scrollY'),\r\n  onResize: entry => {\r\n    emitEvent(props.onResize, entry)\r\n  },\r\n  // onBeforeRefresh: stopAutoplay,\r\n  onAfterRefresh: () => {\r\n    syncBarScroll()\r\n\r\n    if (!initialized) {\r\n      initialized = true\r\n      startAutoplay()\r\n    }\r\n  },\r\n})\r\n\r\nconst slotParams = shallowReadonly({\r\n  getState,\r\n  refresh,\r\n  scrollTo,\r\n  scrollBy,\r\n  scrollToElement,\r\n  ensureInView,\r\n})\r\n\r\n/* autoplay */\r\nconst canPlay = ref(false)\r\n\r\nconst canAutoplay = computed(() => {\r\n  return (\r\n    mode.value !== 'both' &&\r\n    (isTrue(props.autoplay) || +props.autoplay > 1000) &&\r\n    ((mode.value === 'horizontal' && enableXScroll.value) ||\r\n      (mode.value === 'vertical' && enableYScroll.value))\r\n  )\r\n})\r\n\r\nwatch([() => props.autoplay, () => props.playWaiting], () => {\r\n  stopAutoplay()\r\n  nextTick(startAutoplay)\r\n})\r\n\r\nfunction startAutoplay() {\r\n  if (!canAutoplay.value) return\r\n\r\n  stopAutoplay()\r\n\r\n  const distance = mode.value === 'horizontal' ? 'width' : 'height'\r\n  const limit = mode.value === 'horizontal' ? xScrollLimit : yScrollLimit\r\n  // const prop = mode.value === 'horizontal' ? 'x' : 'y'\r\n  const prop = mode.value === 'horizontal' ? x : y\r\n  const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\r\n\r\n  let playSpeed = 0.5\r\n\r\n  if (typeof props.autoplay === 'number') {\r\n    playSpeed = (wrapper[distance] / props.autoplay) * 16\r\n  }\r\n\r\n  const precessScroll = () => {\r\n    computePercent()\r\n    triggerUpdate()\r\n    syncBarScroll()\r\n    emitScrollEvent(mode.value)\r\n  }\r\n  const scroll = () => {\r\n    prop.value -= playSpeed\r\n\r\n    if (prop.value <= limit.value) {\r\n      prop.value = limit.value\r\n      canPlay.value = false\r\n\r\n      precessScroll()\r\n\r\n      timer.end = setTimeout(() => {\r\n        scrollTo(0, 0, 500)\r\n\r\n        timer.start = setTimeout(() => {\r\n          canPlay.value = true\r\n\r\n          emitScrollEvent(mode.value)\r\n          scroll()\r\n        }, 500 + waiting)\r\n      }, waiting)\r\n    } else {\r\n      precessScroll()\r\n\r\n      if (canPlay.value) {\r\n        requestAnimationFrame(scroll)\r\n      }\r\n    }\r\n  }\r\n\r\n  timer.play = setTimeout(() => {\r\n    canPlay.value = true\r\n    scroll()\r\n  }, waiting)\r\n}\r\n\r\nfunction stopAutoplay() {\r\n  canPlay.value = false\r\n\r\n  clearTimeout(timer.play)\r\n  clearTimeout(timer.start)\r\n  clearTimeout(timer.end)\r\n}\r\n/* autoplay */\r\n\r\nconst className = computed(() => {\r\n  return [\r\n    nh.b(),\r\n    nh.bs('vars'),\r\n    nh.bm(mode.value),\r\n    {\r\n      [nh.bm('inherit')]: props.inherit,\r\n      [nh.bm('using-bar')]: usingBar.value,\r\n      [nh.bm('scrolling')]: scrolling.value,\r\n      [nh.bm('no-ready')]: !isReady.value,\r\n      [nh.bm('no-transition')]: props.noTransition,\r\n    },\r\n  ]\r\n})\r\nconst style = computed(() => {\r\n  const { width, height } = props\r\n\r\n  return {\r\n    width: width\r\n      ? typeof width === 'string'\r\n        ? Number.isNaN(Number(width))\r\n          ? width\r\n          : `${Number(width)}px`\r\n        : `${width}px`\r\n      : undefined,\r\n    height: height\r\n      ? typeof height === 'string'\r\n        ? Number.isNaN(Number(height))\r\n          ? height\r\n          : `${Number(height)}px`\r\n        : `${height}px`\r\n      : undefined,\r\n  }\r\n})\r\nconst wrapperClass = computed(() => {\r\n  return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\r\n})\r\nconst wrapperStyle = computed(() => {\r\n  return [props.scrollAttrs?.style, props.scrollStyle]\r\n})\r\n\r\nwatch(enableXScroll, value => {\r\n  emitEvent(props.onXEnabledChange, value)\r\n})\r\nwatch(enableYScroll, value => {\r\n  emitEvent(props.onYEnabledChange, value)\r\n})\r\nwatch(isReady, value => {\r\n  if (value) {\r\n    transitionDuration.value = -1\r\n    emitEvent(props.onReady)\r\n  } else {\r\n    transitionDuration.value = 0\r\n  }\r\n})\r\nwatchEffect(() => {\r\n  if (!contentEl.value) return\r\n\r\n  contentEl.value.style.transform = `translate3d(${isRtl.value ? -x.value : x.value}px, ${\r\n    y.value\r\n  }px, 0)`\r\n})\r\nwatchEffect(() => {\r\n  if (!contentEl.value) return\r\n\r\n  contentEl.value.style.transitionDuration =\r\n    transitionDuration.value < 0 ? '' : `${transitionDuration.value}ms`\r\n})\r\n\r\nonMounted(() => {\r\n  if (!isClient || !wrapperEl.value) return\r\n\r\n  const style = getComputedStyle(wrapperEl.value)\r\n  const duration = style.getPropertyValue(nh.cv('move-duration')).trim()\r\n\r\n  if (duration.endsWith('ms')) {\r\n    waitDelay = parseFloat(duration)\r\n  } else if (duration.endsWith('s')) {\r\n    waitDelay = parseFloat(duration) * 1000\r\n  }\r\n\r\n  waitDelay = Number.isNaN(waitDelay) ? 140 : waitDelay\r\n})\r\n\r\nonBeforeUnmount(stopAutoplay)\r\n\r\ndefineExpose({\r\n  percentX,\r\n  percentY,\r\n  x,\r\n  y,\r\n  isReady,\r\n\r\n  xBarLength,\r\n  yBarLength,\r\n  enableXScroll,\r\n  enableYScroll,\r\n\r\n  wrapper: wrapperEl,\r\n  content: contentEl,\r\n  xBar,\r\n  yBar,\r\n\r\n  refresh,\r\n  scrollTo,\r\n  scrollBy,\r\n  scrollToElement,\r\n  ensureInView,\r\n  getXScrollLimit,\r\n  getYScrollLimit,\r\n  addScrollListener,\r\n  removeScrollListener,\r\n})\r\n\r\nfunction getCommonPayload() {\r\n  return {\r\n    clientX: -x.value,\r\n    clientY: -y.value,\r\n    percentX: percentX.value,\r\n    percentY: percentY.value,\r\n  }\r\n}\r\n\r\nfunction syncBarScroll() {\r\n  xBar.value?.handleScroll(percentX.value)\r\n  yBar.value?.handleScroll(percentY.value)\r\n}\r\n\r\nfunction handleMouseDown(event: MouseEvent) {\r\n  if (!props.pointer || event.button > 0 || USE_TOUCH) {\r\n    return false\r\n  }\r\n\r\n  handlePointerDown(event)\r\n}\r\n\r\nfunction handleTouchStart(event: TouchEvent) {\r\n  if (!props.pointer || event.touches.length !== 1) {\r\n    return false\r\n  }\r\n\r\n  handlePointerDown(event)\r\n}\r\n\r\n// 记录滚动开始位置\r\nlet xScrollStartAt = 0\r\nlet yScrollStartAt = 0\r\n\r\n// 记录滚动开始鼠标位置\r\nlet cursorXPosition = 0\r\nlet cursorYPosition = 0\r\n\r\nlet moved = false\r\nlet target: EventTarget | null = null\r\nlet lastDate = 0\r\n\r\nfunction handlePointerDown(event: MouseEvent | TouchEvent) {\r\n  if (!enableXScroll.value && !enableYScroll.value) {\r\n    return false\r\n  }\r\n\r\n  if (event.cancelable) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  prepareScroll()\r\n\r\n  transitionDuration.value = 0\r\n\r\n  const pointer = 'touches' in event ? event.touches[0] : event\r\n\r\n  xScrollStartAt = x.value\r\n  yScrollStartAt = y.value\r\n  cursorXPosition = pointer.clientX\r\n  cursorYPosition = pointer.clientY\r\n\r\n  moved = false\r\n  target = event.target\r\n  lastDate = Date.now()\r\n\r\n  document.addEventListener(MOVE_EVENT, handlePointerMove)\r\n  document.addEventListener(UP_EVENT, handlePointerUp)\r\n\r\n  emitEvent(props.onScrollStart, getCommonPayload())\r\n}\r\n\r\nfunction handlePointerMove(event: MouseEvent | TouchEvent) {\r\n  event.stopPropagation()\r\n\r\n  if (!USE_TOUCH) {\r\n    event.preventDefault()\r\n  }\r\n\r\n  const pointer = 'touches' in event ? event.touches[0] : event\r\n  const signX = pointer.clientX - cursorXPosition > 0 ? 1 : -1\r\n  const signY = pointer.clientY - cursorYPosition > 0 ? 1 : -1\r\n\r\n  if (props.onBeforeScroll?.({ signX, signY }) === false) {\r\n    return false\r\n  }\r\n\r\n  scrolling.value = true\r\n\r\n  if (enableXScroll.value) {\r\n    x.value = xScrollStartAt + pointer.clientX - cursorXPosition\r\n    moved = true\r\n  }\r\n\r\n  if (enableYScroll.value) {\r\n    y.value = yScrollStartAt + pointer.clientY - cursorYPosition\r\n    moved = true\r\n  }\r\n\r\n  if (props.noBuffer) {\r\n    verifyScroll()\r\n  } else {\r\n    computePercent()\r\n    triggerUpdate()\r\n  }\r\n\r\n  syncBarScroll()\r\n  emitScrollEvent(mode.value)\r\n}\r\n\r\nfunction handlePointerUp(event: MouseEvent | TouchEvent) {\r\n  if (!moved && target && event.target === target && Date.now() - lastDate <= 500) {\r\n    target.dispatchEvent(new MouseEvent('click', event))\r\n  }\r\n\r\n  document.removeEventListener(MOVE_EVENT, handlePointerMove)\r\n  document.removeEventListener(UP_EVENT, handlePointerUp)\r\n\r\n  transitionDuration.value = -1\r\n  moved = false\r\n\r\n  handleBuffer()\r\n  verifyScroll()\r\n  syncBarScroll()\r\n  emitEvent(props.onScrollEnd, getCommonPayload())\r\n  startAutoplay()\r\n}\r\n\r\n// 按下 shift 时为横向滚动，保持和原生操作一致\r\nfunction handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\r\n  const isVerticalScroll = enableYScroll.value && type === 'vertical'\r\n  const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\r\n\r\n  // 纵横滚动均使用 deltaY 标记\r\n  const sign = event.deltaY > 0 ? -1 : 1\r\n\r\n  if (\r\n    props.wheel &&\r\n    (isVerticalScroll || isHorizontalScroll) &&\r\n    props.onBeforeScroll?.({ signX: -sign, signY: -sign }) !== false\r\n  ) {\r\n    event.preventDefault()\r\n    event.stopPropagation()\r\n  } else {\r\n    return true\r\n  }\r\n\r\n  if (mode.value !== 'both' && mode.value !== type) return false\r\n\r\n  prepareScroll()\r\n\r\n  const computedDelta = sign * (type === 'horizontal' ? props.deltaX : props.deltaY)\r\n\r\n  if (isVerticalScroll) {\r\n    y.value += computedDelta\r\n  } else if (isHorizontalScroll) {\r\n    x.value += computedDelta\r\n  }\r\n\r\n  verifyScroll()\r\n  syncBarScroll()\r\n  emitScrollEvent(type)\r\n\r\n  emitEvent(props.onWheel, {\r\n    ...getCommonPayload(),\r\n    type,\r\n    sign: -sign as 1 | -1,\r\n  })\r\n\r\n  startAutoplay()\r\n}\r\n\r\nfunction prepareScroll() {\r\n  stopAutoplay()\r\n  clearTimeout(timer.buffer)\r\n}\r\n\r\nfunction handleBuffer() {\r\n  if (props.noBuffer) {\r\n    timer.buffer = setTimeout(() => {\r\n      scrolling.value = false\r\n    }, 300)\r\n  } else {\r\n    scrolling.value = false\r\n  }\r\n}\r\n\r\nfunction handleBarScrollStart(type: 'vertical' | 'horizontal') {\r\n  usingBar.value = true\r\n  emitEvent(props.onBarScrollStart, { ...getCommonPayload(), type })\r\n}\r\n\r\nfunction handleBarScrollEnd(type: 'vertical' | 'horizontal') {\r\n  usingBar.value = false\r\n  emitEvent(props.onBarScrollEnd, { ...getCommonPayload(), type })\r\n}\r\n\r\nfunction handleXBarScroll(percent: number) {\r\n  percentX.value = percent\r\n  x.value = (percent * xScrollLimit.value) / 100\r\n  triggerUpdate()\r\n\r\n  emitEvent(props.onBarScroll, {\r\n    ...getCommonPayload(),\r\n    type: 'horizontal',\r\n  })\r\n  emitScrollEvent('horizontal')\r\n}\r\n\r\nfunction handleYBarScroll(percent: number) {\r\n  percentY.value = percent\r\n  y.value = (percent * yScrollLimit.value) / 100\r\n  triggerUpdate()\r\n\r\n  emitEvent(props.onBarScroll, {\r\n    ...getCommonPayload(),\r\n    type: 'vertical',\r\n  })\r\n  emitScrollEvent('vertical')\r\n}\r\n\r\nfunction emitScrollEvent(type: Exclude<ScrollMode, 'horizontal-exact'>) {\r\n  emitEvent(props.onScroll, {\r\n    ...getCommonPayload(),\r\n    type,\r\n  })\r\n  emitter.emit('scroll', {\r\n    ...getCommonPayload(),\r\n    type,\r\n  })\r\n}\r\n\r\nfunction ensureScrollOffset() {\r\n  if (wrapperEl.value) {\r\n    wrapperEl.value.scrollTop = 0\r\n    wrapperEl.value.scrollLeft = 0\r\n  }\r\n}\r\n\r\nfunction getState() {\r\n  const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\r\n\r\n  return {\r\n    scrollX,\r\n    scrollY,\r\n    percentX,\r\n    percentY,\r\n    enableXScroll: enableXScroll.value,\r\n    enableYScroll: enableYScroll.value,\r\n  }\r\n}\r\n\r\nfunction waitTransition(duration = waitDelay) {\r\n  clearTimeout(timer.wait)\r\n\r\n  return new Promise<void>(resolve => {\r\n    timer.wait = setTimeout(() => resolve(), duration + 1)\r\n  })\r\n}\r\n\r\nfunction scrollTo(clientX: number, clientY: number, duration?: number) {\r\n  setDuration(duration)\r\n  nextTick(() => {\r\n    let changed = false\r\n\r\n    if (enableXScroll.value && Math.abs(x.value + clientX) > 0.01) {\r\n      x.value = -clientX\r\n      changed = true\r\n    }\r\n\r\n    if (enableYScroll.value && Math.abs(y.value + clientY) > 0.01) {\r\n      y.value = -clientY\r\n      changed = true\r\n    }\r\n\r\n    verifyScroll()\r\n    syncBarScroll()\r\n\r\n    if (!changed) transitionDuration.value = -1\r\n  })\r\n\r\n  return waitTransition(duration)\r\n}\r\n\r\nfunction scrollBy(deltaX: number, deltaY: number, duration?: number) {\r\n  setDuration(duration)\r\n  nextTick(() => {\r\n    let changed = false\r\n\r\n    if (deltaX && enableXScroll) {\r\n      x.value -= deltaX\r\n      changed = true\r\n    }\r\n\r\n    if (deltaY && enableYScroll) {\r\n      y.value -= deltaY\r\n      changed = true\r\n    }\r\n\r\n    verifyScroll()\r\n    syncBarScroll()\r\n\r\n    if (!changed) transitionDuration.value = -1\r\n  })\r\n\r\n  return waitTransition(duration)\r\n}\r\n\r\nfunction setDuration(duration?: number) {\r\n  if (typeof duration === 'number') {\r\n    transitionDuration.value = duration\r\n\r\n    if (transitionDuration.value === 0) {\r\n      nextTick(() => {\r\n        transitionDuration.value = -1\r\n      })\r\n    }\r\n  }\r\n}\r\n\r\nfunction scrollToElement(el: string | Element, duration?: number, offset = 0) {\r\n  if (!contentEl.value) return Promise.resolve()\r\n\r\n  if (typeof el === 'string') {\r\n    el = contentEl.value.querySelector(el)!\r\n  }\r\n\r\n  if (!isElement(el)) return Promise.resolve()\r\n\r\n  const wrapperRect = contentEl.value.getBoundingClientRect()\r\n  const elRect = el.getBoundingClientRect()\r\n\r\n  let clientX = 0\r\n  let clientY = 0\r\n\r\n  if (mode.value !== 'vertical') {\r\n    clientX = elRect.left - wrapperRect.left + offset\r\n  }\r\n\r\n  if (mode.value !== 'horizontal') {\r\n    clientY = elRect.top - wrapperRect.top + offset\r\n  }\r\n\r\n  return scrollTo(clientX, clientY, duration)\r\n}\r\n\r\nfunction ensureInView(el: string | Element, duration?: number, offset = 0) {\r\n  if (!wrapperEl.value) return Promise.resolve()\r\n\r\n  if (typeof el === 'string') {\r\n    el = wrapperEl.value.querySelector(el)!\r\n  }\r\n\r\n  if (!isElement(el)) return Promise.resolve()\r\n\r\n  const wrapperRect = wrapperEl.value.getBoundingClientRect()\r\n  const elRect = el.getBoundingClientRect()\r\n\r\n  let clientX = 0\r\n  let clientY = 0\r\n\r\n  if (mode.value !== 'vertical') {\r\n    if (elRect.left < wrapperRect.left + offset) {\r\n      clientX = elRect.left - wrapperRect.left - offset\r\n    } else if (elRect.right > wrapperRect.right - offset) {\r\n      clientX = elRect.right - wrapperRect.right + offset\r\n    }\r\n  }\r\n\r\n  if (mode.value !== 'horizontal') {\r\n    if (elRect.top < wrapperRect.top + offset) {\r\n      clientY = elRect.top - wrapperRect.top - offset\r\n    } else if (elRect.bottom > wrapperRect.bottom - offset) {\r\n      clientY = elRect.bottom - wrapperRect.bottom + offset\r\n    }\r\n  }\r\n\r\n  return scrollBy(clientX, clientY, duration)\r\n}\r\n\r\nfunction getXScrollLimit() {\r\n  return [0, -xScrollLimit.value]\r\n}\r\n\r\nfunction getYScrollLimit() {\r\n  return [0, -yScrollLimit.value]\r\n}\r\n\r\nfunction addScrollListener(listener: EventHandler) {\r\n  emitter.on('scroll', listener)\r\n}\r\n\r\nfunction removeScrollListener(listener: EventHandler) {\r\n  emitter.off('scroll', listener)\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    ref=\"wrapperEl\"\r\n    :class=\"className\"\r\n    :style=\"style\"\r\n    @mousedown=\"handleMouseDown\"\r\n    @touchstart=\"handleTouchStart\"\r\n    @scroll=\"ensureScrollOffset\"\r\n    @wheel.exact=\"\r\n      handleWheel($event, props.mode === 'horizontal-exact' ? 'horizontal' : 'vertical')\r\n    \"\r\n    @wheel.shift=\"handleWheel($event, 'horizontal')\"\r\n  >\r\n    <div v-if=\"$slots.extra\" :class=\"nh.be('extra')\">\r\n      <slot name=\"extra\" v-bind=\"slotParams\"></slot>\r\n    </div>\r\n    <ResizeObserver throttle :on-resize=\"handleResize\">\r\n      <component\r\n        :is=\"props.scrollTag || 'div'\"\r\n        v-bind=\"props.scrollAttrs\"\r\n        ref=\"contentEl\"\r\n        :class=\"wrapperClass\"\r\n        :style=\"wrapperStyle\"\r\n        @transitionend=\"transitionDuration = -1\"\r\n      >\r\n        <slot v-bind=\"slotParams\"></slot>\r\n      </component>\r\n    </ResizeObserver>\r\n    <Scrollbar\r\n      v-if=\"props.useXBar\"\r\n      ref=\"xBar\"\r\n      inherit\r\n      placement=\"bottom\"\r\n      :class=\"[nh.bem('bar', 'horizontal'), props.barClass]\"\r\n      :fade=\"props.barFade\"\r\n      :bar-length=\"xBarLength\"\r\n      :disabled=\"!enableXScroll\"\r\n      :duration=\"transitionDuration\"\r\n      :use-track=\"props.useBarTrack\"\r\n      @scroll-start=\"handleBarScrollStart('horizontal')\"\r\n      @scroll=\"handleXBarScroll\"\r\n      @scroll-end=\"handleBarScrollEnd('horizontal')\"\r\n    ></Scrollbar>\r\n    <Scrollbar\r\n      v-if=\"props.useYBar\"\r\n      ref=\"yBar\"\r\n      inherit\r\n      placement=\"right\"\r\n      :class=\"[nh.bem('bar', 'vertical'), props.barClass]\"\r\n      :fade=\"props.barFade\"\r\n      :bar-length=\"yBarLength\"\r\n      :disabled=\"!enableYScroll\"\r\n      :duration=\"transitionDuration\"\r\n      :use-track=\"props.useBarTrack\"\r\n      @scroll-start=\"handleBarScrollStart('vertical')\"\r\n      @scroll=\"handleYBarScroll\"\r\n      @scroll-end=\"handleBarScrollEnd('vertical')\"\r\n    ></Scrollbar>\r\n  </div>\r\n</template>\r\n"],"names":["props","useProps","__props","value","scrollModes","USE_TOUCH","emitter","createEventEmitter","nh","useNameHelper","isRtl","useRtl","timer","useSetTimeout","usingBar","ref","scrolling","transitionDuration","mode","computed","waitDelay","xBar","yBar","initialized","wrapperEl","contentEl","wrapper","isReady","x","y","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","handleResize","verifyScroll","computePercent","refresh","triggerUpdate","useScrollWrapper","toRef","entry","emitEvent","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","scrollTo","scrollBy","scrollToElement","ensureInView","canPlay","canAutoplay","isTrue","watch","stopAutoplay","nextTick","distance","limit","prop","waiting","playSpeed","precessScroll","emitScrollEvent","scroll","className","style","width","height","wrapperClass","_a","wrapperStyle","watchEffect","onMounted","isClient","duration","onBeforeUnmount","__expose","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","_b","handleMouseDown","event","handlePointerDown","handleTouchStart","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","moved","target","lastDate","prepareScroll","pointer","MOVE_EVENT","handlePointerMove","UP_EVENT","handlePointerUp","signX","signY","handleBuffer","handleWheel","type","isVerticalScroll","isHorizontalScroll","sign","computedDelta","handleBarScrollStart","handleBarScrollEnd","handleXBarScroll","percent","handleYBarScroll","ensureScrollOffset","scrollX","scrollY","waitTransition","resolve","clientX","clientY","setDuration","changed","deltaX","deltaY","el","offset","isElement","wrapperRect","elRect","listener","_createElementBlock","$event","_unref","_cache","_withModifiers","$slots","_normalizeClass","_renderSlot","_ctx","_createVNode","ResizeObserver","_createBlock","_resolveDynamicComponent","_mergeProps","Scrollbar"],"mappings":"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"}