import { AllowedComponentProps, VNodeProps, ComponentCustomProps } from 'vue' declare type LoadingStatus = 'loading' | 'no-more' | 'error' | 'idle' declare type ScrollAlign = 'top' | 'center' | 'bottom' declare interface ScrollToItemOptions { align?: ScrollAlign animated?: boolean } declare interface VirtualListItem { data: T index: number height: number offset: number } declare interface ScrollEvent { detail: { scrollTop: number scrollLeft: number scrollHeight: number scrollWidth: number deltaX: number deltaY: number } } declare interface VirtualListProps { /** 数据源 */ data: T[] /** 预估的每项高度 */ estimatedItemSize?: number /** 缓冲区大小(视窗外的渲染数量) */ buffer?: number /** 滚动容器高度 */ height?: string | number /** 唯一键字段名 */ keyField?: string /** 是否显示顶部加载 */ showTopLoading?: boolean /** 是否显示底部加载 */ showBottomLoading?: boolean /** 顶部加载状态 */ topStatus?: LoadingStatus /** 底部加载状态 */ bottomStatus?: LoadingStatus /** 触发上拉加载的阈值 */ lowerThreshold?: number /** 触发下拉刷新的阈值 */ upperThreshold?: number /** 是否显示回到顶部按钮 */ showBackToTop?: boolean /** 显示回到顶部按钮的阈值 */ backToTopThreshold?: number /** 初始滚动位置 */ initialScrollTop?: number /** 需要滚动到的项目ID */ scrollIntoView?: string /** 是否保持滚动位置 */ keepScrollPosition?: boolean } declare interface VirtualListEmits { (e: 'scroll', event: ScrollEvent): void (e: 'scroll-to-lower'): void (e: 'scroll-to-upper'): void (e: 'item-click', item: T, index: number): void (e: 'item-long-press', item: T, index: number): void (e: 'top-load'): void (e: 'bottom-load'): void (e: 'update:scroll-into-view', value: string): void } declare interface VirtualListSlots { default?: (props: { item: T, index: number }) => any topLoading?: (props: { status: LoadingStatus }) => any bottomLoading?: (props: { status: LoadingStatus }) => any backToTop?: () => any } declare interface VirtualListExposed { // 滚动控制 scrollToTop: () => void scrollToBottom: () => void scrollToItem: (index: number, options?: ScrollToItemOptions) => void scrollToIndex: (index: number, options?: ScrollToItemOptions) => void // 信息获取 getVisibleRange: () => { start: number, end: number } getContainerHeight: () => number getScrollTop: () => number // 尺寸测量 measureContainer: () => void getItemHeight: (item: T, index: number) => number // 数据操作 updateData: (data: T[]) => void appendData: (data: T[]) => void prependData: (data: T[]) => void clearData: () => void // 状态控制 startLoading: (type: 'top' | 'bottom') => void stopLoading: (type: 'top' | 'bottom') => void setLoadingStatus: (type: 'top' | 'bottom', status: LoadingStatus) => void refresh: () => void } declare interface _VirtualList { new(): { $props: AllowedComponentProps & VNodeProps & ComponentCustomProps & VirtualListProps $emit: VirtualListEmits $slots: VirtualListSlots // 暴露的方法 scrollToTop: VirtualListExposed['scrollToTop'] scrollToBottom: VirtualListExposed['scrollToBottom'] scrollToItem: VirtualListExposed['scrollToItem'] scrollToIndex: VirtualListExposed['scrollToIndex'] getVisibleRange: VirtualListExposed['getVisibleRange'] getContainerHeight: VirtualListExposed['getContainerHeight'] getScrollTop: VirtualListExposed['getScrollTop'] measureContainer: VirtualListExposed['measureContainer'] getItemHeight: VirtualListExposed['getItemHeight'] updateData: VirtualListExposed['updateData'] appendData: VirtualListExposed['appendData'] prependData: VirtualListExposed['prependData'] clearData: VirtualListExposed['clearData'] startLoading: VirtualListExposed['startLoading'] stopLoading: VirtualListExposed['stopLoading'] setLoadingStatus: VirtualListExposed['setLoadingStatus'] refresh: VirtualListExposed['refresh'] } } export declare const VirtualList: _VirtualList // 默认导出 export default VirtualList // 类型导出 export type { LoadingStatus, ScrollAlign, ScrollToItemOptions, VirtualListItem, ScrollEvent, VirtualListProps, VirtualListEmits, VirtualListSlots, VirtualListExposed }