import { PasswordStrengths } from '@seniorsistemas/angular-components/password-strength';
import { FieldConfig } from './field';
/**
 * Configuração para campo de senha com indicador de força.
 *
 * Renderiza um input de senha com:
 * - Togglear a visibilidade da senha (mostrar/ocultar)
 * - Indicador visual de força da senha (fraca/média/forte)
 * - Configuração customizada das regras de validação da força
 */
export interface PasswordFieldConfig extends FieldConfig {
    /** Tipo do campo: sempre `'password'`. */
    type: 'password';
    /**
     * Tipo HTML do input. @default 'password'
     */
    inputType?: string;
    /**
     * Filtro de teclas aceitas. Aceita regex, string ou qualquer valor aceito pelo componente.
     */
    keyFilter?: any;
    /**
     * Número máximo de caracteres permitidos.
     */
    maxLength?: string | number;
    /**
     * Quando `true`, exibe a barra de força da senha abaixo do campo.
     * Requer `passwordStrengthOptions` para personalizar as regras de avaliação.
     */
    passwordStrength: boolean;
    /**
     * Opções de configuração da barra de força da senha.
     * Obrigatório quando `passwordStrength: true`.
     */
    passwordStrengthOptions?: PasswordStrengthOptions;
    /**
     * Quando `true`, exibe o botão de alternar visibilidade da senha (olho/olho fechado).
     */
    showToggle: boolean;
    /**
     * Estilos CSS inline aplicados ao elemento de input.
     */
    style?: {
        [klass: string]: any;
    };
    /** Callback chamado quando o campo perde o foco. */
    onBlur?: (event: FocusEvent) => 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: Event) => void;
}
/**
 * Opções de configuração do indicador de força de senha.
 */
export interface PasswordStrengthOptions {
    /** Descrição exibida abaixo da barra de força. Ex: 'Use pelo menos 8 caracteres'. */
    description: string;
    /** Título exibido quando a senha é classificada como fraca. */
    weakTitle?: string;
    /** Título exibido quando a senha é classificada como média. */
    mediumTitle?: string;
    /** Título exibido quando a senha é classificada como forte. */
    strongTitle?: string;
    /**
     * Função customizada de validação da força da senha.
     * Recebe o valor atual do campo e deve retornar `PasswordStrengths`.
     * Se omitida, usa a validação padrão do componente.
     */
    validation?: (content: string) => PasswordStrengths;
}
declare module './field' {
    interface FieldTypeMap {
        password: PasswordFieldConfig;
    }
}
