@af-utils/react-virtual-headless
Version:
React components for rendering large scrollable data
172 lines • 5.51 kB
TypeScript
import { Event } from "../../constants/index";
import type { ScrollElement, VirtualScrollerInitialParams, VirtualScrollerRuntimeParams } from "../../types";
declare class VirtualScroller {
private _scrollElementSizeKey;
private _scrollKey;
private _resizeObserverSizeKey;
private _scrollToKey;
private _alignedScrollPos;
private _scrollElementOffset;
private _rawScrollSize;
private _stickyOffset;
private _itemCount;
private _availableWidgetSize;
private _scrollToTimer;
private _overscanCount;
private _estimatedItemSize;
private _scrollElement;
private _initialElement;
private _itemSizes;
private _fTree;
/**
* Most significant bit of this._itemCount;
* caching it to avoid Math.clz32 calculations on every getIndex call
*/
private _msb;
/** Scroll direction */
horizontal: boolean;
/** Sum of all item sizes */
scrollSize: number;
/** Items range start */
from: number;
/** Items range end */
to: number;
/** Hash of item sizes. Changed when at least one visible item is resized. */
sizesHash: number;
private _elToIdx;
private _idxToEl;
private _stickyElements;
private _stickyElementsSizes;
private _StickyElResizeObserver;
private _ElResizeObserver;
private _EventsList;
/**
* Update property names for resize events, dimensions and scroll position extraction
*
* @remarks
*
* `window.resize` event must be used for window scroller, `ResizeObserver` must be used in other cases.
* `offsetWidth` is used as item size in horizontal mode, `offsetHeight` - in vertical.
*/
private _updatePropertyKeys;
private _handleScrollElementResize;
private _updateStickyOffset;
private _unobserveResize;
constructor(params?: VirtualScrollerInitialParams);
/**
* Subscribe to model events
*
* @param callBack - event to be triggered
* @param events - events to subscribe
*
* @returns unsubscribe function
*/
on(callBack: () => void, events: Event[]): () => void;
/**
* Call all `event` subscribers
* @param event - event to emit
*/
private _run;
/**
* Get item index by pixel offset
*
* @param offset - pixel offset
* @returns item index
*/
getIndex(offset: number): number;
/**
* Get pixel offset by item index
*
* @param index - item index
* @returns pixel offset
*/
getOffset(index: number): number;
/**
* @param itemIndex - item index
* @returns last cached item size
*/
getSize(itemIndex: number): number;
/**
* Get snapshot of current scroll position.
*
* @remarks
*
* For example `5.3` stands for item at index `5` + `30%` of its size.
* Used to remember scroll position before prepending elements.
*
* @returns visible item index (double number)
*/
get visibleFrom(): number;
/**
* Synchronize current scroll position with visible range
*/
private _syncScrollPosition;
setScroller: (element: ScrollElement | null) => void;
setContainer: (element: Element | null) => void;
_updateScrollerOffsetRaw(): number;
updateScrollerOffset(): void;
/**
* Start observing size of `element` at `index`. Observing is finished if element is falsy.
* @param index - item index
* @param element - element for item
*/
el(index: number, element: Element | null): void;
private _stickyEl;
/**
* Start observing size of sticky header `element`. Observing is finished if element is falsy.
* @param element - header element
*/
setStickyHeader(element: Element | null): void;
/**
* Start observing size of sticky footer `element`. Observing is finished if element is falsy.
* @param element - footer element
*/
setStickyFooter(element: Element | null): void;
/**
* Get first visible item index (without overscan)
* @returns first visible item index
*/
private get _exactFrom();
/**
* Get last visible item index (without overscan)
* @returns last visible item index
*/
private get _exactTo();
/**
* Used to update current visible items range when scrolling down/right;
* adds overscan reserve forward to reduce rerenders quantity
*/
private _updateRangeFromEnd;
/**
* Used to update current visible items range when scrolling up/left;
* adds overscan reserve backward to reduce rerenders quantity
*/
private _updateRangeFromStart;
/**
* Scroll to pixel offset
*
* @param offset - offset to scroll to
* @param smooth - should smooth scroll be used
*/
scrollToOffset(offset: number, smooth?: boolean): void;
private _attemptToScrollToIndex;
/**
* Scroll to item index
*
* @param index - item index to scroll to
* @param smooth - should smooth scroll be used
*/
scrollToIndex(index: number, smooth?: boolean): void;
/**
* Notify model about items quantity change
* @param itemCount - new items quantity
*/
setItemCount(itemCount: number): void;
/**
* Synchronize runtime parameters
* @param runtimeParams - runtime parameters
*/
set({ overscanCount, itemCount, estimatedItemSize }: VirtualScrollerRuntimeParams): void;
}
export default VirtualScroller;
//# sourceMappingURL=index.d.ts.map