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