import { FormGroup } from './FormGroup';
import { FormControl, FormControlDefaultProps, FormControlProps } from './FormControl';
import React from 'react';
import PropTypes from 'prop-types';
import { FocusHelper } from '../../utils/FocusHelper';
import { DropdownProps } from '../Dropdown';
export declare type MultiSelectProps = DropdownProps & {
    id?: string | number;
    isFilterable?: boolean;
    searchText?: string;
    noResultsText?: string;
    label?: string;
    overlayProps?: object;
    value?: any;
    testAutomationId?: string;
    className?: string;
    block?: boolean;
    stretch?: boolean;
    listHeader?: any;
    listItemsLimit?: number;
    labelItemsLimit?: number;
    onChange?: (value: any) => void;
    showMoreCountTextTemplate?: string;
    toggleAriaLabel?: string;
    selectedValuesPrefix?: string;
    applyLabelPrefixForSingleMode?: boolean;
    applyLabelPrefixForMultiMode?: boolean;
    ariaLabelledById?: string;
    behaveAsFlat: boolean;
} & FormControlProps & Partial<MultiSelectDefaultProps> & React.HTMLProps<MultiSelect>;
export declare type MultiSelectDefaultProps = {
    isFilterable: boolean;
    labelItemsLimit: number;
    testAutomationId: string;
    searchText: string;
    noResultsText: string;
    disabled: boolean;
    showMoreCountTextTemplate: string;
    listItemsLimit: number;
    isSingleSelect: any;
    stretchDropdownMenu: any;
} & FormControlDefaultProps;
export declare type MultiSelectState = {
    filterText: string;
    filterRegExp: RegExp | null;
    filterCallback: (label: string, value: any) => boolean;
    isOpen: boolean;
    isMoreShowed: boolean;
    hasFilterFocus: boolean;
};
declare class MultiSelectField extends FormGroup<any> {
    static propTypes: any;
    static defaultProps: {
        testAutomationId: string;
        ariaDescId: any;
        hasFormGroupContainer: boolean;
        hasFeedbackBlock: boolean;
    };
    renderInput(): JSX.Element;
}
declare class MultiSelectOption extends React.Component<any, any> {
    static contextTypes: {
        multiSelect: PropTypes.Requireable<object>;
        multiSelectGroup: PropTypes.Requireable<object>;
        getOptionIdPrefix: PropTypes.Requireable<(...args: any[]) => any>;
        setAriaActivedescendant: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static childContextTypes: {
        getOptionIdPrefix: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static propTypes: {
        className: PropTypes.Requireable<string>;
        disabled: PropTypes.Requireable<boolean>;
        groupMaster: PropTypes.Requireable<boolean>;
        icon: PropTypes.Requireable<string>;
        label: PropTypes.Validator<string>;
        labelClassName: PropTypes.Requireable<string>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onSelect: PropTypes.Requireable<(...args: any[]) => any>;
        testAutomationId: PropTypes.Requireable<string>;
        value: PropTypes.Validator<any>;
        ariaPosition: PropTypes.Requireable<number>;
        ariaLevel: PropTypes.Requireable<number>;
        ariaSetSize: PropTypes.Requireable<number>;
        hint: PropTypes.Requireable<string>;
        customLabel: PropTypes.Requireable<any>;
        tagRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        description: PropTypes.Requireable<string>;
        secondLine: PropTypes.Requireable<string>;
    };
    static defaultProps: {
        className: any;
        disabled: boolean;
        groupMaster: boolean;
        icon: string;
        labelClassName: string;
        onKeyDown: () => void;
        onSelect: () => void;
        testAutomationId: any;
        ariaPosition: any;
        ariaLevel: any;
        ariaSetSize: any;
        hint: any;
        customLabel: any;
        tagRenderer: any;
        description: any;
        secondLine: any;
        overlayProps: {};
    };
    static compareOptionValue(source: any): (value: any) => boolean;
    constructor(props: any, context: any);
    getChildContext(): {
        getOptionIdPrefix: () => string;
    };
    handleKeyDown(event: any): void;
    getId(): string;
    finalRender(props: any, content: any): any;
    render(): JSX.Element;
}
declare class MultiSelectMasterOption extends React.Component {
    static propTypes: any;
    render(): any;
}
declare class MultiSelectOptionGroup extends React.Component<any> {
    static contextTypes: {
        multiSelect: PropTypes.Requireable<object>;
        multiSelectGroup: PropTypes.Requireable<object>;
        getOptionIdPrefix: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static childContextTypes: {
        multiSelectGroup: PropTypes.Requireable<object>;
        getOptionIdPrefix: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static propTypes: {
        children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        className: PropTypes.Requireable<string>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onSelect: PropTypes.Requireable<(...args: any[]) => any>;
        testAutomationId: PropTypes.Requireable<string>;
        ariaPosition: PropTypes.Requireable<number>;
        ariaLevel: PropTypes.Requireable<number>;
        ariaSetSize: PropTypes.Requireable<number>;
    };
    static defaultProps: {
        children: any;
        className: any;
        onKeyDown: () => void;
        onSelect: () => void;
        testAutomationId: any;
        ariaPosition: number;
        ariaLevel: number;
        ariaSetSize: number;
    };
    getChildContext(): {
        multiSelectGroup: {
            values: any;
            filteredLabels: any;
        };
        getOptionIdPrefix: () => string;
    };
    getOptionId: () => string;
    getSiblingOptionSize(children: any): any;
    getMasterOptionWrapperProps: (props: any) => any;
    getGroupProps(props: any): Pick<any, string>;
    render(): JSX.Element;
}
export declare class MultiSelect extends FormControl<MultiSelectProps> {
    static propTypes: any;
    static childContextTypes: {
        multiSelect: PropTypes.Requireable<object>;
        level: PropTypes.Requireable<number>;
        getOptionIdPrefix: PropTypes.Requireable<(...args: any[]) => any>;
        setAriaActivedescendant: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static Option: typeof MultiSelectOption;
    static MasterOption: typeof MultiSelectMasterOption;
    static Group: typeof MultiSelectOptionGroup;
    static MultiSelectField: typeof MultiSelectField;
    static defaultProps: {
        isFilterable: boolean;
        labelItemsLimit: number;
        testAutomationId: string;
        searchText: string;
        noResultsText: string;
        disabled: boolean;
        isSingleSelect: boolean;
        showMoreCountTextTemplate: string;
        toggleAriaLabel: string;
        selectedValuesPrefix: string;
        applyLabelPrefixForSingleMode: boolean;
        applyLabelPrefixForMultiMode: boolean;
        stretchDropdownMenu: boolean;
        behaveAsFlat: boolean;
        hasFormGroupContainer: boolean;
        hasFeedbackBlock: boolean;
    };
    focusHelper: FocusHelper;
    listItemsFilteredByLimit: any;
    listItemsFiltered: any;
    multiSelectEle: any;
    instanceId: any;
    uid: any;
    constructor(props: any, context: any);
    componentDidMount(): void;
    saveMultiSelectRef: (ref: any) => void;
    filterByLimit(label: string, value: any): boolean;
    filterByLabelAndLimit(label: any, value: any): boolean;
    focus: () => void;
    outputConverter(e: any): any;
    getValue(): null;
    getChildContext(): {
        multiSelect: {
            uid: () => number;
            values: any[];
            setValues: (values: any) => void;
            filterCallback: any;
            filterRegExp: any;
            isSingleSelectMode: any;
            behaveAsFlat: boolean;
            close: () => void;
        };
        level: number;
        getOptionIdPrefix: () => string;
        setAriaActivedescendant: (ariaActivedescendant: any) => void;
    };
    onToggle(isOpen: boolean): void;
    onKeyDown(event: React.KeyboardEvent<any>): void;
    setTextFilter(text: string): void;
    showMore(event: React.MouseEvent<any>): void;
    renderShowMore(): React.ReactNode;
    /** @param {Array<String>} selectedItemLabels */
    getTitle: (selectedItemLabels: any) => any;
    getAriaLabel: () => any;
    getAriaDescribedbyProp(): {
        'aria-describedby': string;
    } | {
        'aria-describedby'?: undefined;
    };
    /** @param {Array<String>} selectedItems */
    getDisplayLabel: (selectedItems: any) => any;
    shouldApplyLabelPrefix(): boolean;
    /** @returns {Array<String>}*/
    getSelectedItemLabels: () => any;
    render(): JSX.Element;
}
export {};
