UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 29 kB
{"version":3,"file":"build-list.mjs","sources":["../../../../../../../packages/components/virtual-list/src/builders/build-list.ts"],"sourcesContent":["import {\n Fragment,\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n mergeProps,\n nextTick,\n onActivated,\n onMounted,\n onUpdated,\n ref,\n resolveDynamicComponent,\n unref,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { hasOwn, isClient, isNumber, isString } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useCache } from '../hooks/use-cache'\nimport useWheel from '../hooks/use-wheel'\nimport Scrollbar from '../components/scrollbar'\nimport { getRTLOffsetType, getScrollDir, isHorizontal } from '../utils'\nimport { virtualizedListProps } from '../props'\nimport {\n AUTO_ALIGNMENT,\n BACKWARD,\n FORWARD,\n HORIZONTAL,\n ITEM_RENDER_EVT,\n RTL,\n RTL_OFFSET_NAG,\n RTL_OFFSET_POS_ASC,\n RTL_OFFSET_POS_DESC,\n SCROLL_EVT,\n} from '../defaults'\n\nimport type { CSSProperties, Slot, VNode, VNodeChild } from 'vue'\nimport type { Alignment, ListConstructorProps } from '../types'\nimport type { VirtualizedListProps } from '../props'\n\nconst createList = ({\n name,\n getOffset,\n getItemSize,\n getItemOffset,\n getEstimatedTotalSize,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initCache,\n clearCache,\n validateProps,\n}: ListConstructorProps<VirtualizedListProps>) => {\n return defineComponent({\n name: name ?? 'ElVirtualList',\n props: virtualizedListProps,\n emits: [ITEM_RENDER_EVT, SCROLL_EVT],\n setup(props, { emit, expose }) {\n validateProps(props)\n const instance = getCurrentInstance()!\n\n const ns = useNamespace('vl')\n\n const dynamicSizeCache = ref(initCache(props, instance))\n\n const getItemStyleCache = useCache<CSSProperties>()\n // refs\n // here windowRef and innerRef can be type of HTMLElement\n // or user defined component type, depends on the type passed\n // by user\n const windowRef = ref<HTMLElement>()\n const innerRef = ref<HTMLElement>()\n const scrollbarRef = ref()\n const states = ref({\n isScrolling: false,\n scrollDir: 'forward',\n scrollOffset: isNumber(props.initScrollOffset)\n ? props.initScrollOffset\n : 0,\n updateRequested: false,\n isScrollbarDragging: false,\n scrollbarAlwaysOn: props.scrollbarAlwaysOn,\n })\n\n // computed\n const itemsToRender = computed(() => {\n const { total, cache } = props\n const { isScrolling, scrollDir, scrollOffset } = unref(states)\n\n if (total === 0) {\n return [0, 0, 0, 0]\n }\n\n const startIndex = getStartIndexForOffset(\n props,\n scrollOffset,\n unref(dynamicSizeCache)\n )\n const stopIndex = getStopIndexForStartIndex(\n props,\n startIndex,\n scrollOffset,\n unref(dynamicSizeCache)\n )\n\n const cacheBackward =\n !isScrolling || scrollDir === BACKWARD ? Math.max(1, cache) : 1\n const cacheForward =\n !isScrolling || scrollDir === FORWARD ? Math.max(1, cache) : 1\n\n return [\n Math.max(0, startIndex - cacheBackward),\n Math.max(0, Math.min(total! - 1, stopIndex + cacheForward)),\n startIndex,\n stopIndex,\n ]\n })\n\n const estimatedTotalSize = computed(() =>\n getEstimatedTotalSize(props, unref(dynamicSizeCache))\n )\n\n const _isHorizontal = computed(() => isHorizontal(props.layout))\n\n const windowStyle = computed(() => [\n {\n position: 'relative',\n [`overflow-${_isHorizontal.value ? 'x' : 'y'}`]: 'scroll',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n },\n {\n direction: props.direction,\n height: isNumber(props.height) ? `${props.height}px` : props.height,\n width: isNumber(props.width) ? `${props.width}px` : props.width,\n },\n props.style,\n ])\n\n const innerStyle = computed(() => {\n const size = unref(estimatedTotalSize)\n const horizontal = unref(_isHorizontal)\n return {\n height: horizontal ? '100%' : `${size}px`,\n pointerEvents: unref(states).isScrolling ? 'none' : undefined,\n width: horizontal ? `${size}px` : '100%',\n\n // fix scrolling issues in Firefox.\n margin: 0,\n boxSizing: 'border-box',\n }\n })\n\n const clientSize = computed(() =>\n _isHorizontal.value ? props.width : props.height\n )\n\n // methods\n const { onWheel } = useWheel(\n {\n atStartEdge: computed(() => states.value.scrollOffset <= 0),\n atEndEdge: computed(\n () => states.value.scrollOffset >= estimatedTotalSize.value\n ),\n layout: computed(() => props.layout),\n },\n (offset) => {\n ;(\n scrollbarRef.value as {\n onMouseUp: () => void\n }\n ).onMouseUp?.()\n scrollTo(\n Math.min(\n states.value.scrollOffset + offset,\n estimatedTotalSize.value - (clientSize.value as number)\n )\n )\n }\n )\n\n useEventListener(windowRef, 'wheel', onWheel, {\n passive: false,\n })\n\n const emitEvents = () => {\n const { total } = props\n\n if (total! > 0) {\n const [cacheStart, cacheEnd, visibleStart, visibleEnd] =\n unref(itemsToRender)\n emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd)\n }\n\n const { scrollDir, scrollOffset, updateRequested } = unref(states)\n emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested)\n }\n\n const scrollVertically = (e: Event) => {\n const { clientHeight, scrollHeight, scrollTop } =\n e.currentTarget as HTMLElement\n const _states = unref(states)\n if (_states.scrollOffset === scrollTop) {\n return\n }\n\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n )\n\n states.value = {\n ..._states,\n isScrolling: true,\n scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),\n scrollOffset,\n updateRequested: false,\n }\n\n nextTick(resetIsScrolling)\n }\n\n const scrollHorizontally = (e: Event) => {\n const { clientWidth, scrollLeft, scrollWidth } =\n e.currentTarget as HTMLElement\n const _states = unref(states)\n\n if (_states.scrollOffset === scrollLeft) {\n return\n }\n\n const { direction } = props\n\n let scrollOffset = scrollLeft\n\n if (direction === RTL) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case RTL_OFFSET_NAG: {\n scrollOffset = -scrollLeft\n break\n }\n case RTL_OFFSET_POS_DESC: {\n scrollOffset = scrollWidth - clientWidth - scrollLeft\n break\n }\n }\n }\n\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n )\n\n states.value = {\n ..._states,\n isScrolling: true,\n scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),\n scrollOffset,\n updateRequested: false,\n }\n\n nextTick(resetIsScrolling)\n }\n\n const onScroll = (e: Event) => {\n unref(_isHorizontal) ? scrollHorizontally(e) : scrollVertically(e)\n emitEvents()\n }\n\n const onScrollbarScroll = (distanceToGo: number, totalSteps: number) => {\n const offset =\n ((estimatedTotalSize.value - (clientSize.value as number)) /\n totalSteps) *\n distanceToGo\n scrollTo(\n Math.min(\n estimatedTotalSize.value - (clientSize.value as number),\n offset\n )\n )\n }\n\n const scrollTo = (offset: number) => {\n offset = Math.max(offset, 0)\n\n if (offset === unref(states).scrollOffset) {\n return\n }\n\n states.value = {\n ...unref(states),\n scrollOffset: offset,\n scrollDir: getScrollDir(unref(states).scrollOffset, offset),\n updateRequested: true,\n }\n\n nextTick(resetIsScrolling)\n }\n\n const scrollToItem = (\n idx: number,\n alignment: Alignment = AUTO_ALIGNMENT\n ) => {\n const { scrollOffset } = unref(states)\n\n idx = Math.max(0, Math.min(idx, props.total! - 1))\n scrollTo(\n getOffset(\n props,\n idx,\n alignment,\n scrollOffset,\n unref(dynamicSizeCache)\n )\n )\n }\n\n const getItemStyle = (idx: number) => {\n const { direction, itemSize, layout } = props\n\n const itemStyleCache = getItemStyleCache.value(\n clearCache && itemSize,\n clearCache && layout,\n clearCache && direction\n )\n\n let style: CSSProperties\n if (hasOwn(itemStyleCache, String(idx))) {\n style = itemStyleCache[idx]\n } else {\n const offset = getItemOffset(props, idx, unref(dynamicSizeCache))\n const size = getItemSize(props, idx, unref(dynamicSizeCache))\n const horizontal = unref(_isHorizontal)\n\n const isRtl = direction === RTL\n const offsetHorizontal = horizontal ? offset : 0\n itemStyleCache[idx] = style = {\n position: 'absolute',\n left: isRtl ? undefined : `${offsetHorizontal}px`,\n right: isRtl ? `${offsetHorizontal}px` : undefined,\n top: !horizontal ? `${offset}px` : 0,\n height: !horizontal ? `${size}px` : '100%',\n width: horizontal ? `${size}px` : '100%',\n }\n }\n\n return style\n }\n\n // TODO: perf optimization here, reset isScrolling with debounce.\n\n const resetIsScrolling = () => {\n states.value.isScrolling = false\n nextTick(() => {\n getItemStyleCache.value(-1, null, null)\n })\n }\n\n const resetScrollTop = () => {\n const window = windowRef.value\n if (window) {\n window.scrollTop = 0\n }\n }\n\n // life cycles\n onMounted(() => {\n if (!isClient) return\n const { initScrollOffset } = props\n const windowElement = unref(windowRef)\n if (isNumber(initScrollOffset) && windowElement) {\n if (unref(_isHorizontal)) {\n windowElement.scrollLeft = initScrollOffset\n } else {\n windowElement.scrollTop = initScrollOffset\n }\n }\n\n emitEvents()\n })\n\n onUpdated(() => {\n const { direction, layout } = props\n const { scrollOffset, updateRequested } = unref(states)\n const windowElement = unref(windowRef)\n\n if (updateRequested && windowElement) {\n if (layout === HORIZONTAL) {\n if (direction === RTL) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case RTL_OFFSET_NAG: {\n windowElement.scrollLeft = -scrollOffset\n break\n }\n case RTL_OFFSET_POS_ASC: {\n windowElement.scrollLeft = scrollOffset\n break\n }\n default: {\n const { clientWidth, scrollWidth } = windowElement\n windowElement.scrollLeft =\n scrollWidth - clientWidth - scrollOffset\n break\n }\n }\n } else {\n windowElement.scrollLeft = scrollOffset\n }\n } else {\n windowElement.scrollTop = scrollOffset\n }\n }\n })\n\n onActivated(() => {\n unref(windowRef)!.scrollTop = unref(states).scrollOffset\n })\n\n const api = {\n ns,\n clientSize,\n estimatedTotalSize,\n windowStyle,\n windowRef,\n innerRef,\n innerStyle,\n itemsToRender,\n scrollbarRef,\n states,\n getItemStyle,\n onScroll,\n onScrollbarScroll,\n onWheel,\n scrollTo,\n scrollToItem,\n resetScrollTop,\n }\n\n expose({\n windowRef,\n innerRef,\n getItemStyleCache,\n scrollTo,\n scrollToItem,\n resetScrollTop,\n states,\n })\n\n return api\n },\n\n render(ctx: any) {\n const {\n $slots,\n className,\n clientSize,\n containerElement,\n data,\n getItemStyle,\n innerElement,\n itemsToRender,\n innerStyle,\n layout,\n total,\n onScroll,\n onScrollbarScroll,\n states,\n useIsScrolling,\n windowStyle,\n ns,\n } = ctx\n\n const [start, end] = itemsToRender\n\n const Container = resolveDynamicComponent(containerElement)\n const Inner = resolveDynamicComponent(innerElement)\n\n const children = [] as VNodeChild[]\n\n if (total > 0) {\n for (let i = start; i <= end; i++) {\n children.push(\n h(\n Fragment,\n { key: i },\n ($slots.default as Slot)?.({\n data,\n index: i,\n isScrolling: useIsScrolling ? states.isScrolling : undefined,\n style: getItemStyle(i),\n })\n )\n )\n }\n }\n\n const InnerNode = [\n h(\n Inner as VNode,\n mergeProps(ctx.innerProps, {\n style: innerStyle,\n ref: 'innerRef',\n }),\n !isString(Inner)\n ? {\n default: () => children,\n }\n : children\n ),\n ]\n\n const scrollbar = h(Scrollbar, {\n ref: 'scrollbarRef',\n clientSize,\n layout,\n onScroll: onScrollbarScroll,\n ratio: (clientSize * 100) / this.estimatedTotalSize,\n scrollFrom:\n states.scrollOffset / (this.estimatedTotalSize - clientSize),\n total,\n alwaysOn: states.scrollbarAlwaysOn,\n })\n\n const listContainer = h(\n Container as VNode,\n {\n class: [ns.e('window'), className],\n style: windowStyle,\n onScroll,\n ref: 'windowRef',\n key: 0,\n },\n !isString(Container) ? { default: () => [InnerNode] } : [InnerNode]\n )\n\n return h(\n 'div',\n {\n key: 0,\n class: [ns.e('wrapper'), states.scrollbarAlwaysOn ? 'always-on' : ''],\n },\n [listContainer, scrollbar]\n )\n },\n })\n}\n\nexport default createList\n"],"names":["Scrollbar"],"mappings":"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"}