@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 35.6 kB
Source Map (JSON)
{"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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"}