import { OptionAccessor } from '../Shared/types'; export interface UseAutocompleteOptionsMultiple extends UseAutocompleteBaseOptions { multiple: true; controlledValue?: T[]; onChange?: (newValue: T[], name?: string) => void; } export interface UseAutocompleteOptionsSingle extends UseAutocompleteBaseOptions { multiple?: false; controlledValue?: T; onChange?: (newValue: T, name?: string) => void; } export interface UseAutocompleteBaseOptions { options?: (T | undefined | null)[]; fetcher?: (input?: string) => Promise; asyncMode?: 'fetch_in_open' | 'fetch_on_type'; disabled?: boolean; debounceDelay?: number; minCharacters?: number; optionLabel?: OptionAccessor; optionValue?: OptionAccessor; inputRef?: React.RefObject | (() => React.RefObject | undefined); onFetchingStart?: () => void; onFetchingEnd?: () => void; onTypeStart?: () => void; onOpen?: () => void; onClose?: () => void; isOpen?: boolean; subscribeOpenChange?: (cb: (open: boolean) => void) => (() => void) | undefined; name?: string; } export type UseAutocompleteOptions = UseAutocompleteOptionsMultiple | UseAutocompleteOptionsSingle; export declare function useAutocomplete(options?: UseAutocompleteOptions): { inputValue: string; setInputValue: import('react').Dispatch>; cleanInputValue: () => void; cleanOptions: () => void; clearValue: () => void; filteredOptions: T[]; isLoading: boolean; value: T | T[] | undefined; setValue: import('react').Dispatch>; onOptionClick: (option: T) => void; };