import React, { ReactElement } from 'react';
import { FormControlWrapperPublicProps } from '../../FormLayout/components/FormControlWrapper';
import { FormControlCommonProps, SelectOption } from '../types.js';
export type InternalSelectOption<Option extends SelectOption = SelectOption> = Option & {
    /** Internal state if the Option is missing in the props.options list  */
    _missingOption?: boolean;
    /** Internal state if the Option is in the selected list (ie: props.values) */
    _selected?: boolean;
    /** Internal state of the "value" of each Option after running optional props.optionValueExtractor() */
    _value?: any;
};
export interface MultiSelectProps<Option extends SelectOption = SelectOption> extends FormControlCommonProps, FormControlWrapperPublicProps {
    onClearSelection?: () => void;
    /** When true, will remove the 'Select All Options' button. Default is false */
    disableSelectAll?: boolean;
    /** When true then the options lists are only open on dropdown */
    dropdown?: boolean;
    label?: string;
    loading?: boolean;
    /** Callback for fetching options for pagination (infinity scroll) or user input text search */
    loadOptions?: (options?: {
        additional?: boolean;
        text?: string;
    }) => void;
    /** Callback for fetching options that are included in the value prop but not found in the initial options list */
    loadMissingOptions?: (values: Option['value'][]) => void | Promise<Option[]>;
    /** By default, the max-height is restricted with overflow-y-scroll. If `false` no max-height will be set, otherwise, a valid CSS height value can be passed, ie: "300px" */
    maxHeight?: false | number | string | true;
    onChangeValue?: (value: string[]) => void;
    /** Callback for fetching options with no pagination limit to get all possible options when Select All is clicked  */
    loadAllOptions?: () => Option[] | Promise<Option[]>;
    /** This is an optional prop same as <Select /> */
    optionLabelExtractor?: (option: any) => string;
    /** This is an optional prop same as <Select /> */
    optionValueExtractor?: (option: Option) => string;
    options: Option[];
    /** The label to use for "options" description text, defaults to "Options" */
    optionsLabel?: ReactElement | string;
    placeholder?: string;
    /** This is an optional render func, it allows us to customize how each option looks inside the component. If this is not provided then `option.label` is used to display each option. */
    renderOption?: (option: Option, options?: Option[]) => React.ReactNode;
    /** This is an optional render func, it allows us to customize how each selected option looks inside the component. If this is not provided then `option.label` is used to display each option. */
    renderSelectedOption?: (option: Option, options?: Option[]) => React.ReactNode;
    totalOptions?: number;
    value: Option['value'][];
}
declare const MultiSelect: <Option extends SelectOption>({ disabled, dropdown, onClearSelection, error, disableSelectAll, hint, label, labelBehavior, loading, loadOptions, loadMissingOptions, maxHeight, name, onBlur, onChange, onChangeValue, onFocus, loadAllOptions, optionLabelExtractor, optionValueExtractor, options, optionsLabel, placeholder, renderOption, renderSelectedOption, subText, showErrorMessage, totalOptions, value, }: MultiSelectProps<Option>) => React.JSX.Element;
export { MultiSelect };
