import { ReactNode } from 'react';
import { TextFieldProps } from '../../../components/TextField';
import { DistributiveOmit } from '../../../types';
export type TypeaheadTextFieldOption<T = string> = {
    label: string;
    value: T;
};
type LoadOptionsResult<T> = TypeaheadTextFieldOption<T>[] | Promise<TypeaheadTextFieldOption<T>[]>;
export type TypeaheadTextFieldProps<T = string> = DistributiveOmit<TextFieldProps, "value" | "defaultValue" | "onChange" | "suffix"> & {
    /**
     * Controlled input value.
     */
    value?: string;
    /**
     * Default input value for uncontrolled mode.
     */
    defaultValue?: string;
    /**
     * Fired whenever the input value changes (from typing, selection, or clear).
     */
    onChange?: (value: string) => void;
    /**
     * Returns suggestions for the current input value.
     * May be synchronous or return a Promise.
     */
    loadOptions: (search: string) => LoadOptionsResult<T>;
    /**
     * Fired when a suggestion is selected from the menu.
     */
    onSelectOption?: (option: TypeaheadTextFieldOption<T>) => void;
    /**
     * Debounce in ms between an input change and the loadOptions call.
     * @default 300
     */
    debounceMs?: number;
    /**
     * Label shown when there are no suggestions to render.
     * @default "No suggestions found"
     */
    noSuggestionsLabel?: string;
    /**
     * Label shown while suggestions are loading and there are no options yet.
     * @default "Loading..."
     */
    loadingLabel?: string;
    /**
     * Custom renderer for the label of an option row.
     */
    renderOption?: (option: TypeaheadTextFieldOption<T>) => ReactNode;
    /**
     * If true, the suggestion menu opens whenever the input is focused and has
     * a non-empty value.
     * @default true
     */
    openOnFocus?: boolean;
    /**
     * If true, also opens the menu on focus/click when the input is empty.
     * Useful for "show all" style menus that don't require pre-typing.
     * @default false
     */
    openOnEmptyFocus?: boolean;
};
/**
 * TypeaheadTextField component — a text input that shows an async
 * suggestion menu as the user types.
 *
 * Features:
 * - `loadOptions` fetches suggestions (sync or async) for the current input
 * - Debounced fetching via `debounceMs`
 * - Custom suggestion rendering via `renderOption`
 * - Configurable open-on-focus behavior, including for an empty input
 * - Loading and no-suggestions states with customizable labels
 * - All standard TextField props (label, hint, error, prefix, etc.)
 *
 * @example
 * <TypeaheadTextField
 *   label="City"
 *   loadOptions={(search) => fetchCities(search)}
 *   onSelectOption={(option) => console.log(option)}
 * />
 */
export declare function TypeaheadTextField<T = string>({ value: valueProp, defaultValue, onChange, loadOptions, onSelectOption, debounceMs, noSuggestionsLabel, loadingLabel, renderOption, openOnFocus, openOnEmptyFocus, onFocus, onBlur, onKeyDown, onClick, disabled, readOnly, loading: loadingProp, ...textFieldProps }: TypeaheadTextFieldProps<T>): import("react/jsx-runtime").JSX.Element;
export declare namespace TypeaheadTextField {
    var displayName: string;
}
export {};
