import * as React from 'react';
import { List } from '../../List';
import { IGroup, IColumn, IDetailsGroupHeaderProps, IDetailsGroupFooterProps, CheckboxVisibility } from './DetailsList.Props';
import { ISelection, SelectionMode } from '../../utilities/selection/interfaces';
import { IDragDropEvents, IDragDropContext, IDragDropHelper } from './../../utilities/dragdrop/interfaces';
import { IViewport } from '../../utilities/decorators/withViewport';
import './DetailsGroup.scss';
export interface IDetailsGroupProps extends React.Props<DetailsGroup> {
    /** The items to render. */
    items: any[];
    /** Given column definitions */
    columns?: IColumn[];
    /** Optional grouping instructions. */
    group?: IGroup;
    /** Optional grouping instructions. */
    groupIndex?: number;
    /** Optional group nesting level. */
    groupNestingDepth?: number;
    /** Optional selection model to track selection state.  */
    selection?: ISelection;
    /** Controls how/if the details list manages selection. */
    selectionMode?: SelectionMode;
    /** Controls the visibility of selection check box. */
    checkboxVisibility?: CheckboxVisibility;
    /** Grouping item limit. */
    getGroupItemLimit?: (group: IGroup) => number;
    /** Event names and corresponding callbacks that will be registered to the group and the rendered row elements */
    eventsToRegister?: [{
        eventName: string;
        callback: (context: IDragDropContext, event?: any) => void;
    }];
    /** Callback for when a given row has been mounted. Useful for identifying when a row has been rendered on the page. */
    onRowDidMount?: (item?: any, index?: number) => void;
    /** Callback for when a given row has been mounted. Useful for identifying when a row has been removed from the page. */
    onRowWillUnmount?: (item?: any, index?: number) => void;
    /**
     * If provided, will be the "default" cell renderer method. This affects cells within the rows; not the rows themselves.
     * If a column definition provides its own onRender method, that will be used instead of this.
     */
    onRenderItemColumn?: (item?: any, index?: number, column?: IColumn) => any;
    /** Map of callback functions related to drag and drop functionality. */
    dragDropEvents?: IDragDropEvents;
    /** Callback for what to render when the item is missing. */
    onRenderMissingItem?: (index?: number) => React.ReactNode;
    /** helper to manage drag/drop across item rows and groups */
    dragDropHelper?: IDragDropHelper;
    /** Information to pass in to the group header. */
    headerProps?: IDetailsGroupHeaderProps;
    /** Information to pass in to the group footer. */
    footerProps?: IDetailsGroupFooterProps;
    /** Viewport, provided by the withViewport decorator. */
    viewport?: IViewport;
    /** Is the list resizing a column */
    isSizing?: boolean;
    /** Callback to get the aria-label string for a given item. */
    getRowAriaLabel?: (item: any) => string;
    /** Optional callback to determine if an item is selectable. */
    canSelectItem?: (item: any) => boolean;
    /** Check button aria label for details list. */
    checkButtonAriaLabel?: string;
}
export interface IDetailsGroupState {
    isDropping?: boolean;
}
export declare class DetailsGroup extends React.Component<IDetailsGroupProps, IDetailsGroupState> {
    refs: {
        [key: string]: React.ReactInstance;
        root: HTMLElement;
        list: List;
    };
    private _events;
    private _dragDropKey;
    constructor(props: IDetailsGroupProps);
    componentDidMount(): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    forceListUpdate(): void;
    private _getGroupKey(group, groupIndex);
    private _onRenderCell(item, index);
    /**
     * collect all the data we need to enable drag/drop for a group
     */
    private _getGroupDragDropOptions();
    /**
     * update groupIsDropping state based on the input value, which is used to change style during drag and drop
     *
     * @private
     * @param {boolean} newValue (new isDropping state value)
     * @param {DragEvent} event (the event trigger dropping state change which can be dragenter, dragleave etc)
     */
    private _updateDroppingState(newIsDropping, event);
    /**
     * get the correct css class to reflect the dropping state for a given group
     *
     * If the group is the current drop target, return the default dropping class name
     * Otherwise, return '';
     *
     */
    private _getDroppingClassName();
}
