import React from "react";
import type { InputProps } from "./Input";
export interface AutocompleteOption {
    label: string;
    value: string;
    description?: string | number;
    icon?: string;
}
export interface AutocompleteInputProps<T = AutocompleteOption, K = string> extends Omit<InputProps, "onChange" | "value" | "ref"> {
    options: T[];
    value?: string;
    /**
     * Valor de texto del input (controlado)
     * Puede ser un ChangeEventHandler (de register) o una función que recibe string (API personalizada)
     */
    onChange?: React.ChangeEventHandler<HTMLInputElement> | ((value: string) => void);
    /**
     * Callback al seleccionar una opción. Devuelve el item completo (T) y el valor mapeado (K)
     */
    onSelectOption?: (option: T, value: K) => void;
    noResultsText?: string;
    /**
     * Obtiene el label que se muestra para cada opción. Por defecto usa la propiedad "label".
     */
    getOptionLabel?: (item: T) => string;
    /**
     * Obtiene el valor que se devuelve al seleccionar una opción. Por defecto usa la propiedad "value".
     */
    getOptionValue?: (item: T) => K;
    /**
     * Obtiene la descripción opcional para cada opción. Por defecto usa la propiedad "description".
     */
    getOptionDescription?: (item: T) => string | number | undefined;
    /**
     * Renderizado personalizado de cada opción. Si se define, se ignora el render por defecto.
     */
    renderOption?: (item: T) => React.ReactNode;
    /**
     * Si es true, el input será de solo lectura. No se podrá modificar ni desplegar las opciones.
     * Por defecto es false.
     */
    readOnly?: boolean;
}
export declare const AutocompleteInput: <T = AutocompleteOption, K = string>(props: AutocompleteInputProps<T, K> & {
    ref?: React.ForwardedRef<HTMLInputElement>;
}) => React.ReactElement;
//# sourceMappingURL=AutocompleteInput.d.ts.map