/// <reference types="react" />
import * as React from 'react';
import { BaseComponent } from '../../Utilities';
import { CheckboxVisibility, ConstrainMode, DetailsListLayoutMode, IColumn, IDetailsList, IDetailsListProps } from '../DetailsList/DetailsList.Props';
import { IDetailsRowProps } from '../DetailsList/DetailsRow';
import { SelectionMode } from '../../utilities/selection/index';
export interface IDetailsListState {
    lastWidth?: number;
    lastSelectionMode?: SelectionMode;
    adjustedColumns?: IColumn[];
    isCollapsed?: boolean;
    isSizing?: boolean;
    isDropping?: boolean;
    isSomeGroupExpanded?: boolean;
}
export declare class DetailsList extends BaseComponent<IDetailsListProps, IDetailsListState> implements IDetailsList {
    static defaultProps: {
        layoutMode: DetailsListLayoutMode;
        selectionMode: SelectionMode;
        constrainMode: ConstrainMode;
        checkboxVisibility: CheckboxVisibility;
        isHeaderVisible: boolean;
    };
    private _root;
    private _header;
    private _groupedList;
    private _list;
    private _focusZone;
    private _selectionZone;
    private _selection;
    private _activeRows;
    private _dragDropHelper;
    private _initialFocusedIndex;
    private _columnOverrides;
    constructor(props: IDetailsListProps);
    scrollToIndex(index: number, measureItem?: (itemIndex: number) => number): void;
    componentWillUnmount(): void;
    componentDidUpdate(prevProps: any, prevState: any): void;
    componentWillReceiveProps(newProps: IDetailsListProps): void;
    render(): JSX.Element;
    forceUpdate(): void;
    protected _onRenderRow(props: IDetailsRowProps, defaultRender?: any): JSX.Element;
    private _onRenderDetailsHeader(detailsHeaderProps, defaultRender?);
    private _onRenderListCell(nestingDepth);
    private _onRenderCell(nestingDepth, item, index);
    private _onGroupExpandStateChanged(isSomeGroupExpanded);
    private _onColumnIsSizingChanged(column, isSizing);
    private _onHeaderKeyDown(ev);
    private _onContentKeyDown(ev);
    private _getGroupNestingDepth();
    private _onRowDidMount(row);
    private _setFocusToRowIfPending(row);
    private _onRowWillUnmount(row);
    private _onToggleCollapse(collapsed);
    private _forceListUpdates();
    private _adjustColumns(newProps, forceUpdate?);
    /** Returns adjusted columns, given the viewport size and layout mode. */
    private _getAdjustedColumns(newProps, forceUpdate?);
    /** Builds a set of columns based on the given columns mixed with the current overrides. */
    private _getFixedColumns(newColumns);
    /** Builds a set of columns to fix within the viewport width. */
    private _getJustifiedColumns(newColumns, viewportWidth, props);
    private _onColumnResized(resizingColumn, newWidth);
    private _rememberCalculatedWidth(column, newCalculatedWidth);
    /**
     * Callback function when double clicked on the details header column resizer
     * which will measure the column cells of all the active rows and resize the
     * column to the max cell width.
     *
     * @private
     * @param {IColumn} column (double clicked column definition)
     * @param {number} columnIndex (double clicked column index)
     * @todo min width 100 should be changed to const value and should be consistent with the value used on _onSizerMove method in DetailsHeader
     */
    private _onColumnAutoResized(column, columnIndex);
    /**
     * Call back function when an element in FocusZone becomes active. It will transalate it into item
     * and call onActiveItemChanged callback if specified.
     *
     * @private
     * @param {el} row element that became active in Focus Zone
     * @param {ev} focus event from Focus Zone
     */
    private _onActiveRowChanged(el?, ev?);
    private _getItemKey(item, itemIndex);
}
export declare function buildColumns(items: any[], canResizeColumns?: boolean, onColumnClick?: (ev: React.MouseEvent<HTMLElement>, column: IColumn) => any, sortedColumnKey?: string, isSortedDescending?: boolean, groupedColumnKey?: string, isMultiline?: boolean): IColumn[];
