import { AddonConfig } from '../../addon-config';
import { FieldConfig } from './field';
type stringFn = () => string;
type booleanFn = () => boolean;
/**
 * Configuração para campos de texto simples.
 *
 * Use `type: 'string'` para texto livre geral.
 * Use `type: 'binary'` para campos que armazenam dados binários como texto (ex: base64).
 *
 * Suporta máscaras de entrada, addons laterais, filtro de caracteres e eventos do input.
 */
export interface TextFieldConfig extends FieldConfig {
    /**
     * `'string'` — campo de texto livre padrão.
     * `'binary'` — campo de texto tratado como dado binário (ex: base64 encoding).
     */
    type: 'string' | 'binary';
    /**
     * Máscara de entrada aplicada ao campo. Pode ser uma string fixa ou uma função que retorna a máscara dinamicamente.
     * Exemplo de máscara: `'999.999.999-99'` (CPF), `'(99) 99999-9999'` (telefone).
     * Quando definida, `leftAddon` e `rightAddon` não funcionam.
     */
    mask?: stringFn | string;
    /**
     * Função que retorna `true` quando o campo deve estar em modo somente-leitura.
     * Use uma função para controle dinâmico baseado no estado do formulário.
     * @example () => !this.model.editavel
     */
    readonly?: () => boolean;
    /**
     * Padrão regex para filtrar os caracteres permitidos na digitação.
     * Pode ser uma string de pattern ou uma função que retorna o padrão.
     * Exemplo: `'[a-zA-Z]'` permite apenas letras.
     */
    characterPattern?: stringFn | string;
    /**
     * Quando `true`, remove os caracteres da máscara do valor enviado ao modelo.
     * Exemplo: com máscara CPF `'999.999.999-99'`, o valor armazenado será apenas os dígitos.
     */
    unmask?: booleanFn | boolean;
    /**
     * Tipo HTML do input (ex: `'text'`, `'email'`, `'tel'`, `'url'`).
     * Afeta o teclado exibido em dispositivos móveis e a validação nativa do browser.
     */
    inputType?: string;
    /**
     * Filtro de teclas aceitas no campo. Aceita uma expressão regular ou string.
     * Exemplo: `/[0-9]/` para aceitar apenas números.
     */
    keyFilter?: any;
    /**
     * Addon exibido à esquerda do input (ex: ícone, texto, botão).
     * **Não funciona quando `mask` está definida.**
     */
    leftAddon?: AddonConfig;
    /**
     * Addon exibido à direita do input (ex: ícone, texto, botão).
     * **Não funciona quando `mask` está definida.**
     */
    rightAddon?: AddonConfig;
    /**
     * Número máximo de caracteres permitidos no campo.
     */
    maxLength?: string | number;
    /**
     * Controla o autocomplete nativo do browser.
     * `true` ativa o autocomplete; `false` desativa.
     */
    browserAutocomplete?: boolean;
    /**
     * Estilos CSS inline aplicados diretamente no elemento de input.
     */
    style?: {
        [klass: string]: any;
    };
    /**
     * Callback chamado quando o campo perde o foco.
     */
    onBlur?: (event: Event) => void;
    /**
     * Callback chamado quando o campo recebe foco.
     */
    onFocus?: (event: FocusEvent) => void;
    /**
     * Callback chamado quando a máscara é completamente preenchida.
     */
    onComplete?: (event: FocusEvent) => void;
    /**
     * Callback chamado a cada alteração no valor do input.
     */
    onInput?: (event: FocusEvent) => void;
}
declare module './field' {
    interface FieldTypeMap {
        string: TextFieldConfig;
        binary: TextFieldConfig;
    }
}
export {};
