import { DefineComponent, PropType } from 'vue'; import { JSX } from 'vue/jsx-runtime'; export interface BaseWaterfallItem { id?: string | number; height?: number; width?: number; getSize?: () => { width: number; height: number; }; } interface ItemLayoutInfo { width: number; height: number; originalWidth: number; originalHeight: number; scale: number; displayWidth: number; displayHeight: number; } interface WaterfallFlowParams { columnCount?: number; columnGap?: number; rowGap?: number; containerHeight: number | string; containerWidth?: number | string; bufferSize?: number; plusItemHeight?: number; items: T[]; renderItem: (item: T, index: number, layout: ItemLayoutInfo) => JSX.Element; scrollPlaceholder?: boolean; scrollDebounceTime?: number; scrollSpeedThreshold?: number; renderSpace?: (item: T, index: number, layout: ItemLayoutInfo) => JSX.Element | null; renderOptimization?: { enabled?: boolean; scrollPlaceholder?: boolean; scrollDebounceTime?: number; scrollSpeedThreshold?: number; renderSpace?: (item: T, index: number, layout: ItemLayoutInfo) => JSX.Element | null; }; preformanceConfig?: { afterRowDelayTime?: number; requestIdleCallback?: boolean; }; } interface ColumnInfo { items: T[]; height: number; startIndex: number; } export default class ZWaterfallFlowClass { private columns; private visibleItemsRef; private scrolling; private resizeObserver; private columnsCache; private lastItems; private lastColumnWidth; private lastColumnCount; private lastOffsetCache; private isScrollingRef; private renderedItemsRef; private _delayRenderTimer; private lastScrollDirection; private lastScrollTime; private catchVisibleColumns; private _destroyed; private _rafId; private state; constructor(params: WaterfallFlowParams); private getItemSize; private handleResize; private distributeItems; private getVisibleRange; private binarySearchStartIndex; private calculateStartOffset; private getNumericColumnWidth; onContainerRef(el: HTMLElement): void; onContentResize(): void; private initializeLayout; private calculateTotalHeight; private calculateColumnHeight; setItems(items: T[]): void; private requestIdleCallbackPolyfill; private setColumnItemToRender; private processVisibleColumns; private processRemainingColumns; private handleScroll; private updateVisibleItems; createJsx(): JSX.Element; createElement(): DefineComponent; addItems(items: T[]): void; removeItems(indices: number[]): void; updateItems(updates: { index: number; item: T; }[]): void; insertItems(items: T[], index: number): void; replaceItems(items: T[]): void; getConfig(): { itemsCount: number; columnsCount: number; visibleItemsCount: number; scrollTop: number; columnCount: number; columnGap: number; rowGap: number; containerHeight: string | number; containerWidth: string | number; bufferSize: number; plusItemHeight: number; containerRef: HTMLElement | null; items: Array; distributedColumns: Array>; renderItem: ((item: T, index: number, layout: ItemLayoutInfo) => JSX.Element) | null; columnWidth: string; numericColumnWidth: number; contentHeight: number; preformanceConfig: { afterRowDelayTime: number; requestIdleCallback: boolean; }; scrollPlaceholder: boolean; scrollDebounceTime: number; scrollSpeedThreshold: number; scrollTimer: NodeJS.Timeout | null; renderSpace: ((item: T, index: number, layout: ItemLayoutInfo) => JSX.Element | null) | null; renderOptimization: { enabled: boolean; scrollPlaceholder: boolean; scrollDebounceTime: number; scrollSpeedThreshold: number; renderSpace: ((item: T, index: number, layout: ItemLayoutInfo) => JSX.Element | null) | null; }; }; setConfig(config: Partial): void; setColumnCount(count: number): void; updateRenderOptimization(config: Partial): void; clearCache(): void; destroy(): void; } export declare const ZWaterfallFlow: DefineComponent; required: true; }; renderItem: { type: PropType<(item: BaseWaterfallItem, index: number, layout: ItemLayoutInfo) => JSX.Element>; required: true; }; containerHeight: { type: PropType; required: true; }; columnCount: { type: NumberConstructor; default: number; }; columnGap: { type: NumberConstructor; default: number; }; rowGap: { type: NumberConstructor; default: number; }; containerWidth: { type: PropType; default: number; }; bufferSize: { type: NumberConstructor; default: number; }; plusItemHeight: { type: NumberConstructor; default: number; }; renderSpace: { type: any; default: null; }; scrollPlaceholder: { type: BooleanConstructor; default: boolean; }; scrollDebounceTime: { type: NumberConstructor; default: number; }; scrollSpeedThreshold: { type: NumberConstructor; default: number; }; renderOptimization: { type: PropType["renderOptimization"]>; default: undefined; }; preformanceConfig: { type: PropType<{ afterRowDelayTime?: number; requestIdleCallback?: boolean; }>; default: () => { afterRowDelayTime: number; requestIdleCallback: boolean; }; }; }>, () => JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("scroll" | "reachBottom")[], "scroll" | "reachBottom", import('vue').PublicProps, Readonly; required: true; }; renderItem: { type: PropType<(item: BaseWaterfallItem, index: number, layout: ItemLayoutInfo) => JSX.Element>; required: true; }; containerHeight: { type: PropType; required: true; }; columnCount: { type: NumberConstructor; default: number; }; columnGap: { type: NumberConstructor; default: number; }; rowGap: { type: NumberConstructor; default: number; }; containerWidth: { type: PropType; default: number; }; bufferSize: { type: NumberConstructor; default: number; }; plusItemHeight: { type: NumberConstructor; default: number; }; renderSpace: { type: any; default: null; }; scrollPlaceholder: { type: BooleanConstructor; default: boolean; }; scrollDebounceTime: { type: NumberConstructor; default: number; }; scrollSpeedThreshold: { type: NumberConstructor; default: number; }; renderOptimization: { type: PropType["renderOptimization"]>; default: undefined; }; preformanceConfig: { type: PropType<{ afterRowDelayTime?: number; requestIdleCallback?: boolean; }>; default: () => { afterRowDelayTime: number; requestIdleCallback: boolean; }; }; }>> & Readonly<{ onScroll?: ((...args: any[]) => any) | undefined; onReachBottom?: ((...args: any[]) => any) | undefined; }>, { bufferSize: number; containerWidth: string | number; columnCount: number; columnGap: number; rowGap: number; plusItemHeight: number; preformanceConfig: { afterRowDelayTime?: number; requestIdleCallback?: boolean; }; scrollPlaceholder: boolean; scrollDebounceTime: number; scrollSpeedThreshold: number; renderSpace: any; renderOptimization: { enabled?: boolean; scrollPlaceholder?: boolean; scrollDebounceTime?: number; scrollSpeedThreshold?: number; renderSpace?: ((item: BaseWaterfallItem, index: number, layout: ItemLayoutInfo) => JSX.Element | null) | undefined; } | undefined; }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>; export {};