import * as i0 from '@angular/core';
import { OnInit, OnDestroy, ModuleWithProviders, EnvironmentProviders } from '@angular/core';
import { NgxsPlugin, NgxsNextPluginFn } from '@ngxs/store/plugins';

declare class NgxsFormDirective implements OnInit, OnDestroy {
    path: string;
    set debounce(debounce: string | number);
    get debounce(): string | number;
    private _debounce;
    set clearDestroy(val: boolean);
    get clearDestroy(): boolean;
    private _clearDestroy;
    private _updating;
    private _actions$;
    private _store;
    private _formGroupDirective;
    private _cd;
    private readonly _destroy$;
    ngOnInit(): void;
    updateFormStateWithRawValue(withFormStatus?: boolean): void;
    ngOnDestroy(): void;
    private debounceChange;
    private get form();
    private getStateStream;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxsFormDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NgxsFormDirective, "[ngxsForm]", never, { "path": { "alias": "ngxsForm"; "required": false; }; "debounce": { "alias": "ngxsFormDebounce"; "required": false; }; "clearDestroy": { "alias": "ngxsFormClearOnDestroy"; "required": false; }; }, {}, never, never, true, never>;
}

declare class NgxsFormPluginModule {
    static forRoot(): ModuleWithProviders<NgxsFormPluginModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxsFormPluginModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NgxsFormPluginModule, never, [typeof NgxsFormDirective], [typeof NgxsFormDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NgxsFormPluginModule>;
}
declare function withNgxsFormPlugin(): EnvironmentProviders;

declare class NgxsFormPlugin implements NgxsPlugin {
    handle(state: any, event: any, next: NgxsNextPluginFn): any;
    private joinPathWithPropertyPath;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxsFormPlugin, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NgxsFormPlugin>;
}

declare class UpdateFormStatus {
    payload: {
        status: string | null;
        path: string;
    };
    static readonly type = "[Forms] Update Form Status";
    constructor(payload: {
        status: string | null;
        path: string;
    });
}
declare class UpdateFormValue {
    payload: {
        value: any;
        path: string;
        propertyPath?: string;
    };
    static readonly type = "[Forms] Update Form Value";
    constructor(payload: {
        value: any;
        path: string;
        propertyPath?: string;
    });
}
declare class UpdateForm {
    payload: {
        value: any;
        errors: {
            [k: string]: string;
        } | null;
        dirty: boolean | null;
        status: string | null;
        path: string;
    };
    static readonly type = "[Forms] Update Form";
    constructor(payload: {
        value: any;
        errors: {
            [k: string]: string;
        } | null;
        dirty: boolean | null;
        status: string | null;
        path: string;
    });
}
declare class UpdateFormDirty {
    payload: {
        dirty: boolean | null;
        path: string;
    };
    static readonly type = "[Forms] Update Form Dirty";
    constructor(payload: {
        dirty: boolean | null;
        path: string;
    });
}
declare class SetFormDirty {
    payload: string;
    static readonly type = "[Forms] Set Form Dirty";
    constructor(payload: string);
}
declare class SetFormPristine {
    payload: string;
    static readonly type = "[Forms] Set Form Pristine";
    constructor(payload: string);
}
declare class UpdateFormErrors {
    payload: {
        errors: {
            [k: string]: string;
        } | null;
        path: string;
    };
    static readonly type = "[Forms] Update Form Errors";
    constructor(payload: {
        errors: {
            [k: string]: string;
        } | null;
        path: string;
    });
}
declare class SetFormDisabled {
    payload: string;
    static readonly type = "[Forms] Set Form Disabled";
    constructor(payload: string);
}
declare class SetFormEnabled {
    payload: string;
    static readonly type = "[Forms] Set Form Enabled";
    constructor(payload: string);
}
declare class ResetForm {
    payload: {
        path: string;
        value?: any;
    };
    static readonly type = "[Forms] Reset Form";
    constructor(payload: {
        path: string;
        value?: any;
    });
}

export { NgxsFormDirective, NgxsFormPlugin, NgxsFormPluginModule, ResetForm, SetFormDirty, SetFormDisabled, SetFormEnabled, SetFormPristine, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue, withNgxsFormPlugin };
