/// <reference types="react" />
import { BaseComponent } from '../../../Utilities';
import { IButton } from '../../../Button';
import { ISuggestionModel } from '../../../Pickers';
import { ISuggestionsHeaderFooterItemProps, ISuggestionsControlProps } from './Suggestions.types';
import { SuggestionsCore } from './SuggestionsCore';
export declare enum SuggestionItemType {
    header = 0,
    suggestion = 1,
    footer = 2,
}
export interface ISuggestionsControlState {
    selectedHeaderIndex: number;
    selectedFooterIndex: number;
}
export declare class SuggestionsHeaderFooterItem extends BaseComponent<ISuggestionsHeaderFooterItemProps, {}> {
    render(): JSX.Element;
}
/**
 * Class when used with SuggestionsStore, renders a suggestions control with customizable headers and footers
 */
export declare class SuggestionsControl<T> extends BaseComponent<ISuggestionsControlProps<T>, ISuggestionsControlState> {
    protected _forceResolveButton: IButton;
    protected _searchForMoreButton: IButton;
    protected _selectedElement: HTMLDivElement;
    protected _suggestions: SuggestionsCore<T>;
    private SuggestionsOfProperType;
    constructor(suggestionsProps: ISuggestionsControlProps<T>);
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillReceiveProps(): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    readonly currentSuggestion: ISuggestionModel<T>;
    readonly currentSuggestionIndex: number;
    hasSuggestionSelected(): boolean;
    hasSelection(): boolean;
    executeSelectedAction(): void;
    removeSuggestion(index?: number): void;
    /**
     * Handles the key down, returns true, if the event was handled, false otherwise
     * @param keyCode The keyCode to handle
     */
    handleKeyDown(keyCode: number): boolean;
    scrollSelected(): void;
    protected renderHeaderItems(): JSX.Element | null;
    protected renderFooterItems(): JSX.Element | null;
    protected _renderSuggestions(): JSX.Element;
    /**
     * Selects the next selectable item
     */
    protected selectNextItem(itemType: SuggestionItemType, originalItemType?: SuggestionItemType): void;
    /**
     * Selects the previous selectable item
     */
    protected selectPreviousItem(itemType: SuggestionItemType, originalItemType?: SuggestionItemType): void;
    /**
     * Resets the selected state and selects the first selectable item
     */
    protected resetSelectedItem(): void;
    /**
     * Selects the first item
     */
    protected selectFirstItem(): void;
    /**
     * Selects the last item
     */
    protected selectLastItem(): void;
    /**
     * Selects the next item in the suggestion item type group, given the current index
     * If none is able to be selected, returns false, otherwise returns true
     * @param itemType The suggestion item type
     * @param currentIndex The current index, default is -1
     */
    private _selectNextItemOfItemType(itemType, currentIndex?);
    /**
     * Selects the previous item in the suggestion item type group, given the current index
     * If none is able to be selected, returns false, otherwise returns true
     * @param itemType The suggestion item type
     * @param currentIndex The current index. If none is provided, the default is the items length of specified type
     */
    private _selectPreviousItemOfItemType(itemType, currentIndex?);
    private _getCurrentIndexForType(itemType);
    private _getNextItemSectionType(itemType);
    private _getPreviousItemSectionType(itemType);
    private _getAriaLabel();
}
