import React from "react";
import { type InputProps } from "./Input";
import type { PaginationInterface } from "../../interfaces";
export interface SearchSelectOption {
    label: string;
    value?: string;
    description?: string | number;
    icon?: string;
}
export interface SearchSelectInputProps<T = SearchSelectOption, K = string> extends Omit<InputProps, "onChange" | "value" | "ref"> {
    value?: T | K | string;
    /**
     * Callback cuando cambia el valor del input.
     * Recibe la opción completa (T) si no hay getOptionValue, o el valor extraído (K) si hay getOptionValue.
     * También es compatible con react-hook-form: acepta el onChange estándar de HTML.
     */
    onChange?: ((value: T | K) => void) | React.ChangeEventHandler<HTMLInputElement>;
    /**
     * Función que realiza la búsqueda y devuelve un Promise con los resultados
     */
    onSearchPromiseFn: (text: string) => Promise<Array<T> | PaginationInterface<T>>;
    /**
     * Función que busca un elemento individual usando su valor (K).
     * Se usa cuando hay un valor por defecto que no está presente en las opciones cargadas.
     * Recibe el valor (K) y devuelve una Promise con el objeto completo (T) o undefined si no se encuentra.
     */
    onSingleSearchPromiseFn: (value: K) => Promise<T | undefined>;
    /**
     * Callback al seleccionar una opción. Devuelve el item completo (T) y el valor mapeado (K)
     */
    onSelectOption?: (option: T, value: K) => void;
    /**
     * Título del dialog de selección. Por defecto "Seleccione una opción"
     */
    dialogTitle?: string;
    /**
     * Posición del botón de búsqueda. Por defecto "right"
     */
    icon?: string;
    iconPosition?: "left" | "right";
    /**
     * Texto a mostrar cuando no hay resultados
     */
    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 abrir el diálogo de selección.
     * Por defecto es false.
     */
    readOnly?: boolean;
}
export declare const SearchSelectInput: <T = SearchSelectOption, K = string>(props: SearchSelectInputProps<T, K> & {
    ref?: React.ForwardedRef<HTMLInputElement>;
}) => React.ReactElement;
//# sourceMappingURL=SearchSelectInput.d.ts.map