import './utils';
import WidgetBase from '@dojo/framework/core/WidgetBase';
import { DNode } from '@dojo/framework/core/interfaces';
import I18nMixin, { I18nProperties } from '@dojo/framework/core/mixins/I18n';
import ThemedMixin, { ThemedProperties } from '@dojo/framework/core/mixins/Themed';
import { Store } from '@dojo/framework/stores/Store';
import { FilterRenderer, SortRenderer } from './Header';
import { ColumnConfig, Fetcher, Updater } from './interfaces';
export interface CustomRenderers {
    sortRenderer?: SortRenderer;
    filterRenderer?: FilterRenderer;
}
export interface GridProperties<S> extends I18nProperties, ThemedProperties {
    /** The full configuration for the grid columns */
    columnConfig: ColumnConfig[];
    /** function that returns results for the page reflected */
    fetcher: Fetcher<S>;
    /** gird height in px */
    height: number;
    /** function that updates an item from a edit made in the grid */
    updater?: Updater<S>;
    /** options store, if no store is passed each grid will factory their own grid */
    store?: Store<S>;
    /** the path to store the grid data in */
    storeId?: string;
    /** set of custom renderers for sorting or filtering */
    customRenderers?: CustomRenderers;
    /** when set uses traditional pagination */
    pagination?: boolean;
    /** handler for row selection */
    onRowSelect?: (rowData: S[]) => void;
}
declare const Grid_base: import("@dojo/framework/core/interfaces").Constructor<ThemedMixin<unknown>> & typeof WidgetBase & import("@dojo/framework/core/interfaces").Constructor<I18nMixin>;
export default class Grid<S> extends Grid_base<GridProperties<S>> {
    private _store;
    private _handle;
    private _scrollLeft;
    private _pageSize;
    private _columnWidths;
    private _gridWidth;
    constructor();
    protected onStoreProperty(previous: any, current: any): void;
    private _getProperties;
    private _getBodyDimensions;
    private _onColumnResize;
    private _fetcher;
    private _sorter;
    private _filterer;
    private _updater;
    private _pageChange;
    private _selection;
    private _onScroll;
    protected render(): DNode;
}
export {};
