import { UntypedFormControl } from '@angular/forms';
import { Observable, Subject, Subscription } from 'rxjs';
import { FormDefinition, FormType, RxapAbstractControlOptions, SetValueFn } from './model';
import { AsyncValidator, ControlEventOptions, ControlOptions, ControlState, EmitEvent, ExtractStrings, OnlySelf, OrBoxedValue, Validator } from './types';
export declare class RxapFormControl<T = any, E extends object = any, Parent extends object = any> extends UntypedFormControl {
    /**
     * @internal
     */
    get rxapFormDefinition(): (FormType<Parent> & FormDefinition<Parent>) | undefined;
    readonly value: T;
    readonly errors: E | null;
    readonly valueChanges: Observable<T>;
    readonly status: ControlState;
    readonly statusChanges: Observable<ControlState>;
    readonly initialState: OrBoxedValue<T>;
    private _readonly;
    private touchChanges;
    private dirtyChanges;
    readonly touch$: Observable<boolean>;
    readonly dirty$: Observable<boolean>;
    readonly value$: Observable<T>;
    readonly disabled$: Observable<boolean>;
    readonly enabled$: Observable<boolean>;
    get readonly(): boolean;
    set readonly(value: boolean);
    readonly status$: Observable<ControlState>;
    readonly errors$: Observable<E | null>;
    readonly controlId: string;
    private readonly _onSetValue;
    readonly stateChanges: Subject<void>;
    readonly readonly$: Observable<boolean>;
    get controlPath(): string;
    get fullControlPath(): string;
    constructor(formState: OrBoxedValue<T>, options: RxapAbstractControlOptions & {
        controlId: string;
    });
    setValue(valueOrObservable: Observable<T>, options?: ControlOptions): Subscription;
    setValue(valueOrObservable: T, options?: ControlOptions): void;
    patchValue(valueOrObservable: Observable<T>, options?: ControlOptions): Subscription;
    patchValue(valueOrObservable: T, options?: ControlOptions): void;
    disabledWhile(observable: Observable<boolean>, options?: ControlOptions): Subscription;
    enabledWhile(observable: Observable<boolean>, options?: ControlOptions): Subscription;
    mergeValidators(validators: Validator): void;
    mergeAsyncValidators(validators: AsyncValidator): void;
    markAsTouched(opts?: OnlySelf): void;
    markAsUntouched(opts?: OnlySelf): void;
    markAsPristine(opts?: OnlySelf): void;
    markAsDirty(opts?: OnlySelf): void;
    markAllAsDirty(): void;
    reset(formState?: OrBoxedValue<T>, options?: ControlEventOptions): void;
    setValidators(newValidator: Validator, updateValueAndValidity?: boolean): void;
    setAsyncValidators(newValidator: AsyncValidator, updateValueAndValidity?: boolean): void;
    validateOn(observableValidation: Observable<null | object>): Subscription;
    getError<K extends ExtractStrings<E>>(errorCode: K): E[K] | null;
    hasError<K extends ExtractStrings<E>>(errorCode: K): boolean;
    setErrors(errors: Partial<E> | null, opts?: EmitEvent): void;
    setError(key: string, value: any, opts?: EmitEvent): void;
    hasErrorAndTouched(error: ExtractStrings<E>): boolean;
    hasErrorAndDirty(error: ExtractStrings<E>): boolean;
    setEnable(enable?: boolean, opts?: ControlEventOptions): void;
    setDisable(disable?: boolean, opts?: ControlEventOptions): void;
    registerOnSetValue(setValueFn: SetValueFn<T>): void;
}
