import { AbstractControl, FormArray, FormGroup } from '@angular/forms';
import { Subject } from 'rxjs/Subject';
export interface TitleMapItem {
    name?: string;
    value?: any;
    checked?: boolean;
    group?: string;
    items?: TitleMapItem[];
}
export interface ErrorMessages {
    [control_name: string]: {
        message: string | Function;
        code: string;
    }[];
}
export declare class JsonSchemaFormService {
    JsonFormCompatibility: boolean;
    ReactJsonSchemaFormCompatibility: boolean;
    AngularSchemaFormCompatibility: boolean;
    tpldata: any;
    ajvOptions: any;
    ajv: any;
    validateFormData: any;
    initialValues: any;
    schema: any;
    layout: any[];
    formGroupTemplate: any;
    formGroup: any;
    framework: any;
    data: any;
    validData: any;
    isValid: boolean;
    ajvErrors: any;
    validationErrors: any;
    dataErrors: any;
    formValueSubscription: any;
    dataChanges: Subject<any>;
    isValidChanges: Subject<any>;
    validationErrorChanges: Subject<any>;
    arrayMap: Map<string, number>;
    dataMap: Map<string, any>;
    dataRecursiveRefMap: Map<string, string>;
    schemaRecursiveRefMap: Map<string, string>;
    schemaRefLibrary: any;
    layoutRefLibrary: any;
    templateRefLibrary: any;
    hasRootReference: boolean;
    defaultGlobalSettings: any;
    globalSettings: any;
    getData(): any;
    getSchema(): any;
    getLayout(): any[];
    resetAllValues(): void;
    buildFormGroupTemplate(initialValues?: any, setValues?: boolean): void;
    /**
     * 'buildRemoteError' function
     *
     * Example errors:
     * {
     *   last_name: [ {
     *     message: 'Last name must by start with capital letter.',
     *     code: 'capital_letter'
     *   } ],
     *   email: [ {
     *     message: 'Email must be from example.com domain.',
     *     code: 'special_domain'
     *   }, {
     *     message: 'Email must contain an @ symbol.',
     *     code: 'at_symbol'
     *   } ]
     * }
     * @param {ErrorMessages} errors
     */
    buildRemoteError(errors: ErrorMessages): void;
    validateData(newValue: any, updateSubscriptions?: boolean): void;
    buildFormGroup(): void;
    buildLayout(widgetLibrary: any): void;
    setOptions(newOptions: any): void;
    compileAjvSchema(): void;
    buildSchemaFromData(data?: any, requireAllFields?: boolean): any;
    buildSchemaFromLayout(layout?: any): any;
    setTpldata(newTpldata?: any): void;
    parseText(text?: string, value?: any, values?: any, key?: number | string): string;
    setTitle(parentCtx?: any, childNode?: any, index?: number): string;
    initializeControl(ctx: any, bind?: boolean): boolean;
    formatErrors(errors: any, errorMessages?: any): string;
    updateValue(ctx: any, value: any): void;
    updateArrayCheckboxList(ctx: any, checkboxList: TitleMapItem[]): void;
    getFormControl(ctx: any): AbstractControl;
    getFormControlValue(ctx: any): AbstractControl;
    getFormControlGroup(ctx: any): FormArray | FormGroup;
    getFormControlName(ctx: any): string;
    getLayoutArray(ctx: any): any[];
    getParentNode(ctx: any): any;
    getDataPointer(ctx: any): string;
    getLayoutPointer(ctx: any): string;
    isControlBound(ctx: any): boolean;
    addItem(ctx: any): boolean;
    moveArrayItem(ctx: any, oldIndex: number, newIndex: number): boolean;
    removeItem(ctx: any): boolean;
}
