/// <reference types="react" />
import { BaseComponent, IClassNames } from '../../Utilities';
import { IDetailsHeaderProps } from './DetailsList.types';
import { CollapseAllVisibility } from '../../GroupedList';
import { IColumnResizeDetails, SelectAllVisibility } from './DetailsHeader.types';
import { IDetailsHeaderStyleProps, IDetailsHeaderStyles } from './DetailsHeader.types';
export declare const getClassNames: (getStyles?: ((props: IDetailsHeaderStyleProps) => Partial<IDetailsHeaderStyles>) | Partial<IDetailsHeaderStyles> | undefined, styleProps?: IDetailsHeaderStyleProps | undefined) => IClassNames<IDetailsHeaderStyles>;
export interface IDetailsHeader {
    focus: () => boolean;
}
export interface IDetailsHeaderState {
    columnResizeDetails?: IColumnResizeDetails;
    isAllSelected?: boolean;
    isSizing?: boolean;
    groupNestingDepth?: number;
    isAllCollapsed?: boolean;
}
export declare class DetailsHeaderBase extends BaseComponent<IDetailsHeaderProps, IDetailsHeaderState> implements IDetailsHeader {
    static defaultProps: {
        selectAllVisibility: SelectAllVisibility;
        collapseAllVisibility: CollapseAllVisibility;
    };
    private _classNames;
    private _rootElement;
    private _rootComponent;
    private _id;
    private _draggedColumnIndex;
    private _dropHintDetails;
    private _dragDropHelper;
    private _currentDropHintIndex;
    private _subscriptionObject;
    private _onDropIndexInfo;
    constructor(props: IDetailsHeaderProps);
    componentDidMount(): void;
    componentDidUpdate(prevProps: IDetailsHeaderProps): void;
    componentWillReceiveProps(newProps: IDetailsHeaderProps): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    /** Set focus to the active thing in the focus area. */
    focus(): boolean;
    private _getHeaderDragDropOptions();
    private _updateDroppingState(newValue, event);
    private _isValidCurrentDropHintIndex();
    private _onDragOver(item, event);
    private _onDrop(item?, event?);
    private _setDraggedItemIndex(itemIndex);
    private _resetDropHints();
    private _updateDropHintElement(element, property);
    private _getDropHintPositions;
    /**
     * Based on the given cursor position, finds the nearest drop hint and updates the state to make it visible
     *
     */
    private _computeDropHintToBeShown;
    private _renderColumnSizer(columnIndex);
    private _renderDropHint(dropHintIndex);
    private _onRenderColumnHeaderTooltip;
    /**
     * double click on the column sizer will auto ajust column width
     * to fit the longest content among current rendered rows.
     *
     * @private
     * @param {number} columnIndex (index of the column user double clicked)
     * @param {React.MouseEvent} ev (mouse double click event)
     */
    private _onSizerDoubleClick(columnIndex, ev);
    /**
     * Called when the select all toggle is clicked.
     */
    private _onSelectAllClicked;
    private _onRootMouseDown;
    private _onRootMouseMove;
    private _onRootRef;
    private _onRootKeyDown;
    /**
     * mouse move event handler in the header
     * it will set isSizing state to true when user clicked on the sizer and move the mouse.
     *
     * @private
     * @param {React.MouseEvent} ev (mouse move event)
     */
    private _onSizerMouseMove;
    private _onSizerBlur;
    /**
     * mouse up event handler in the header
     * clear the resize related state.
     * This is to ensure we can catch double click event
     *
     * @private
     * @param {React.MouseEvent} ev (mouse up event)
     */
    private _onSizerMouseUp;
    private _onSelectionChanged();
    private _onToggleCollapseAll();
}
