{"version":3,"file":"list.mjs","sources":["../../src/list/list.tsx"],"sourcesContent":["import { defineComponent, ref } from 'vue';\nimport { useWindowSize, useEventListener } from '@vueuse/core';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport TLoading from '../loading';\nimport config from '../config';\nimport props from './props';\nimport { useScrollParent } from '../shared';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n  name: `${prefix}-list`,\n  components: {\n    TLoading,\n  },\n  props,\n  emits: ['load-more', 'scroll'],\n  setup(props, { slots }) {\n    const listClass = usePrefixClass('list');\n    const { globalConfig } = useConfig('list');\n    const renderTNodeJSX = useTNodeJSX();\n\n    const LOADING_TEXT_MAP = {\n      loading: globalConfig.value.loading,\n      'load-more': globalConfig.value.loadingMoreText,\n    };\n\n    const root = ref<HTMLElement>();\n    const scrollParent = useScrollParent(root);\n    const { height } = useWindowSize();\n\n    const onLoadMore = (e: MouseEvent) => {\n      if (props.asyncLoading === 'load-more') {\n        props.onLoadMore?.();\n      }\n    };\n    const handleScroll = (e: WheelEvent | Event) => {\n      const scrollHeight =\n        (e.target as HTMLElement).scrollHeight ||\n        Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n      const scrollTop =\n        (e.target as HTMLElement).scrollTop || document.documentElement.scrollTop || document.body.scrollTop;\n      const offsetHeight = (e.target as HTMLElement).offsetHeight || height.value;\n\n      props.onScroll?.(scrollHeight - (scrollTop + offsetHeight), scrollTop);\n    };\n\n    const renderLoading = () => {\n      if (typeof props.asyncLoading === 'string' && ['loading', 'load-more'].includes(props.asyncLoading)) {\n        return (\n          <TLoading\n            indicator={props.asyncLoading === 'loading'}\n            text={\n              typeof props.asyncLoading === 'string'\n                ? LOADING_TEXT_MAP[props.asyncLoading as keyof typeof LOADING_TEXT_MAP]\n                : ''\n            }\n            class={`${listClass.value}__loading`}\n          />\n        );\n      }\n      return renderTNodeJSX('asyncLoading');\n    };\n\n    useEventListener(scrollParent, 'scroll', handleScroll);\n    return () => {\n      const headerContent = renderTNodeJSX('header');\n      const footerContent = renderTNodeJSX('footer');\n      return (\n        <div ref={root} class={listClass.value} onScroll={handleScroll}>\n          {headerContent}\n          {slots.default && slots.default()}\n          <div class={`${listClass.value}__loading--wrapper`} onClick={onLoadMore}>\n            {renderLoading()}\n          </div>\n          {footerContent}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["prefix","config","defineComponent","name","components","TLoading","props","emits","setup","slots","_ref","listClass","usePrefixClass","_useConfig","useConfig","globalConfig","renderTNodeJSX","useTNodeJSX","LOADING_TEXT_MAP","loading","value","loadingMoreText","root","ref","scrollParent","useScrollParent","_useWindowSize","useWindowSize","height","onLoadMore","e","asyncLoading","_props2$onLoadMore","handleScroll","_props2$onScroll","scrollHeight","target","Math","max","document","documentElement","body","scrollTop","offsetHeight","onScroll","renderLoading","includes","_createVNode","useEventListener","headerContent","footerContent","default","concat"],"mappings":"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"}