import type { AriaAttributes } from 'react';
import React from 'react';
import type { InputProps } from '../Input';
import type { Nullable, Override } from '../../typings/utility-types';
import type { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
import type { SizeProp } from '../../lib/types/props';
import { type MaskedProps } from '../MaskedInput';
export interface AutocompleteProps extends CommonProps, Pick<AriaAttributes, 'aria-label'>, Pick<Partial<MaskedProps>, 'alwaysShowMask' | 'mask' | 'maskChar'>, Override<Omit<InputProps, 'alwaysShowMask' | 'mask' | 'maskChar'>, {
    /** Отрисовывает элементы результата поиска. */
    renderItem?: (item: string) => React.ReactNode;
    /** Задаёт функцию поиска элементов, которая должна возвращать Promise с массивом значений. */
    source?: string[] | ((patter: string) => Promise<string[]>);
    /**  По умолчанию выпадающий список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */
    disablePortal?: boolean;
    /** Определяет, нужно ли показывать тень у выпадающего списка. */
    hasShadow?: boolean;
    /** Выравнивание выпадающего списка. */
    menuAlign?: 'left' | 'right';
    /** Максимальная высота выпадающего списка. */
    menuMaxHeight?: number | string;
    /** Ширина выпадающего списка. */
    menuWidth?: number | string;
    /** Отключает скролл окна, когда выпадающий список раскрыт. */
    preventWindowScroll?: boolean;
    /** Событие изменения `value`. */
    onValueChange: (value: string) => void;
    /** Событие потери автокомплитом фокуса. */
    onBlur?: () => void;
    /** Размер автокомплита. */
    size?: SizeProp;
    /** Значение автокомплита. */
    value: string;
    /** Текст заголовка выпадающего списка в мобильной версии. */
    mobileMenuHeaderText?: string;
}> {
    /** Расположение выпадающего списка — над или под полем. */
    menuPos?: 'top' | 'bottom';
}
export interface AutocompleteState {
    items: Nullable<string[]>;
    selected: number;
    focused: boolean;
    isMobileOpened: boolean;
}
export declare const AutocompleteDataTids: {
    readonly root: "Autocomplete__root";
    readonly menu: "Autocomplete__menu";
};
export declare const AutocompleteIds: {
    readonly menu: "Autocomplete__menu";
};
type DefaultProps = Required<Pick<AutocompleteProps, 'renderItem' | 'disablePortal' | 'hasShadow' | 'menuMaxHeight' | 'preventWindowScroll'>>;
/**
 * Автокомплит — поле ввода с выпадающим списком подсказок. Подсказки отображаются пользователю, когда он начинает вводить значение в поле. */
export declare class Autocomplete extends React.Component<AutocompleteProps, AutocompleteState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps;
    state: AutocompleteState;
    private theme;
    private size;
    private readonly locale;
    private isMobileLayout;
    private opened;
    private input;
    private menu;
    private menuId;
    private rootSpan;
    private mobilePopup;
    private featureFlags;
    private requestId;
    private getProps;
    getRootNode: TGetRootNode;
    private setRootNode;
    /** Программно устанавливает фокус на автокомплит.
     * @public
     * @example
     * <Autocomplete ref={autocompleteRef} />
     * <button onClick={() => autocompleteRef.current?.focus()}>Focus</button>
     */
    focus(): void;
    /** Программно снимает фокус с автокомплита.
     * @public
     * @example
     * <Autocomplete ref={autocompleteRef} />
     * <button onClick={() => autocompleteRef.current?.blur()}>Blur</button>
     */
    blur(): void;
    componentDidUpdate(prevProps: AutocompleteProps): void;
    render(): React.JSX.Element;
    renderMain: (props: CommonWrapperRestProps<AutocompleteProps>) => React.JSX.Element;
    private renderHints;
    private renderMenu;
    private getInput;
    private renderMobileMenu;
    private getItems;
    private handleValueChange;
    private handleCloseMobile;
    private handleKeyPressMobile;
    private handleFocus;
    private handleBlur;
    private handleClickOutside;
    private handleKeyDown;
    private handleMenuItemClick;
    private getAnchor;
    private handleItemClick;
    private choose;
    private updateItems;
    private fireChange;
    private refInput;
    private refMenu;
    private refRootSpan;
    private refMobilePopup;
}
export {};
