import { type ReactNode, type MouseEvent, type KeyboardEvent, type ReactElement } from 'react';
import type { ActionMeta, GroupBase } from 'react-select';
import type { AsyncProps } from 'react-select/async';
type ReactSelectAsyncProps = AsyncProps<unknown, boolean, GroupBase<unknown>>;
type TCustomEvent = {
    target: {
        id?: ReactSelectAsyncProps['inputId'];
        name?: ReactSelectAsyncProps['name'];
        value?: unknown;
    };
    persist: () => void;
};
type TErrorRenderer = (key: string, error?: boolean) => ReactNode;
type TFieldWarnings = Record<string, boolean>;
type TFieldErrors = Record<string, boolean>;
type TCustomFormErrors<Values> = {
    [K in keyof Values]?: TFieldErrors;
};
export type TSearchSelectFieldProps = {
    /**
     *Horizontal size limit of the input fields.
     */
    horizontalConstraint?: 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 'scale' | 'auto';
    /**
     * Aria label (for assistive tech)
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    'aria-label'?: ReactSelectAsyncProps['aria-label'];
    /**
     * HTML ID of an element that should be used as the label (for assistive tech)
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    'aria-labelledby'?: ReactSelectAsyncProps['aria-labelledby'];
    /**
     * The id of the search input. This forwarded as react-select's "inputId"
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    id?: ReactSelectAsyncProps['inputId'];
    /**
     * The id to set on the SelectContainer component. This is forwarded as react-select's "id"
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    containerId?: ReactSelectAsyncProps['id'];
    /**
     * Name of the HTML Input (optional - without this, no input will be rendered)
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    name?: ReactSelectAsyncProps['name'];
    /**
     * Placeholder text for the select value
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    placeholder?: ReactSelectAsyncProps['placeholder'];
    /**
     * Map of components to overwrite the default ones, see [what components you can override](https://react-select.com/components)
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    components?: ReactSelectAsyncProps['components'];
    /**
     * Control whether the selected values should be rendered in the control
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    controlShouldRenderValue?: ReactSelectAsyncProps['controlShouldRenderValue'];
    /**
     * Sets the tabIndex attribute on the input
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    tabIndex?: ReactSelectAsyncProps['tabIndex'];
    /**
     * The value of the select; reflected by the selected option
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    value?: ReactSelectAsyncProps['value'];
    /**
     * Remove the currently focused option when the user presses backspace
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    backspaceRemovesValue?: ReactSelectAsyncProps['backspaceRemovesValue'];
    /**
     * Indicates the input field has an error
     */
    hasError?: boolean;
    /**
     * Indicates the input field has a warning
     * @deprecated Please use the `warnings` prop instead so users know the reason why the field is in warning state.
     */
    hasWarning?: boolean;
    /**
     * Is the select read-only
     */
    isReadOnly?: boolean;
    /**
     * Is the select disabled
     */
    isDisabled?: boolean;
    /**
     * Is the select value clearable
     */
    isClearable?: boolean;
    /**
     * Whether the input and its options are rendered with condensed paddings
     */
    isCondensed?: boolean;
    /**
     * Override the built-in logic to detect whether an option is disabled
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    isOptionDisabled?: ReactSelectAsyncProps['isOptionDisabled'];
    /**
     * Support multiple selected options
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    isMulti?: ReactSelectAsyncProps['isMulti'];
    /**
     * Focus the control when it is mounted. Renamed autoFocus of react-select
     */
    isAutofocussed?: boolean;
    /**
     * Can be used to render a custom value when there are no options (either because of no search results, or all options have been used, or there were none in the first place). Gets called with `{ inputValue: String }`. `inputValue` will be an empty string when no search text is present.
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    noOptionsMessage?: ReactSelectAsyncProps['noOptionsMessage'];
    /**
     * Maximum height of the menu before scrolling
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    maxMenuHeight?: ReactSelectAsyncProps['maxMenuHeight'];
    /**
     * Dom element to portal the select menu to
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    menuPortalTarget?: ReactSelectAsyncProps['menuPortalTarget'];
    /**
     * z-index value for the menu portal
     * <br>
     * Use in conjunction with `menuPortalTarget`
     */
    menuPortalZIndex?: number;
    /**
     * whether the menu should block scroll while open
     */
    menuShouldBlockScroll?: boolean;
    /**
     * Determines if option groups will be separated by a divider
     */
    showOptionGroupDivider?: boolean;
    /**
     * Handle blur events on the control
     */
    onBlur?: (event: TCustomEvent) => void;
    /**
     * Called with a fake event when value changes.
     * <br />
     * The event's `target.name` will be the `name` supplied in props. The event's `target.value` will hold the value. The value will be the selected option, or an array of options in case `isMulti` is `true`.
     */
    onChange?: (event: TCustomEvent, info: ActionMeta<unknown>) => void;
    /**
     * Handle focus events on the control
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    onFocus?: ReactSelectAsyncProps['onFocus'];
    /**
     * Handle change events on the input
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    onInputChange?: ReactSelectAsyncProps['onInputChange'];
    /**
     * Select the currently focused option when the user presses tab
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    tabSelectsValue?: ReactSelectAsyncProps['tabSelectsValue'];
    /**
     * Function that returns a promise, which is the set of options to be used once the promise resolves.
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    loadOptions: ReactSelectAsyncProps['loadOptions'];
    /**
     * The text shown while the options are being loaded
     */
    loadingMessage?: string | (() => string);
    /**
     * If cacheOptions is truthy, then the loaded data will be cached. The cache will remain until cacheOptions changes value.
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    cacheOptions?: ReactSelectAsyncProps['cacheOptions'];
    /**
     * Custom method to filter whether an option should be displayed in the menu
     * <br>
     * [Props from React select was used](https://react-select.com/props)
     */
    filterOption?: ReactSelectAsyncProps['filterOption'];
    /**
     * The style of the an option in the dropdown menu. It could be single lined option or an option with more and custom info
     */
    optionType?: 'single-property' | 'double-property' | 'multiple-properties';
    /**
     * A map of errors. Error messages for known errors are rendered automatically.
     * <br />
     * Unknown errors will be forwarded to `renderError`
     */
    errors?: TFieldErrors;
    /**
     * Called with custom errors. This function can return a message which will be wrapped in an ErrorMessage. It can also return null to show no error.
     */
    renderError?: TErrorRenderer;
    /**
     * A map of warnings. Warning messages for known warnings are rendered automatically.
     * <br/>
     * Unknown warnings will be forwarded to renderWarning.
     */
    warnings?: TFieldWarnings;
    /**
     * Called with custom warnings, as renderWarning(key, warning). This function can return a message which will be wrapped in a WarningMessage.
     * <br />
     * It can also return null to show no warning.
     */
    renderWarning?: (key: string, warning?: boolean) => ReactNode;
    /**
     * Indicates if the value is required. Shows an the "required asterisk" if so.
     */
    isRequired?: boolean;
    /**
     * Indicates whether the field was touched. Errors will only be shown when the field was touched.
     */
    touched?: boolean[] | boolean;
    /**
     * Title of the label
     */
    title: ReactNode;
    /**
     * Hint for the label. Provides a supplementary but important information regarding the behaviour of the input (e.g warn about uniqueness of a field, when it can only be set once), whereas `description` can describe it in more depth. Can also receive a `hintIcon`.
     */
    hint?: ReactNode;
    /**
     * Provides a description for the title.
     */
    description?: ReactNode;
    /**
     * Function called when info button is pressed.
     * <br />
     * Info button will only be visible when this prop is passed.
     */
    onInfoButtonClick?: (event: MouseEvent<HTMLButtonElement> | KeyboardEvent<HTMLButtonElement>) => void;
    /**
     * Icon to be displayed beside the hint text.
     * <br />
     * Will only get rendered when `hint` is passed as well.
     */
    hintIcon?: ReactElement;
    /**
     * Badge to be displayed beside the label.
     * <br />
     * Might be used to display additional information about the content of the field (E.g verified email)
     */
    badge?: ReactNode;
    /**
     * Icon to display on the left of the placeholder text and selected value. Has no effect when `isMulti` is enabled.
     */
    iconLeft?: ReactNode;
};
declare const SearchSelectField: {
    ({ controlShouldRenderValue, ...props }: TSearchSelectFieldProps): import("@emotion/react/jsx-runtime").JSX.Element;
    displayName: string;
    toFieldErrors<FormValues>(errors: unknown): TCustomFormErrors<FormValues>;
};
export default SearchSelectField;
