export type Source = (opts: { query?: string; active?: boolean; }) => PromiseLike | undefined; interface Base { value?: I | I[]; limit?: number | string; min?: number; keepOpened?: boolean; keepQuery?: boolean; onText: (text: string) => void; onChange: (value: I[], done?: () => void) => void; onSelect: (value: I, meta: Meta) => void; } interface Meta extends Omit, 'value'> { setOpened: (opened: boolean) => void; value: I[]; valueProperty?: string; } export interface Props extends Base { text?: string; source: I[] | Source; textProperty?: string; textual?: (prop?: string) => (i: I) => string; valueProperty?: string; disabled?: boolean; preserveOrder?: boolean; defaultIndex?: number; externalSearch?: boolean; lazyOpen?: boolean; } export declare const useAutocomplete: ({ value: _value, text, onChange: _onChange, onText: _onText, onSelect, limit: _limit, min: _min, source, textProperty, textual: _textual, valueProperty, keepOpened, keepQuery, preserveOrder, defaultIndex, externalSearch, disabled, lazyOpen, }: Props) => { limit: number | undefined; opened: boolean; query: string | undefined; textual: (i: I) => string; value: I[]; source$: Promise; loading: boolean; items: I[]; onToggle: (e: Event) => void; onText: (e: InputEvent) => void; onSelect: (newVal: I) => void; onDeselect: (val: I | I[]) => void; defaultIndex: number | undefined; }; export type RProps = ReturnType>; export {};