import { OnInit } from '@angular/core';
import { FormGroup, FormGroupDirective } from '@angular/forms';
import { Observable, Subject } from 'rxjs';
import type { NxFormFieldComponent } from './form-field/form-field.component';
import * as i0 from "@angular/core";
type UnknownRecord = Record<string, unknown>;
type CompareFn = (a: any, b: any, formGroup: FormGroup) => boolean;
/** Directive for tracking form state and changes.
 *
 * Apply to `<form>` elements with bound form groups.
 */
export declare class NxFormObserverDirective implements OnInit {
    private initialValue;
    private initialValue$;
    /** Value to compare against for form changes and to revert to on reset.
     *
     * Defaults to the initial form value at `ngOnInit`.
     */
    set _initialFormValue(value: UnknownRecord);
    initialFormValueChange: Observable<UnknownRecord>;
    /** Recursively check FormControl values for equality */
    private formGroupStrictEquality;
    /** Function to use to compare individual form control values.
     *
     * Defaults to `===` strict equality.
     */
    compareFn: import("@angular/core").InputSignal<CompareFn>;
    formChanged: import("@angular/core").WritableSignal<boolean>;
    formDisabled: import("@angular/core").WritableSignal<boolean>;
    private _formFields;
    formFields: {
        set: (value: NxFormFieldComponent[]) => void;
        update: (updateFn: (value: NxFormFieldComponent[]) => NxFormFieldComponent[]) => void;
    };
    /** Whether any form fields within the form have a visible error. */
    hasErrorState: import("@angular/core").Signal<boolean>;
    form: FormGroupDirective;
    private destroyRef;
    ngOnInit(): void;
    updateInitialValue(): void;
    reset$: Subject<void>;
    reset(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NxFormObserverDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NxFormObserverDirective, "[nxFormObserver]", ["nxFormObserver"], { "_initialFormValue": { "alias": "initialFormValue"; "required": false; }; "compareFn": { "alias": "compareFn"; "required": false; "isSignal": true; }; }, { "initialFormValueChange": "initialFormValueChange"; }, never, never, true, never>;
}
export {};
