import { PureComponent } from "preact/compat";
import { JSXInternal } from "preact/src/jsx";
import { Alignment, ScrollChangeReason } from "./constants";
import { RowInfo, CellInfo, ItemSize } from "./types";
export interface Props {
    className?: string;
    style?: JSXInternal.CSSProperties;
    rows: string[];
    rowHeight: ItemSize;
    columns: string[];
    pinnedLeftColumns?: string[];
    pinnedRightColumns?: string[];
    columnWidth: ItemSize;
    pinnedLeftClassName?: string;
    pinnedRightClassName?: string;
    throttleRate?: number;
    throttleTimeout?: number;
    overscanColumnCount?: number;
    overscanRowCount?: number;
    scrollTopOffset?: number;
    scrollLeftOffset?: number;
    scrollToColumnIndex?: number;
    scrollToColumnAlignment?: Alignment;
    scrollToRowIndex?: number;
    scrollToRowAlignment?: Alignment;
    renderRow(rowInfo: RowInfo): JSX.Element;
    renderCell(cellInfo: CellInfo): JSX.Element;
    onWheelHorizontal?: (ev: WheelEvent) => void;
    onScrollHorizontal?: (ev: Event) => void;
    onScrollVertical?: (ev: Event) => void;
    getScrollXNode?: (node: HTMLDivElement) => void;
    getScrollYNode?: (node: HTMLDivElement) => void;
}
export interface State {
    offsetLeft: number;
    offsetTop: number;
    scrollChangeReason: ScrollChangeReason;
}
export declare class VirtualGrid extends PureComponent<Props, State> {
    static defaultProps: {
        throttleRate: number;
        throttleTimeout: number;
        overscanRowCount: number;
        overscanColumnCount: number;
    };
    itemSizeGetter: (itemSize: ItemSize, keyer: (index: number) => string) => (index: number) => number;
    private rowManager;
    private columnManager;
    private onScrollVertical;
    private onScrollHorizontal;
    private rootNode?;
    private scrollYNode?;
    private scrollXNode?;
    private rowStyleCache;
    private columnStyleCache;
    readonly state: State;
    componentDidMount(): void;
    componentWillReceiveProps(nextProps: Props): void;
    componentDidUpdate(_: Props, prevState: State): void;
    componentWillUnmount(): void;
    scrollTo({ top, left }: {
        top?: number;
        left?: number;
    }): void;
    getOffsetForColumn(index: number, scrollToAlignment?: Alignment, itemCount?: number): number;
    getOffsetForRow(index: number, scrollToAlignment?: Alignment, itemCount?: number): number;
    recomputeSizes(startRowIndex?: number, startColumnIndex?: number): void;
    private getSize;
    private getRowStyle;
    private getColumnStyle;
    private getPinnedColumnStyle;
    private handleMouseWheel;
    private handleScroll;
    private getNodeOffset;
    private getRootRef;
    private getScrollYRef;
    private getScrollXRef;
    private getPinnedLeftWidth;
    private getPinnedRightWidth;
    render(): JSXInternal.Element;
}
