{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/virtual-list/src/index.ts"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  h,\n  onMounted,\n  provide,\n  ref,\n  toRefs,\n} from 'vue'\nimport { useNamespace } from 'element-plus'\nimport { useVirtualList } from '@vueuse/core'\nimport { DIV_TAG } from '@element-plus/constants'\nimport { isFunction, isObject, throttle } from '@element-plus/utils'\nimport { useLoad } from '@element-plus/components/list/src/hooks'\nimport { cacheKey, useCache } from './hooks'\nimport { virtualListEmits, virtualListProps } from './virtual-list'\nimport Scrollbar from './scrollbar'\nimport Item from './item'\n\nexport default defineComponent({\n  name: 'ElVirtualList',\n  inheritAttrs: false,\n  props: virtualListProps,\n  emits: virtualListEmits,\n  setup(props, { attrs, slots, expose, emit }) {\n    const ns = useNamespace('virtual-list')\n\n    const propsRefs = toRefs(props)\n    const { list: listRef } = propsRefs\n    const { direction, overscan } = props\n\n    const scrollbarRef = ref()\n    const { isShouldTrigger, handleLoad, renderLoadMore } = useLoad(propsRefs, {\n      direction: 'bottom',\n      handleError: () => {\n        handleLoad(true, {\n          finallyCallback: updateRenderList,\n        })\n      },\n    })\n\n    const cache = useCache(props)\n    provide(cacheKey, cache)\n\n    const isDynamicSize = computed(() => !props.itemFixed)\n\n    const createItemSize = () => {\n      return isDynamicSize.value\n        ? (i: number) => cache.getRealSize(i)\n        : props.itemSize\n    }\n    const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(\n      listRef,\n      {\n        [direction === 'vertical' ? 'itemHeight' : 'itemWidth']:\n          createItemSize(),\n        overscan,\n      } as any\n    )\n\n    // force update to trigger re-render list\n    const updateRenderList = () => {\n      const container = containerProps.ref.value\n      if (container) {\n        const offset = direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n        container[offset] += 1\n      }\n    }\n\n    const handleInfiniteScroll = (shouldTrigger: boolean) => {\n      if (\n        isFunction(props.infiniteScroll) &&\n        !props.infiniteScrollDisabled &&\n        shouldTrigger\n      ) {\n        props.infiniteScroll?.()\n      }\n    }\n\n    const handleInfiniteScrollup = async (e: Event) => {\n      const { scrollTop } = e.target as HTMLElement\n      const shouldTrigger = scrollTop < props.infiniteScrollDistance\n      if (\n        isFunction(props.infiniteScrollup) &&\n        !props.infiniteScrollDisabled &&\n        shouldTrigger\n      ) {\n        let firstData = null\n        try {\n          firstData = listRef.value[0]\n          await props.infiniteScrollup?.()\n        } catch {\n        } finally {\n          const index = listRef.value.indexOf(firstData)\n          if (index !== -1) {\n            scrollTo(index)\n          }\n        }\n      }\n    }\n\n    const onThrottleScroll = throttle((e: Event) => {\n      const shouldTrigger = isShouldTrigger(e.target as HTMLElement)\n      handleLoad(shouldTrigger, {\n        finallyCallback: updateRenderList,\n      })\n      handleInfiniteScroll(shouldTrigger)\n      handleInfiniteScrollup(e)\n    }, props.infiniteScrollDelay)\n\n    const { onScroll } = containerProps\n\n    const handleScroll = (e: Event) => {\n      emit('scroll', e)\n      onScroll()\n      onThrottleScroll(e)\n    }\n\n    const initContainerRef = () => {\n      if (!props.nativeScrollbar) {\n        containerProps.ref.value = scrollbarRef.value.wrapRef\n      }\n    }\n\n    onMounted(() => {\n      initContainerRef()\n    })\n\n    expose({\n      scrollTo,\n    })\n\n    return () => {\n      const renderContent = () =>\n        h(\n          DIV_TAG,\n          {\n            style: {\n              ...wrapperProps.value.style,\n            },\n            class: ns.b('wrapper'),\n          },\n          list.value.map((item) => {\n            const { data, index } = item\n            return h(\n              Item,\n              { data, isDynamicSize: isDynamicSize.value, key: index, index },\n              {\n                default: () => slots.default?.(item),\n              }\n            )\n          })\n        )\n\n      const renderChild = () => {\n        return [\n          h(DIV_TAG, { class: ns.b('before') }, slots.before?.()),\n          renderContent(),\n          renderLoadMore(),\n          h(DIV_TAG, { class: ns.b('after') }, slots.after?.()),\n        ]\n      }\n\n      return props.nativeScrollbar\n        ? h(\n            DIV_TAG,\n            {\n              class: [ns.b(), attrs.class],\n              style: {\n                ...(attrs.style ?? {}),\n                ...(isObject(containerProps.style) ? containerProps.style : {}),\n              },\n              ref: containerProps.ref,\n              onScroll: handleScroll,\n            },\n            renderChild()\n          )\n        : h(\n            Scrollbar,\n            {\n              ref: scrollbarRef,\n              class: [ns.b(), attrs.class],\n              style: attrs.style,\n              wrapOptions: {\n                style: {\n                  ...(isObject(containerProps.style)\n                    ? containerProps.style\n                    : {}),\n                },\n                onScroll: handleScroll,\n              },\n            },\n            {\n              default: () => renderChild(),\n            }\n          )\n    }\n  },\n})\n"],"names":["e","_a"],"mappings":"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"}