import { AsyncValidatorFn, ValidatorFn } from '@angular/forms';
import { UxDynValidators } from './ux-dyn-validations.model';
import { UxDynRuleFn, UxDynRuleMetaData } from './ux-dyn-rules.model';
import { UxDynActionMetaData } from './ux-dyn-data.model';
import { UxDynFormOptions } from './ux-dyn-forms.model';
import { UxValidationErrorI18nMessage } from '@eui/core';
export interface UxDynMappingConfig {
    componentMap?: {
        [key: string]: UxDynComponentModel;
    };
    rulesMap?: {
        [key: string]: UxDynRuleFn;
    };
    validationsMap?: {
        [key: string]: ((...args: any[]) => ValidatorFn) | ValidatorFn | UxDynValidationModel;
    };
    valMessagesMap?: {
        [key: string]: (err?: any) => string | UxValidationErrorI18nMessage;
    };
}
export interface UxDynComponentModel {
    component: any;
    type?: FieldTypes;
    inputsJsonSchema?: {
        schema: any;
        entry: string;
    };
    defaultInputs?: any;
}
export interface UxDynValidationModel {
    validationFn: ((...args: any[]) => ValidatorFn) | ValidatorFn | AsyncValidatorFn;
    paramsModel?: any;
    async?: boolean;
}
export interface UxDynCoreModel {
    /**
     * @deprecated since version 10.0, You no longer need to define it.
     */
    fieldType?: FieldTypes | 'formControl' | 'formGroup' | 'formArray' | 'container';
    layout?: Layout;
    context?: FieldContext;
    children?: UxDynFormModelArray;
    fieldId?: UxFieldId;
}
export declare class UxDynFormJSONMetaData implements UxDynCoreModel {
    layout: {
        class?: string;
        style?: {
            [key: string]: string;
        } | {};
    };
    context: {
        type: string;
        key?: string;
        validators?: {
            validatorFn?: Array<{
                valFnId: string;
                params?: Array<any>;
                severity?: string;
                async?: boolean;
            }>;
        };
        inputs?: {
            [prop: string]: any;
        };
        options?: {
            [prop: string]: any;
        };
    };
    children?: Array<UxDynFormJSONMetaData>;
    fieldId?: string | number;
}
export declare type UxDynFormJSONMetaDataArray = Array<UxDynFormJSONMetaData>;
export interface UxDynCoreRunTimeModel extends UxDynCoreModel {
    setId?: string;
    metaDataIndex?: string;
}
export interface UxDynInputModel {
    [key: string]: any;
}
export declare function getTypeInstance<T>(instanceType: new () => T): T;
export interface UxDynFormArrayParentData {
    index: string | number;
    addLevel?: boolean;
    configIndex?: number;
}
export declare enum FieldTypes {
    formControl = "formControl",
    formGroup = "formGroup",
    formArray = "formArray",
    container = "container"
}
export declare type UxDynFormModel = UxDynCoreModel;
export declare type UxDynFormModelArray = Array<UxDynFormModel>;
export declare class UxDynFormFrameMetaData {
    metaData: Array<UxDynFormModel>;
    initialData: object;
    options?: UxDynFormOptions;
}
export interface Layout {
    class?: string;
    style?: NgStyle | {};
}
export interface FieldContext {
    type: string;
    key?: string;
    validators?: UxDynValidators;
    inputs?: any;
    options?: any;
}
export interface ContainerContext {
    type: string;
    key?: string;
    inputs?: object;
    options?: object;
}
export interface NgStyle {
    [key: string]: string;
}
export declare type UxFieldId = string | number;
export declare const DEP_LEVEL = "level";
export declare const DEP_LEVEL_SEPARATOR = ".";
export declare class UxDynFrameOptions {
    frameId?: string;
    rules?: UxDynRuleMetaData;
    actions?: UxDynActionMetaData;
    injectSource?: boolean;
}
export declare class VbModeConfig {
    active: boolean;
    componentListId: string;
}
