import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import * as i0 from "@angular/core";
/**
 * @description Diretiva de máscara de entrada para campos de texto.
 *
 * Aplique `[sInputMask]` em qualquer `<input>` para aplicar uma máscara de formatação,
 * guiando a entrada do usuário com um padrão definido. Implementa ControlValueAccessor
 * e Validator para integração nativa com Angular Forms.
 *
 * **Slots de máscara:**
 * - `9` — dígito (0-9)
 * - `a` — letra (conforme `characterPattern`, padrão `[A-Za-z]`)
 * - `*` — alfanumérico (letra ou dígito)
 * - Outros caracteres são tratados como literais (ex: `.`, `-`, `/`, `(`, `)`)
 * - `?` — tudo após esse ponto na máscara é opcional
 *
 * @example
 * ```html
 * <!-- CPF -->
 * <input type="text" [sInputMask]="'999.999.999-99'" [(ngModel)]="cpf" />
 *
 * <!-- Telefone com unmask -->
 * <input type="text" [sInputMask]="'(99) 99999-9999'" [unmask]="true" [(ngModel)]="telefone" />
 * ```
 * @category Input
 */
export declare class InputMaskDirective implements OnInit, OnChanges, ControlValueAccessor, Validator {
    /**
     * Padrão da máscara. Slots: `9` (dígito), `a` (letra), `*` (alfanumérico).
     * Demais caracteres são literais. `?` torna o restante da máscara opcional.
     */
    mask: import("@angular/core").InputSignal<string | undefined>;
    /**
     * Caractere exibido nas posições ainda não preenchidas.
     * @default '_'
     */
    slotChar: import("@angular/core").InputSignal<string>;
    /**
     * Quando `true`, o modelo recebe apenas os caracteres digitados pelo usuário,
     * sem os literais da máscara. Quando `false`, o modelo recebe o valor completo
     * incluindo literais.
     * @default false
     */
    unmask: import("@angular/core").InputSignal<boolean>;
    /**
     * Expressão regular usada para validar o slot `a` (letra).
     * @default '[A-Za-z]'
     */
    characterPattern: import("@angular/core").InputSignal<string>;
    /**
     * Quando `true`, limpa o campo ao perder o foco se a máscara estiver incompleta.
     * @default true
     */
    autoClear: import("@angular/core").InputSignal<boolean>;
    /**
     * Emitido quando todos os slots obrigatórios da máscara estão preenchidos.
     * Emite o valor atual (mascarado ou não, conforme `unmask`).
     */
    maskComplete: import("@angular/core").OutputEmitterRef<string>;
    private readonly el;
    private readonly renderer;
    private tokens;
    private buffer;
    private wasComplete;
    private lastValue;
    private onChange;
    private onTouched;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    private buildMask;
    private parseMask;
    private resetBuffer;
    private isValidChar;
    private isEditable;
    private nextEditablePos;
    private prevEditablePos;
    private setCursor;
    private setInputValue;
    private getDisplayValue;
    private getBlurDisplayValue;
    /**
     * Returns the value that should be set on the model.
     * Returns null when the user has not typed anything.
     */
    private getModelValue;
    private clearRange;
    private isMaskComplete;
    private checkAndEmitComplete;
    private dispatchInputEvent;
    onKeyDown(event: KeyboardEvent): void;
    onFocus(_event: FocusEvent): void;
    onBlur(_event: Event): void;
    onPaste(event: ClipboardEvent): void;
    onClick(): void;
    writeValue(value: string | null): void;
    registerOnChange(onChange: (value: string | null) => void): void;
    registerOnTouched(onTouched: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    validate(control: AbstractControl): ValidationErrors | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<InputMaskDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputMaskDirective, "input[sInputMask]", never, { "mask": { "alias": "sInputMask"; "required": false; "isSignal": true; }; "slotChar": { "alias": "slotChar"; "required": false; "isSignal": true; }; "unmask": { "alias": "unmask"; "required": false; "isSignal": true; }; "characterPattern": { "alias": "characterPattern"; "required": false; "isSignal": true; }; "autoClear": { "alias": "autoClear"; "required": false; "isSignal": true; }; }, { "maskComplete": "maskComplete"; }, never, never, true, never>;
}
