{"version":3,"file":"usePanelVirtualScroll.mjs","sources":["../../../../components/select/hooks/usePanelVirtualScroll.ts"],"sourcesContent":["import { Ref, computed, onMounted, onBeforeUnmount } from 'vue';\nimport { useVirtualScroll } from '@tdesign/shared-hooks';\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":["usePanelVirtualScroll","props","_props$scroll3","_props$scroll4","_props$scroll5","_props$scroll6","_props$scroll7","isVirtual","computed","_props$scroll","_props$options$value","_props$scroll2","scroll","type","options","value","length","threshold","_ref","useVirtualScroll","container","popupContentRef","data","fixedHeight","isFixedRowHeight","lineHeight","rowHeight","bufferSize","_ref$trs","trs","_ref$visibleData","visibleData","_ref$handleScroll","handleScroll","handleVirtualScroll","_ref$scrollHeight","scrollHeight","_ref$translateY","translateY","_ref$handleRowMounted","handleRowMounted","lastScrollY","onInnerVirtualScroll","e","target","top","scrollTop","Math","abs","onMounted","_props$popupContentRe","addEventListener","onBeforeUnmount","_props$popupContentRe2","removeEventListener","cursorStyle","position","width","height","transition","transform","concat","panelStyle"],"mappings":"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"}