import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
import { Subject } from 'rxjs';
import { NzSchema } from '../interfaces/nz-schema';
import { SchemaContext } from './schema-context';
import { SchemaFormBuilder } from './schema-form-builder';
export type UpdateSchemaFun = (schema: NzSchema) => NzSchema;
export declare abstract class AbstractSchemaControl extends AbstractControl {
    schemaContext: SchemaContext;
    onUpdateSchema$: Subject<NzSchema>;
    abstract updateSchema(schemaOrFun: NzSchema | UpdateSchemaFun): void;
}
export declare class SchemaFormControl extends UntypedFormControl implements AbstractSchemaControl {
    schemaContext: SchemaContext;
    onUpdateSchema$: Subject<NzSchema>;
    get updateSchema(): (schemaOrFun: NzSchema | UpdateSchemaFun) => void;
    get(path: Array<string | number> | string): AbstractSchemaControl | null;
    setValue(value: any, options?: {
        onlySelf?: boolean;
        emitEvent?: boolean;
        emitModelToViewChange?: boolean;
        emitViewToModelChange?: boolean;
    }): void;
}
export declare class SchemaFormGroup extends UntypedFormGroup implements AbstractSchemaControl {
    schemaContext: SchemaContext;
    controls: {
        [key: string]: AbstractSchemaControl;
    };
    onUpdateSchema$: Subject<NzSchema>;
    get updateSchema(): (schemaOrFun: NzSchema | UpdateSchemaFun) => void;
    get(path: Array<string | number> | string): AbstractSchemaControl | null;
}
export declare class SchemaFormArray extends UntypedFormArray implements AbstractSchemaControl {
    schemaContext: SchemaContext;
    controls: AbstractSchemaControl[];
    onUpdateSchema$: Subject<NzSchema>;
    onControlsChange: Subject<void>;
    _builder: SchemaFormBuilder;
    get updateSchema(): (schemaOrFun: NzSchema | UpdateSchemaFun) => void;
    get(path: Array<string | number> | string): AbstractSchemaControl | null;
    setValue(value: any[], options?: {
        onlySelf?: boolean;
        emitEvent?: boolean;
    }): void;
}
