import React from 'react';
type GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;
type GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;
type OnChangeProp<ITEM> = (props: {
    value: ITEM | null;
    e: React.SyntheticEvent;
}) => void;
type UseAutoCompleteProps<ITEM, GROUP> = {
    getItemGroupKey?: GetItemGroupKey<ITEM> | undefined;
    getGroupKey?: GetGroupKey<GROUP>;
    groups?: GROUP[];
    items: ITEM[];
    dropdownRef: React.MutableRefObject<HTMLDivElement | null>;
    controlRef: React.MutableRefObject<HTMLDivElement | null>;
    disabled?: boolean;
    getItemLabel: (item: ITEM) => string;
    getItemKey: (item: ITEM) => string | number;
    searchFunction?: (item: ITEM, searchValue: string) => boolean;
    onFocus?: React.FocusEventHandler<HTMLInputElement>;
    onBlur?: React.FocusEventHandler<HTMLInputElement>;
    searchValue?: string;
    onChange: OnChangeProp<ITEM>;
    isLoading?: boolean;
    dropdownOpen?: boolean;
    onDropdownOpen?: (isOpen: boolean) => void;
    ignoreOutsideClicksRefs?: ReadonlyArray<React.RefObject<HTMLElement>>;
};
type OptionProps<ITEM> = {
    index: number;
    item: ITEM;
    keyPrefix: number;
};
type GetOptionPropsResult = {
    onClick: (e: React.SyntheticEvent) => void;
    onMouseEnter: (e: React.SyntheticEvent) => void;
    active: boolean;
    hovered: boolean;
    key: string | number;
};
export declare function useAutoComplete<ITEM, GROUP>(params: UseAutoCompleteProps<ITEM, GROUP>): {
    isOpen: boolean;
    visibleItems: import("##/utils/getGroups").GetGroupsResult<ITEM, GROUP>;
    getOptionProps: ({ index, item, }: OptionProps<ITEM>) => GetOptionPropsResult;
    handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
    handleInputBlur: (e: React.FocusEvent<HTMLInputElement>) => void;
    inputRef: React.RefObject<HTMLInputElement>;
    getKeyProps: (rest?: import("##/hooks/useKeysDeprecated").KeyProps) => import("##/hooks/useKeysDeprecated").KeyProps;
    hasItems: boolean;
    optionsRefs: React.RefObject<HTMLDivElement>[];
};
export {};
