import { Injector, OnDestroy, Provider, TemplateRef } from '@angular/core';
import { Subject } from 'rxjs';
import { CoreBaseComponent } from '../../../common/base.component';
import { FormFieldAggregatable, FormFieldAggregator } from '../form-field-aggregator';
import * as i0 from "@angular/core";
/**
 * Provider that hides any existing ControlContainers from NgModel
 */
export declare const nullFormProvider: Provider;
/**
 * Provider for the form field aggregator token
 */
export declare const fieldAggregationProvider: Provider;
export interface FormStatus {
    dirty: boolean;
    pending: boolean;
    touched: boolean;
    valid: boolean;
}
/**
 * Component used to force NgModel's in this controls content behave in standalone mode.
 * That is, isolated from external form control containers.
 */
export declare class FormFieldIsolatorComponent extends CoreBaseComponent implements FormFieldAggregator, OnDestroy {
    /**
     * The source name to use for logging
     */
    protected get logSourceName(): string;
    /**
     * Indicates if all the fields connected to this isolator are valid
     */
    get isValid(): boolean;
    /**
     * Indicates if any field connected to this isolator are invalid
     */
    get isInvalid(): boolean;
    /**
     * Indicates if any field connected to this isolator is pending
     */
    get isPending(): boolean;
    /**
     * Indicates if all the fields connected to this isolator are valid
     */
    private status;
    /**
     * The template ref of a subform of this component. The way this template ref is used varies form field to field
     */
    subFieldTemplate: TemplateRef<any>;
    /**
     * Event for listening to validity changes
     */
    statusChanged: Subject<FormStatus>;
    /**
     * The fields registered with this control
     */
    private formFields;
    /**
     * Initializes a new instance of the JsonFormFieldComponent
     */
    constructor(injector: Injector);
    ngOnDestroy(): void;
    /**
     * Adds a form field to isolated state tracking
     */
    addFormField(field: FormFieldAggregatable): void;
    /**
     * Removes a form field from isolated state tracking
     */
    removeFormField(field: FormFieldAggregatable): void;
    /**
     * updates the status of this field
     * @debounce is used to throttle calls to this function.
     * Only the last call will trigger a status change when multiple calls are fired in quick succession from registered fields.
     */
    updateStatus(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldIsolatorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldIsolatorComponent, "sme-form-field-isolator,sme-array-item", never, {}, {}, ["subFieldTemplate"], never, false, never>;
}
