import React from 'react';
import { CountedGroup, SelectAllItem } from "../../../utils/getGroups";
declare type IndexForHighlight = number | ((oldIndex: number) => number);
declare type Group<ITEM, GROUP> = {
    items: ITEM[];
    key: string | number;
    group?: GROUP;
};
declare type GetItemGroupKey<ITEM> = (item: ITEM) => string | number | undefined;
declare type GetGroupKey<GROUP> = (item: GROUP) => string | number | undefined;
declare type SortGroups<ITEM, GROUP> = (a: Group<ITEM, GROUP>, b: Group<ITEM, GROUP>) => number;
declare type OnChangeProp<ITEM, MULTIPLE extends boolean> = (value: (MULTIPLE extends true ? ITEM[] : ITEM) | null, props: {
    e: React.SyntheticEvent;
}) => void;
declare type ValueProp<ITEM, MULTIPLE extends boolean> = (MULTIPLE extends true ? ITEM[] : ITEM) | null | undefined;
export declare type OptionForCreate = {
    label: string;
    __optionForCreate: boolean;
};
export declare type SelectProps<ITEM, GROUP, MULTIPLE extends boolean> = {
    getItemGroupKey?: GetItemGroupKey<ITEM> | undefined;
    getGroupKey?: GetGroupKey<GROUP>;
    sortGroups?: SortGroups<ITEM, GROUP>;
    groups?: GROUP[];
    items: ITEM[];
    dropdownRef: React.MutableRefObject<HTMLDivElement | null>;
    controlRef: React.MutableRefObject<HTMLDivElement | null>;
    disabled?: boolean;
    selectAll?: boolean;
    getItemLabel: (item: ITEM) => string;
    getItemKey: (item: ITEM) => string | number;
    getItemDisabled?: (item: ITEM) => boolean | undefined;
    searchFunction?: (item: ITEM, searchValue: string) => boolean;
    onCreate?: (label: string, props: {
        e: React.SyntheticEvent;
        label: string;
    }) => void;
    onFocus?: React.FocusEventHandler<HTMLInputElement>;
    onBlur?: React.FocusEventHandler<HTMLInputElement>;
    multiple: boolean;
    searchValue?: string;
    onChange: OnChangeProp<ITEM, MULTIPLE>;
    value: ValueProp<ITEM, MULTIPLE>;
    dropdownOpen?: boolean;
    onDropdownOpen?: (isOpen: boolean) => void;
    onSearchValueChange?: (value: string) => void;
    ignoreOutsideClicksRefs?: ReadonlyArray<React.RefObject<HTMLElement>>;
};
export declare type OptionProps<ITEM> = {
    index: number;
    item: ITEM | OptionForCreate | SelectAllItem;
    keyPrefix: number;
};
export declare type GetOptionPropsResult = {
    onClick: (e: React.SyntheticEvent) => void;
    onMouseEnter: (e: React.SyntheticEvent) => void;
    active: boolean;
    hovered: boolean;
    key: string | number;
};
export declare const isOptionForCreate: <ITEM, GROUP>(params: OptionForCreate | ITEM | Group<ITEM, GROUP>) => params is OptionForCreate;
export declare const isNotOptionForCreate: <ITEM, GROUP>(params: OptionForCreate | Group<ITEM, GROUP>) => params is Group<ITEM, GROUP>;
export declare const isOptionForSelectAll: <ITEM>(params: SelectAllItem | ITEM) => params is SelectAllItem;
export declare function useSelect<ITEM, GROUP, MULTIPLE extends boolean>(params: SelectProps<ITEM, GROUP, MULTIPLE>): {
    isOpen: boolean;
    isFocused: boolean;
    highlightedIndex: number;
    visibleItems: (OptionForCreate | CountedGroup<ITEM, GROUP>)[];
    highlightIndex: (indexForHighlight: IndexForHighlight, scrollToHighlighted: boolean) => void;
    getOptionProps: ({ index, item, keyPrefix, }: OptionProps<ITEM>) => GetOptionPropsResult;
    handleInputFocus: (e: React.FocusEvent<HTMLInputElement>) => void;
    handleInputBlur: (e: React.FocusEvent<HTMLInputElement>) => void;
    handleToggleDropdown: () => void;
    handleInputClick: () => void;
    inputRef: React.RefObject<HTMLInputElement>;
    getKeyProps: (rest?: import("../../../hooks/useKeysDepricated").KeyProps | undefined) => import("../../../hooks/useKeysDepricated").KeyProps;
    handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
    searchValue: string;
    clearValue: (e: React.SyntheticEvent) => void;
    getHandleRemoveValue: (item: ITEM) => (e: React.SyntheticEvent) => void;
    notFound: boolean;
    hasItems: boolean;
    allItemsSelected: boolean;
    optionsRefs: React.RefObject<HTMLDivElement>[];
};
export {};
