import type { AriaAttributes, HTMLAttributes } from 'react';
import React from 'react';
import type { InputIconType, ShowClearIcon } from '../../components/Input';
import { Input } from '../../components/Input';
import { InputLikeText } from '../InputLikeText';
import type { Menu } from '../Menu';
import type { MenuItemState } from '../../components/MenuItem';
import type { Nullable } from '../../typings/utility-types';
import type { CommonProps } from '../CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
import type { ComboBoxExtendedItem, ComboBoxViewMode } from '../../components/ComboBox';
import type { SizeProp } from '../../lib/types/props';
import type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput';
import { InternalTextareaWithLayout } from '../InternalTextareaWithLayout/InternalTextareaWithLayout';
import { ComboBoxRequestStatus } from './CustomComboBoxTypes';
interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, CommonProps, Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {
    align?: 'left' | 'center' | 'right';
    autoFocus?: boolean;
    borderless?: boolean;
    disablePortal?: boolean;
    disabled?: boolean;
    editing?: boolean;
    /**
     * Cостояние валидации при ошибке.
     */
    error?: boolean;
    items?: Nullable<Array<ComboBoxExtendedItem<T>>>;
    loading?: boolean;
    /**
     * Позволяет вручную задать текущую позицию выпадающего окна
     */
    menuPos?: 'top' | 'bottom';
    menuAlign?: 'left' | 'right';
    opened?: boolean;
    drawArrow?: boolean;
    placeholder?: string;
    size?: SizeProp;
    textValue?: string;
    totalCount?: number;
    value?: Nullable<T>;
    showClearIcon?: ShowClearIcon;
    /**
     * Cостояние валидации при предупреждении.
     */
    warning?: boolean;
    width?: string | number;
    maxLength?: number;
    maxMenuHeight?: number | string;
    leftIcon?: InputIconType;
    rightIcon?: InputIconType;
    inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];
    onBeforePasteInMask?: MaskedInputOnBeforePasteValue;
    onValueChange?: (value: T) => void;
    onClickOutside?: (e: Event) => void;
    onFocus?: () => void;
    onMobileClose?: () => void;
    onFocusOutside?: () => void;
    onInputBlur?: () => void;
    onInputValueChange?: (value: string) => void;
    onInputFocus?: () => void;
    onInputClick?: () => void;
    onClearCrossClick?: () => void;
    onInputKeyDown?: (e: React.KeyboardEvent) => void;
    onMouseEnter?: (e: React.MouseEvent) => void;
    onMouseOver?: (e: React.MouseEvent) => void;
    onMouseLeave?: (e: React.MouseEvent) => void;
    renderItem?: (item: T, state: MenuItemState) => React.ReactNode;
    itemWrapper?: (item: T) => React.ComponentType;
    renderNotFound?: () => React.ReactNode;
    renderTotalCount?: (found: number, total: number) => React.ReactNode;
    renderValue?: (item: T) => React.ReactNode;
    renderAddButton?: (query?: string) => React.ReactNode;
    repeatRequest?: () => void;
    requestStatus?: ComboBoxRequestStatus;
    refInput?: (input: Nullable<Input | InternalTextareaWithLayout>) => void;
    refMenu?: (menu: Nullable<Menu>) => void;
    refInputLikeText?: (inputLikeText: Nullable<InputLikeText>) => void;
    viewMode?: ComboBoxViewMode;
    maxRows?: number;
}
type DefaultProps<T> = Required<Pick<ComboBoxViewProps<T>, 'renderItem' | 'renderValue' | 'renderAddButton' | 'repeatRequest' | 'requestStatus' | 'onClickOutside' | 'onFocusOutside' | 'width' | 'showClearIcon'>>;
export declare const ComboBoxViewIds: {
    menu: string;
};
interface ComboBoxViewState {
    anchorElement: Nullable<Element>;
    clearCrossShowed: boolean;
}
export declare class ComboBoxView<T> extends React.Component<ComboBoxViewProps<T>, ComboBoxViewState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static defaultProps: DefaultProps<unknown>;
    private getProps;
    getRootNode: TGetRootNode;
    private input;
    private setRootNode;
    private mobileInput;
    private isMobileLayout;
    private dropdownContainerRef;
    private theme;
    private size;
    private menuId;
    state: {
        anchorElement: null;
        clearCrossShowed: boolean;
    };
    componentDidMount(): void;
    updateAnchorElement(): void;
    componentDidUpdate(prevProps: ComboBoxViewProps<T>): void;
    render(): React.JSX.Element;
    renderMain(): React.JSX.Element;
    private getComboBoxMenu;
    private renderMenu;
    private renderMobileMenu;
    private getParent;
    private renderAddButton;
    private renderInput;
    private handleMobileFocus;
    private handleItemSelect;
    private refInput;
    private renderSpinner;
    private getRightIcon;
    private refMobileInput;
}
export {};
