import { DataTypes } from "@etsoo/shared";
import React from "react";
import { GridImperativeAPI, GridProps } from "react-window";
import { GridJsonData, GridLoadDataProps, GridLoader, GridLoaderPartialStates, GridLoaderStates } from "./GridLoader";
import { GridMethodRef, ScrollToRowParam } from "./GridMethodRef";
type ScrollerGridCellrops<T extends object> = {
    rows: T[];
    states: GridLoaderStates<T>;
};
/**
 * Scroller grid forward params
 */
export type ScrollToCellParam = {
    behavior?: ScrollToRowParam["behavior"];
    columnAlign?: ScrollToRowParam["align"];
    columnIndex: number;
    rowAlign?: ScrollToRowParam["align"];
    rowIndex: number;
};
/**
 * On cells rendered data
 */
export type OnCellsRenderedData = Parameters<NonNullable<GridProps<object>["onCellsRendered"]>>[0];
/**
 * Scroller vertical grid props
 */
export type ScrollerGridProps<T extends object, P extends GridJsonData = GridLoadDataProps> = GridLoader<T, P> & Omit<GridProps<ScrollerGridCellrops<T>>, "cellProps" | "overscanCount" | "rowCount"> & {
    /**
     * Footer renderer
     */
    footerRenderer?: (rows: T[], states: GridLoaderStates<T>) => React.ReactNode;
    /**
     * Header renderer
     */
    headerRenderer?: (states: GridLoaderStates<T>) => React.ReactNode;
    /**
     * Height of the grid
     */
    height?: number | string;
    /**
     * Id field
     */
    idField?: DataTypes.Keys<T>;
    /**
     * Methods
     */
    mRef?: React.Ref<ScrollerGridForwardRef<T>>;
    /**
     * Handler for init load
     * @param ref Ref
     * @returns Result
     */
    onInitLoad?: (ref: GridImperativeAPI) => [T[], GridLoaderPartialStates<T>?] | null | undefined;
    /**
     * On items select change
     */
    onSelectChange?: (selectedItems: T[]) => void;
    /**
     * Width of the grid
     */
    width?: number | string;
};
/**
 * Scroller grid forward ref
 */
export interface ScrollerGridForwardRef<T> extends GridMethodRef<T> {
    /**
     * Scroll to the cell
     * @param param Parameters to control
     */
    scrollToCell(param: ScrollToCellParam): void;
    /**
     * Scroll to the cell
     * @param param Parameters to control
     */
    scrollToColumn(param: ScrollToRowParam): void;
    /**
     * Select the item
     * @param rowIndex Row index
     */
    select(rowIndex: number): void;
    /**
     * Select or unselect all items
     * @param checked Checked
     */
    selectAll(checked: boolean): void;
    /**
     * Select item
     * @param item Item
     * @param checked Checked
     */
    selectItem(item: any, checked: boolean): void;
}
/**
 * Scroller vertical grid
 * @param props Props
 * @returns Component
 */
export declare const ScrollerGrid: <T extends object>(props: ScrollerGridProps<T>) => import("react/jsx-runtime").JSX.Element;
export {};
