import { CSSProperties, KeyboardEvent, MouseEvent, PropsWithChildren } from "react";
import Autosuggest from "react-autosuggest";
import { IOption } from "../Menu";
import { InputProps } from "../../molecules/Input";
import { InfiniteScrollProps } from "../../molecules/InfiniteScroll";
import { IBlankProps } from "../../atoms/Blank";
export interface IAutoCompleteProps extends Omit<InputProps, "value" | "onChange" | "onSelect" | "onKeyDown"> {
    options?: IOption[];
    value: string;
    width?: string;
    menuWidth?: string;
    menuHeight?: string;
    onSelect?: (options: IOption[]) => void;
    onChange: (value: string) => void;
    autosuggestProps?: Autosuggest.AutosuggestProps<any, any>;
    asyncCallback?: (value: string, isLoadNext?: boolean) => Promise<void>;
    bottomBind?: boolean;
    zIndex?: number;
    id?: string;
    valueLengthThrottled?: number;
    valueLengthFilter?: number;
    valueLengthAsync?: number;
    filterOptions?: FilterOptions;
    setOptions?: (options: IOption[]) => void;
    onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
    onGetInnerRef?: (input: HTMLElement) => void;
    optionStyle?: CSSProperties;
    root?: HTMLElement | null;
    loading?: boolean;
    withInfiniteScroll?: boolean;
    infiniteScrollProps?: InfiniteScrollProps;
    multiSelect?: boolean;
    selected?: string[];
}
export interface IAutoCompleteState {
    suggestions: IOption[];
    selectedSuggestions: IOption[];
    isFocused: boolean;
}
export declare type FilterOptions = (value: string, options: IOption[]) => IOption[];
export interface IInput {
    selectedSuggestion?: IOption;
    innerRef?: RefType<HTMLInputElement>;
    inputProps?: InputProps;
}
export interface IMenu extends IBlankProps {
    minWidth?: string;
    maxHeight?: string;
}
export interface IOptionProps {
    query: string;
    suggestion: IOption;
    isHighlighted: boolean;
    multiSelect?: boolean;
    optionStyle?: CSSProperties;
    onClick?: (e: MouseEvent) => void;
    onMouseDown?: (e: MouseEvent) => void;
}
export interface IPopup extends PropsWithChildren {
    anchor: HTMLElement;
    zIndex?: number;
    suggestions: IOption[];
    bottomBind?: boolean;
    menuHeight?: string;
    width?: string;
    minWidth?: string;
    containerRef?: (ref: HTMLDivElement | null) => void;
    root?: HTMLElement | null;
    onRequestClose?: VoidFunction;
}
export interface IText {
    highlight?: boolean;
}
