UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 14.6 kB
{"version":3,"file":"scrollbar2.mjs","sources":["../../../../../../packages/components/scrollbar/src/scrollbar.vue"],"sourcesContent":["<template>\n <div ref=\"scrollbarRef\" :class=\"ns.b()\">\n <div\n ref=\"wrapRef\"\n :class=\"wrapKls\"\n :style=\"wrapStyle\"\n :tabindex=\"tabindex\"\n @scroll=\"handleScroll\"\n >\n <component\n :is=\"tag\"\n :id=\"id\"\n ref=\"resizeRef\"\n :class=\"resizeKls\"\n :style=\"viewStyle\"\n :role=\"role\"\n :aria-label=\"ariaLabel\"\n :aria-orientation=\"ariaOrientation\"\n >\n <slot />\n </component>\n </div>\n <template v-if=\"!native\">\n <bar ref=\"barRef\" :always=\"always\" :min-size=\"minSize\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n provide,\n reactive,\n ref,\n watch,\n} from 'vue'\nimport { useEventListener, useResizeObserver } from '@vueuse/core'\nimport { addUnit, debugWarn, isNumber, isObject } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Bar from './bar.vue'\nimport { scrollbarContextKey } from './constants'\nimport { scrollbarEmits, scrollbarProps } from './scrollbar'\n\nimport type { ScrollbarDirection } from './scrollbar'\nimport type { BarInstance } from './bar'\nimport type { CSSProperties, StyleValue } from 'vue'\n\nconst COMPONENT_NAME = 'ElScrollbar'\n\ndefineOptions({\n name: COMPONENT_NAME,\n})\n\nconst props = defineProps(scrollbarProps)\nconst emit = defineEmits(scrollbarEmits)\n\nconst ns = useNamespace('scrollbar')\n\nlet stopResizeObserver: (() => void) | undefined = undefined\nlet stopWrapResizeObserver: (() => void) | undefined = undefined\nlet stopResizeListener: (() => void) | undefined = undefined\nlet wrapScrollTop = 0\nlet wrapScrollLeft = 0\nlet direction = '' as ScrollbarDirection\nconst distanceScrollState = {\n bottom: false,\n top: false,\n right: false,\n left: false,\n}\n\nconst scrollbarRef = ref<HTMLDivElement>()\nconst wrapRef = ref<HTMLDivElement>()\nconst resizeRef = ref<HTMLElement>()\nconst barRef = ref<BarInstance>()\n\nconst wrapStyle = computed<StyleValue>(() => {\n const style: CSSProperties = {}\n const height = addUnit(props.height)\n const maxHeight = addUnit(props.maxHeight)\n if (height) style.height = height\n if (maxHeight) style.maxHeight = maxHeight\n return [props.wrapStyle, style]\n})\n\nconst wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e('wrap'),\n { [ns.em('wrap', 'hidden-default')]: !props.native },\n ]\n})\n\nconst resizeKls = computed(() => {\n return [ns.e('view'), props.viewClass]\n})\n\nconst shouldSkipDirection = (direction: ScrollbarDirection) => {\n return distanceScrollState[direction] ?? false\n}\n\nconst DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\nconst updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {\n const oppositeDirection = DIRECTION_PAIRS[direction]\n if (!oppositeDirection) return\n\n const arrived = arrivedStates[direction]\n const oppositeArrived = arrivedStates[oppositeDirection]\n\n if (arrived && !distanceScrollState[direction]) {\n distanceScrollState[direction] = true\n }\n\n if (!oppositeArrived && distanceScrollState[oppositeDirection]) {\n distanceScrollState[oppositeDirection] = false\n }\n}\n\nconst handleScroll = () => {\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n const prevTop = wrapScrollTop\n const prevLeft = wrapScrollLeft\n wrapScrollTop = wrapRef.value.scrollTop\n wrapScrollLeft = wrapRef.value.scrollLeft\n\n const arrivedStates = {\n bottom:\n wrapScrollTop + wrapRef.value.clientHeight >=\n wrapRef.value.scrollHeight - props.distance,\n top: wrapScrollTop <= props.distance && prevTop !== 0,\n right:\n wrapScrollLeft + wrapRef.value.clientWidth >=\n wrapRef.value.scrollWidth - props.distance &&\n prevLeft !== wrapScrollLeft,\n left: wrapScrollLeft <= props.distance && prevLeft !== 0,\n }\n\n emit('scroll', {\n scrollTop: wrapScrollTop,\n scrollLeft: wrapScrollLeft,\n })\n\n if (prevTop !== wrapScrollTop) {\n direction = wrapScrollTop > prevTop ? 'bottom' : 'top'\n }\n if (prevLeft !== wrapScrollLeft) {\n direction = wrapScrollLeft > prevLeft ? 'right' : 'left'\n }\n if (props.distance > 0) {\n if (shouldSkipDirection(direction)) {\n return\n }\n updateTriggerStatus(arrivedStates)\n }\n if (arrivedStates[direction]) emit('end-reached', direction)\n }\n}\n\nfunction scrollTo(xCord: number, yCord?: number): void\nfunction scrollTo(options: ScrollToOptions): void\nfunction scrollTo(arg1: unknown, arg2?: number) {\n if (isObject(arg1)) {\n wrapRef.value!.scrollTo(arg1)\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value!.scrollTo(arg1, arg2)\n }\n}\n\nconst setScrollTop = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollTop = value\n}\n\nconst setScrollLeft = (value: number) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, 'value must be a number')\n return\n }\n wrapRef.value!.scrollLeft = value\n}\n\nconst update = () => {\n barRef.value?.update()\n distanceScrollState[direction] = false\n}\n\nwatch(\n () => props.noresize,\n (noresize) => {\n if (noresize) {\n stopResizeObserver?.()\n stopWrapResizeObserver?.()\n stopResizeListener?.()\n } else {\n ;({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update))\n ;({ stop: stopWrapResizeObserver } = useResizeObserver(wrapRef, update))\n stopResizeListener = useEventListener('resize', update)\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => [props.maxHeight, props.height],\n () => {\n if (!props.native)\n nextTick(() => {\n update()\n if (wrapRef.value) {\n barRef.value?.handleScroll(wrapRef.value)\n }\n })\n }\n)\n\nprovide(\n scrollbarContextKey,\n reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef,\n })\n)\n\nonActivated(() => {\n if (wrapRef.value) {\n wrapRef.value.scrollTop = wrapScrollTop\n wrapRef.value.scrollLeft = wrapScrollLeft\n }\n})\n\nonMounted(() => {\n if (!props.native)\n nextTick(() => {\n update()\n })\n})\nonUpdated(() => update())\n\ndefineExpose({\n /** @description scrollbar wrap ref */\n wrapRef,\n /** @description update scrollbar state manually */\n update,\n /** @description scrolls to a particular set of coordinates */\n scrollTo,\n /** @description set distance to scroll top */\n setScrollTop,\n /** @description set distance to scroll left */\n setScrollLeft,\n /** @description handle scroll event */\n handleScroll,\n})\n</script>\n"],"names":["direction","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_normalizeStyle","tabindex","_createBlock","_resolveDynamicComponent","tag","id","viewStyle","role","ariaLabel","ariaOrientation","_renderSlot","native","always","minSize"],"mappings":"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"}