{"version":3,"file":"usePanelVirtualScroll.mjs","sources":["../../../src/select/hooks/usePanelVirtualScroll.ts"],"sourcesContent":["import { Ref, computed, onMounted, onBeforeUnmount } from 'vue';\nimport useVirtualScroll from '../../hooks/useVirtualScroll';\nimport { TdSelectProps } from '../type';\nimport { Styles } from '../../common';\n\nexport const usePanelVirtualScroll = (props: {\n  scroll: TdSelectProps['scroll'];\n  popupContentRef: Ref<HTMLElement>;\n  options: Ref<TdSelectProps['options']>;\n}) => {\n  const isVirtual = computed(\n    () => props.scroll?.type === 'virtual' && props.options.value?.length > (props.scroll?.threshold || 100),\n  );\n\n  const {\n    trs = null,\n    visibleData = null,\n    handleScroll: handleVirtualScroll = null,\n    scrollHeight = null,\n    translateY = null,\n    handleRowMounted = null,\n  } = props.scroll?.type === 'virtual'\n    ? useVirtualScroll({\n        container: props.popupContentRef,\n        data: props.options,\n        fixedHeight: props.scroll?.isFixedRowHeight || false,\n        lineHeight: props.scroll?.rowHeight || 28, // 默认每行高度28\n        bufferSize: props.scroll?.bufferSize || 20,\n        threshold: props.scroll?.threshold || 100,\n      })\n    : {};\n  let lastScrollY = -1;\n\n  const onInnerVirtualScroll = (e: WheelEvent) => {\n    if (!isVirtual.value) {\n      return;\n    }\n    const target = e.target as HTMLElement;\n    const top = target.scrollTop;\n    // 排除横向滚动出发的纵向虚拟滚动计算\n    if (Math.abs(lastScrollY - top) > 5) {\n      handleVirtualScroll();\n      lastScrollY = top;\n    } else {\n      lastScrollY = -1;\n    }\n  };\n\n  // 监听popup滚动 处理虚拟滚动时的virtualData变化\n  onMounted(() => {\n    props.popupContentRef.value?.addEventListener('scroll', onInnerVirtualScroll);\n  });\n\n  // 卸载时取消监听\n  onBeforeUnmount(() => {\n    props.popupContentRef.value?.removeEventListener('scroll', onInnerVirtualScroll);\n  });\n\n  const cursorStyle = computed(\n    () =>\n      ({\n        position: 'absolute',\n        width: '1px',\n        height: '1px',\n        transition: 'transform 0.2s',\n        transform: `translate(0, ${scrollHeight.value}px)`,\n        '-ms-transform': `translate(0, ${scrollHeight.value}px)`,\n        '-moz-transform': `translate(0, ${scrollHeight.value}px)`,\n        '-webkit-transform': `translate(0, ${scrollHeight.value}px)`,\n      } as Styles),\n  );\n\n  const panelStyle = computed(\n    () =>\n      ({\n        transform: `translate(0, ${translateY.value}px)`,\n        '-ms-transform': `translate(0, ${translateY.value}px)`,\n        '-moz-transform': `translate(0, ${translateY.value}px)`,\n        '-webkit-transform': `translate(0, ${translateY.value}px)`,\n      } as Styles),\n  );\n\n  return {\n    trs,\n    scrollHeight,\n    translateY,\n    visibleData,\n    handleRowMounted,\n    isVirtual,\n    cursorStyle,\n    panelStyle,\n  };\n};\n"],"names":["fixedHeight","lineHeight","bufferSize","threshold","trs","visibleData","handleVirtualScroll","scrollHeight","translateY","handleRowMounted","lastScrollY","onMounted","onBeforeUnmount","position","width","height","transition","transform","isVirtual","cursorStyle","panelStyle"],"mappings":"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"}