import * as React from 'react';
import * as PropTypes from 'prop-types';
import { CommonDragLogic } from './drag/CommonDragLogic';
import { GridProps } from './interfaces/GridProps';
import { GridColumnProps } from './interfaces/GridColumnProps';
import { ScrollMode } from './ScrollMode';
/**
 * Represents the [KendoReact Grid component]({% slug overview_grid %}).
 *
 * @example
 * ```jsx
 * class App extends React.Component {
 *    constructor(props) {
 *        super(props);
 *        this.state = {
 *            data: [
 *                { 'foo': 'A1', 'bar': 'B1' },
 *                { 'foo': 'A2', 'bar': 'B2' },
 *                { 'foo': 'A3', 'bar': 'B2' }
 *            ]
 *        };
 *    }
 *    render() {
 *        return (
 *            <Grid
 *                data={this.state.data}
 *                reorderable={true}
 *            >
 *                <GridColumn field="foo" />
 *                <GridColumn field="bar" />
 *            </Grid>
 *        );
 *    }
 * }
 * ReactDOM.render(<App />, document.querySelector('my-app'));
 * ```
 */
export declare class Grid extends React.Component<GridProps, {}> {
    /**
     * @hidden
     */
    static displayName: string;
    /**
     * @hidden
     */
    static defaultProps: {
        scrollable: ScrollMode;
    };
    /**
     * @hidden
     */
    static propTypes: {
        data: PropTypes.Requireable<any>;
        sortable: PropTypes.Requireable<any>;
        onSortChange: PropTypes.Requireable<any>;
        sort: PropTypes.Requireable<any>;
        filterable: PropTypes.Requireable<any>;
        filter: PropTypes.Requireable<any>;
        onFilterChange: PropTypes.Requireable<any>;
        pageable: PropTypes.Requireable<any>;
        pageSize: PropTypes.Requireable<any>;
        onPageChange: PropTypes.Requireable<any>;
        total: PropTypes.Requireable<any>;
        skip: PropTypes.Requireable<any>;
        take: PropTypes.Requireable<any>;
        onExpandChange: PropTypes.Requireable<any>;
        expandField: PropTypes.Requireable<any>;
        selectedField: PropTypes.Requireable<any>;
        onSelectionChange: PropTypes.Requireable<any>;
        onHeaderSelectionChange: PropTypes.Requireable<any>;
        resizable: PropTypes.Requireable<any>;
        reorderable: PropTypes.Requireable<any>;
        group: PropTypes.Requireable<any>;
        groupable: PropTypes.Requireable<any>;
        onGroupChange: PropTypes.Requireable<any>;
        onRowClick: PropTypes.Requireable<any>;
        onItemChange: PropTypes.Requireable<any>;
        editField: PropTypes.Requireable<any>;
        scrollable: PropTypes.Requireable<any>;
        rowHeight: PropTypes.Requireable<any>;
        detail: PropTypes.Requireable<any>;
        style: PropTypes.Requireable<any>;
        onDataStateChange: PropTypes.Requireable<any>;
        onColumnResize: PropTypes.Requireable<any>;
        onColumnReorder: PropTypes.Requireable<any>;
    };
    protected dragLogic: CommonDragLogic;
    private _columns;
    private _columnsMap;
    /**
     * A getter of the current columns. Gets the current column width or current columns, or any other [`GridColumnProps`]({% slug api_grid_gridcolumnprops %}) for each defined column. Can be used on each Grid instance. To obtain the instance of the rendered Grid, use the `ref` callback. The following example demonstrates how to reorder the columns by dragging their handlers and check the properties afterwards. You can check the result in the browser console.
     *
     * @example
     * ```jsx
     * class App extends React.Component {
     *     constructor(props) {
     *         super(props);
     *         this.state = {
     *             data: [
     *                 { 'foo': 'A1', 'bar': 'B1' },
     *                 { 'foo': 'A2', 'bar': 'B2' },
     *                 { 'foo': 'A3', 'bar': 'B2' }
     *             ]
     *         };
     *         this.grid = null;
     *     }
     *     render() {
     *         return (
     *             <div>
     *                 <Grid
     *                     data={this.state.data}
     *                     reorderable={true}
     *                     ref={(g) => { this.grid = g; }}
     *                 >
     *                     <GridColumn field="foo" />
     *                     <GridColumn field="bar" />
     *                 </Grid>
     *                 <button onClick={() => console.log(JSON.stringify(this.grid.columns))}>
     *                     log current properties into browser console.
     *                 </button>
     *             </div>
     *         );
     *     }
     * }
     * ReactDOM.render(<App />, document.querySelector('my-app'));
     * ```
     */
    readonly columns: GridColumnProps[];
    private vs;
    private columnResize;
    private _header;
    private forceUpdateTimeout;
    constructor(props: GridProps);
    /**
     * @hidden
     */
    componentWillReceiveProps(nextProps: GridProps): void;
    /**
     * @hidden
     */
    componentWillUnmount(): void;
    /**
     * @hidden
     */
    render(): JSX.Element;
    private scrollHandler;
    private rowClick;
    private itemChange;
    private selectionChange;
    private onHeaderSelectionChange;
    private pageChange;
    private sortChange;
    private filterChange;
    private groupChange;
    private raiseDataEvent;
    private columnReorder;
    private groupReorder;
    private columnToGroup;
    private resetTableWidth;
    private onResize;
    private initColumns;
    private resolveTitle;
    private getDataState;
    private getArguments;
}
