import { OnInit } from '@angular/core';
import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import * as i0 from "@angular/core";
/**
 * Numeric mask directive with internationalization support.
 *
 * Formats numeric values according to the specified locale, applying
 * appropriate thousand and decimal separators, with support for negative values,
 * min/max decimal places control, and scientific notation.
 *
 * @example
 * ```html
 * <input
 *   type="text"
 *   sNumericMask
 *   [locale]="'pt-BR'"
 *   [minDecimalPlaces]="2"
 *   [maxDecimalPlaces]="2"
 *   [allowNegative]="true"
 *   [(ngModel)]="value"
 * />
 * ```
 */
export declare class NumericMaskDirective implements OnInit, ControlValueAccessor, Validator {
    /**
     * Locale for formatting (e.g. 'pt-BR', 'en-US', 'de-DE')
     * If not provided, uses the locale from LocaleService
     */
    locale: import("@angular/core").InputSignal<string | undefined>;
    /**
     * Minimum number of decimal places to display
     * @default 0
     */
    minDecimalPlaces: import("@angular/core").InputSignal<number>;
    /**
     * Maximum number of decimal places allowed
     * @default 10
     */
    maxDecimalPlaces: import("@angular/core").InputSignal<number>;
    /**
     * Allows negative values
     * @default false
     */
    allowNegative: import("@angular/core").InputSignal<boolean>;
    /**
     * Enables scientific notation support
     * @default true
     */
    allowScientificNotation: import("@angular/core").InputSignal<boolean>;
    /**
     * Text alignment in input
     * @default 'right'
     */
    textAlign: import("@angular/core").InputSignal<"left" | "right">;
    /**
     * Minimum value allowed
     */
    min: import("@angular/core").InputSignal<number | undefined>;
    /**
     * Maximum value allowed
     */
    max: import("@angular/core").InputSignal<number | undefined>;
    private readonly elementRef;
    private readonly renderer;
    private readonly localeService;
    private onChange;
    private onTouched;
    private decimalSeparator;
    private thousandSeparator;
    private currentLocale;
    private lastModelValue;
    constructor();
    ngOnInit(): void;
    /**
     * Listener for input events (typing)
     */
    onInput(event: Event): void;
    /**
     * Listener for focus events (gaining focus)
     */
    onFocus(): void;
    /**
     * Listener for blur events (focus loss)
     */
    onBlur(): void;
    /**
     * Listener for paste events (clipboard)
     */
    onPaste(event: ClipboardEvent): void;
    /**
     * Listener for special keys (+ and -)
     */
    onKeyDown(event: KeyboardEvent): void;
    /**
     * Listener for keypress to block invalid characters
     */
    onKeyPress(event: KeyboardEvent): void;
    /**
     * Updates separators according to the locale
     * @private
     */
    private updateSeparators;
    /**
     * Processes input value and updates the input and model
     * @private
     */
    private processInputValue;
    /**
     * Sets inputmode for numeric keyboard on mobile devices
     * @private
     */
    private setInputMode;
    /**
     * Removes separators from a formatted value
     * @private
     */
    private removeSeparators;
    /**
     * Strips unnecessary trailing zeros from decimal part
     * @private
     */
    private stripTrailingZeros;
    /**
     * Normalizes separators during typing
     * @private
     */
    private normalizeSeparators;
    /**
     * Escapes special characters for use in regex
     * @private
     */
    private escapeRegex;
    /**
     * Truncates a number to the specified decimal places (never rounds)
     * @private
     */
    private truncateToDecimalPlaces;
    /**
     * Checks if the value has excessive decimal places
     * @private
     */
    private hasExcessiveDecimalPlaces;
    /**
     * Clears the input and notifies the model
     * @private
     */
    private clearInput;
    /**
     * Parses a string value to its numeric representation, handling separators and sign
     * Returns BigNumber to preserve full precision and optional number conversion
     * @private
     */
    private parseStringToValue;
    /**
     * Formats a numeric value according to the locale
     * Truncates (never rounds) to maxDecimalPlaces for display purposes only
     * @private
     */
    private formatNumeric;
    /**
     * Formats the value according to the locale
     * @private
     */
    private formatValue;
    /**
     * Converts the formatted value to the model format (international standard string)
     * Always returns decimal notation, never scientific notation
     * Stores the full precision value without truncation
     * @private
     */
    private toModelValue;
    /**
     * Converts the model value to display format
     * @private
     */
    private fromModelValue;
    /**
     * Processes pasted value from clipboard
     * Converts scientific notation to decimal using BigNumber
     * @private
     */
    private parseClipboardValue;
    /**
     * Toggles the sign (- or +) of a value
     * @private
     */
    private toggleSign;
    writeValue(value: string | null): void;
    registerOnChange(fn: (value: string | null) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    validate(control: AbstractControl): ValidationErrors | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<NumericMaskDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NumericMaskDirective, "[sNumericMask]", never, { "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "minDecimalPlaces": { "alias": "minDecimalPlaces"; "required": false; "isSignal": true; }; "maxDecimalPlaces": { "alias": "maxDecimalPlaces"; "required": false; "isSignal": true; }; "allowNegative": { "alias": "allowNegative"; "required": false; "isSignal": true; }; "allowScientificNotation": { "alias": "allowScientificNotation"; "required": false; "isSignal": true; }; "textAlign": { "alias": "textAlign"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}
