import 'reflect-metadata';
import React, { CSSProperties, ReactNode } from 'react';
import { GridStore } from './GridStore';
import { Identifiable, UrlState } from '@custis/common';
import { TTableColumn } from './models';
import { AdditionalFilter } from './components';
import { DataQuery } from './DataQuery';
export interface GridProps<TItem extends Identifiable, TFilter, TSorting, TResultAdditionalInfo = undefined> {
    hasSelection?: boolean;
    store: GridStore<TItem, TFilter, TSorting, TResultAdditionalInfo>;
    urlState?: UrlState<DataQuery<TFilter, TSorting>>;
    columns: TTableColumn<TItem, TFilter, TSorting>[];
    expandable?: boolean;
    getSubRow?: (originalRow: TItem, relativeIndex?: number) => TItem[];
    restoreDataState?: boolean;
    checkboxAddon?: (row: TItem) => ReactNode;
    rowCanBeSelected?: (row: TItem) => boolean;
    isVirtualList?: boolean;
    expandReplacement?: 'checkbox';
    paginationHidden?: boolean;
    subRowColumns?: TTableColumn<TItem, TFilter, TSorting>[];
    className?: string;
    columnSettingsHidden?: boolean;
    filtersSettingsVisible?: boolean;
    menuClassName?: string;
    additionalFilters?: AdditionalFilter[];
    getRowStyle?: (originalRow: TItem) => CSSProperties | undefined;
    onCreateRow?(row: TItem): Promise<void>;
    onEditRow?(row: TItem): Promise<void>;
    onCreateSubRow?(row: TItem): Promise<void>;
    onEditSubRow?(row: TItem): Promise<void>;
    onClickRow?(id?: string): void;
    onDoubleClickRow?(row: TItem): void;
}
export declare const Grid: <TItem extends Identifiable & {
    children?: TItem[] | undefined;
}, TFilter, TSorting, TResultAdditionalInfo = undefined>(props: GridProps<TItem, TFilter, TSorting, TResultAdditionalInfo>) => React.JSX.Element;
