import { type AutocompleteProps } from '../Autocomplete';
export type AsyncAutocompleteProps<TOptions, TMultiple extends boolean = false, TDisableClearable extends boolean = false, TFreeSolo extends boolean = false> = Omit<AutocompleteProps<TOptions, TMultiple, TDisableClearable, TFreeSolo>, 'inputValue' | 'loading' | 'disabled' | 'fullWidth' | 'error' | 'required' | 'success' | 'options' | 'filterOptions'> & {
    /**
     * Если `true`, будет показан индикатор загрузки
     */
    isLoading?: boolean;
    /**
     * Если `true`, компонент будет не доступен для взаимодействия
     */
    isDisabled?: boolean;
    /**
     * Если `true`, компонент растянется на всю ширину
     */
    isFullWidth?: boolean;
    /**
     * Если `true`, компонент будет отображаться в состоянии ошибки
     */
    isError?: boolean;
    /**
     * Если `true`, компонент будет помечен как обязательный
     */
    isRequired?: boolean;
    /**
     * Если `true`, компонент будет отображаться в состоянии успеха
     */
    isSuccess?: boolean;
    /**
     * Задержка для fetchOptions
     * @default 300
     */
    fetchDelayMs?: number;
    /**
     * Функция для асинхронной загрузки опций на основе поискового запроса
     * При возникновении ошибки запроса данных, компонент сам ее обработает.
     * Для обработки ошибок вручную используйте параметр `onDataLoadError`
     *
     * @param search - Строка поиска, введенная пользователем. На основе этой
     *   строки функция должна вернуть подходящие опции.
     * @param signal - Объект `AbortSignal`, который позволяет отменить запрос,
     *   если пользователь изменил поисковый запрос или закрыл компонент.
     *
     * @returns Promise<TOptions[]> Промис, который разрешается массивом опций
     *   (`TOptions[]`). Эти опции будут отображены в выпадающем списке.
     *
     * @example
     * ```typescript
     * const fetchOptions = async (search: string, signal: AbortSignal) => {
     *   const response = await fetch(`/api/search?query=${search}`, { signal });
     *   const data = await response.json();
     *   return data.results;
     * };
     *
     * <AsyncAutocomplete fetchOptions={fetchOptions} />
     * ```
     */
    fetchOptions: (search: string, signal?: AbortSignal) => Promise<TOptions[]>;
    /**
     * Минимальное количество символов для выполнения запроса
     * @default 0
     */
    minSymbolsToFetch?: number;
    /**
     * Функция для обработки ошибок загрузки данных
     */
    onDataLoadError?: (error: Error) => void;
};
