import { Observable } from 'rxjs';
import { FieldConfig } from './field';
/**
 * Configuração para campo de autocompletar.
 *
 * Exibe um input de texto que sugere opções enquanto o usuário digita, buscando os dados
 * via Observable. Suporta seleção simples ou múltipla e personalização do campo exibido.
 */
export interface AutocompleteFieldConfig extends FieldConfig {
    /** Tipo do campo: sempre `'autocomplete'`. */
    type: 'autocomplete';
    /**
     * Chave única de cada item da lista de sugestões. Usada para identificar o objeto selecionado.
     * @example 'id'
     */
    dataKey?: string;
    /**
     * Nome da propriedade do objeto de sugestão que será exibida como texto na lista e no input.
     * @example 'nome'
     */
    displayField?: string;
    /**
     * Quando `true`, permite seleção de múltiplos itens exibidos como tags/chips.
     */
    multiple?: boolean;
    /**
     * Elemento DOM ao qual o painel de sugestões será anexado.
     * Use `'body'` para evitar problemas de overflow em containers com `overflow: hidden`.
     */
    appendTo?: string;
    /**
     * Mensagem exibida quando nenhuma sugestão é encontrada para o texto digitado.
     */
    emptyMessage?: string;
    /**
     * Observable que emite a lista de sugestões em resposta à digitação do usuário.
     * Deve emitir um array de objetos com pelo menos a propriedade `displayField`.
     */
    suggestionsObservable?: Observable<any>;
    /**
     * Callback chamado quando o usuário seleciona um item da lista de sugestões.
     */
    onSelect?: (event: any) => void;
    /**
     * Callback chamado quando o usuário remove um item selecionado (modo múltiplo).
     */
    onUnselect?: (event: any) => void;
    /**
     * Callback chamado quando o usuário limpa o campo.
     */
    onClear?: (event: any) => void;
    /**
     * Callback chamado a cada alteração no texto digitado. Use para disparar a busca de sugestões.
     * @example (value) => this.loadSuggestions(value)
     */
    onSearch?: (value: string) => void;
    /**
     * Callback chamado quando o campo perde o foco.
     */
    onBlur?: (event: FocusEvent) => void;
}
declare module './field' {
    interface FieldTypeMap {
        autocomplete: AutocompleteFieldConfig;
    }
}
