{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/list/src/index.ts"],"sourcesContent":["import { defineComponent, h, nextTick, onMounted, ref, toRefs } from 'vue'\nimport { ElScrollbar, useNamespace } from 'element-plus'\nimport { DIV_TAG } from '@element-plus/constants'\nimport { throttle } from '@element-plus/utils'\nimport { listEmits, listProps } from './list'\nimport { useLoad } from './hooks'\nimport type { ItemType } from './list'\n\nexport default defineComponent({\n  name: 'ElList',\n  inheritAttrs: false,\n  props: listProps,\n  emits: listEmits,\n  setup(props, { attrs, slots, expose }) {\n    const ns = useNamespace('list')\n\n    const target = ref<HTMLDivElement>()\n    const scrollbarRef = ref()\n\n    const { handleLoad, renderLoadMore, isShouldTrigger } = useLoad(\n      toRefs(props),\n      {\n        direction: 'bottom',\n        handleError: () => handleLoad(true),\n      }\n    )\n\n    const {\n      handlePreLoad,\n      renderLoadMore: renderLoadMoreTop,\n      isShouldTrigger: isShouldTriggerTop,\n    } = useLoad(toRefs(props), {\n      direction: 'top',\n      handleError: () => handlePreLoad(true, target.value as HTMLDivElement),\n    })\n\n    const onThrottleScroll = throttle(() => {\n      handleLoad(isShouldTrigger(target.value as HTMLDivElement))\n      handlePreLoad(\n        isShouldTriggerTop(target.value as HTMLDivElement),\n        target.value as HTMLDivElement\n      )\n    }, props.infiniteScrollDelay)\n\n    const handleScroll = () => {\n      onThrottleScroll()\n    }\n\n    const initTarget = () => {\n      if (!props.nativeScrollbar) {\n        target.value = scrollbarRef.value.wrapRef\n      }\n    }\n\n    onMounted(() => {\n      initTarget()\n    })\n\n    const scrollToBottom = () => {\n      nextTick(() => {\n        const content = target.value\n        if (content) {\n          content.scrollTop = content.scrollHeight - content.clientHeight\n        }\n      })\n    }\n\n    expose({\n      target,\n      scrollToBottom,\n    })\n\n    return () => {\n      const { nativeScrollbar } = props\n\n      const renderChild = () => {\n        const list = h(\n          DIV_TAG,\n          { class: ns.b('wrap') },\n          props.list.map((item: ItemType, index: number) => {\n            return slots.default?.({ data: item, index })\n          })\n        )\n        return [renderLoadMoreTop(true), list, renderLoadMore()]\n      }\n\n      const data = {\n        ...attrs,\n        class: [ns.b(), attrs.class, nativeScrollbar ? ns.m('scrollbar') : ''],\n        ref: nativeScrollbar ? target : scrollbarRef,\n        onScroll: handleScroll,\n      }\n\n      return nativeScrollbar\n        ? h(DIV_TAG, data, [...renderChild()])\n        : h(ElScrollbar, data, {\n            default: () => renderChild(),\n          })\n    }\n  },\n})\n"],"names":[],"mappings":"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"}