import { KeyboardEvent, CSSProperties, PropsWithChildren } from "react";
import Autosuggest from "react-autosuggest";
import { IOption } from "../../Menu";
import { InputProps } from "../../../molecules/Input";
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?: (option: IOption) => void;
    onChange: (value: string) => void;
    autosuggestProps?: Autosuggest.AutosuggestProps<any, any>;
    asyncCallback?: (value: string) => Promise<IOption[]>;
    bottomBind?: boolean;
    zIndex?: number;
    id?: string;
    valueLengthThrottled?: number;
    valueLengthFilter?: number;
    valueLengthAsync?: number;
    filterOptions?: FilterOptions;
    onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
    onGetInnerRef?: (input: HTMLElement) => void;
    optionStyle?: CSSProperties;
    root?: HTMLElement | null;
    loading?: boolean;
}
export interface IAutoCompleteState {
    suggestions: IOption[];
    selectedSuggestion: IOption | undefined;
}
export declare type FilterOptions = (value: string, options: IOption[]) => IOption[];
export interface IInput {
    selectedSuggestion?: IOption;
    innerRef?: RefType<HTMLInputElement | null>;
}
export interface IMenu extends IBlankProps {
    minWidth?: string;
    maxHeight?: string;
}
export interface IOptionProps {
    query: string;
    suggestion: IOption;
    isHighlighted: boolean;
    optionStyle?: CSSProperties;
}
export interface IPopup extends PropsWithChildren {
    anchor: HTMLElement;
    zIndex?: number;
    suggestions: IOption[];
    bottomBind?: boolean;
    menuHeight?: string;
    width?: string;
    containerRef?: (ref: HTMLDivElement | null) => void;
    root?: HTMLElement | null;
}
export interface IText {
    highlight?: boolean;
}
