import { type InputMask, type InputMaskElement, type FactoryArg } from 'imask';
import { ElementRef, Provider, EventEmitter, OnDestroy, OnChanges, AfterViewInit, SimpleChanges } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import * as i0 from "@angular/core";
export type Falsy = false | 0 | "" | null | undefined;
export declare const MASKEDINPUT_VALUE_ACCESSOR: Provider;
export type Value<Opts extends FactoryArg, Unmask extends ('typed' | boolean)> = Unmask extends 'typed' ? InputMask<Opts>['typedValue'] : Unmask extends Falsy ? InputMask<Opts>['value'] : InputMask<Opts>['unmaskedValue'];
export declare const DEFAULT_IMASK_ELEMENT: (elementRef: any) => any;
export declare class IMaskDirective<Opts extends FactoryArg, Unmask extends ('typed' | boolean) = false, V = Value<Opts, Unmask>> implements ControlValueAccessor, AfterViewInit, OnDestroy, OnChanges {
    maskRef?: InputMask<Opts>;
    onTouched: any;
    onChange: any;
    private _viewInitialized;
    private _initialValue;
    private _composing;
    private _writingValue;
    private _writing;
    private _elementRef;
    private _renderer;
    private _factory;
    private _platformId;
    private _compositionMode;
    imask?: Opts;
    unmask?: Unmask;
    imaskElement: (elementRef: ElementRef, directiveRef: any) => InputMaskElement;
    accept: EventEmitter<V>;
    complete: EventEmitter<V>;
    get element(): InputMaskElement;
    get maskValue(): V;
    set maskValue(value: V);
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    destroyMask(): void;
    ngOnDestroy(): void;
    beginWrite(value: V): void;
    endWrite(): V;
    writeValue(value: V): void;
    _onAccept(): void;
    _onComplete(): void;
    private initMask;
    setDisabledState(isDisabled: boolean): void;
    registerOnChange(fn: (_: any) => void): void;
    registerOnTouched(fn: () => void): void;
    _handleInput(value: any): void;
    _compositionStart(): void;
    _compositionEnd(value: any): void;
    private _isAndroid;
    static ɵfac: i0.ɵɵFactoryDeclaration<IMaskDirective<any, any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<IMaskDirective<any, any, any>, "[imask]", ["imask"], { "imask": { "alias": "imask"; "required": false; }; "unmask": { "alias": "unmask"; "required": false; }; "imaskElement": { "alias": "imaskElement"; "required": false; }; }, { "accept": "accept"; "complete": "complete"; }, never, never, true, never>;
}