import { Type } from '@angular/core';
import { SchemaPrimitiveType, SchemaProperty } from './schema-models';
/**
 * Schema Form Data Type Store
 * It maintains the data type registrations per form instance.
 */
export declare class SchemaDataTypeStore {
    /**
     * It's used to store the data type registrations submitted from the form field components.
     */
    static dataTypeRegistrationsFromClass: {
        [type: string]: DataTypeRegistration;
    };
    private dataTypeMap;
    /**
     * It registers the data type registration.
     */
    static registerDataType(dataTypeRegistration: DataTypeRegistration): void;
    constructor();
    /**
     * It returns the names of all the data type registrations.
     */
    getAllRegistrations(): DataTypeRegistration[];
    /**
     * It gets the data type registration by type.
     */
    getDataTypeRegistration(type: SchemaPrimitiveType, format?: string): DataTypeRegistration;
    /**
     * It registers the data type registration.
     */
    registerDataType(dataTypeRegistration: DataTypeRegistration): void;
}
/**
 * It describes all the necessary information for a schema form field.
 */
export interface DataTypeRegistration {
    /**
     * It defines the primitive type of the data type.
     */
    type: SchemaPrimitiveType;
    /**
     * It defines the description of the data type. The description will be used in the editor which a data type is chosen
     * to help explain how the chosen data type works.
     */
    description: string;
    /**
     * It defines the format of the data type. Format maps to a specific UI control for the data type.
     */
    format: string;
    /**
     * It defines how the angular template html should be generated for the schema property.
     */
    loaderComponent?: Type<any>;
    /**
     * It defines how the object type schema should look like for the object type schema.
     */
    predefinedObjectProperties?: SchemaProperty[];
    /**
     * It defines the schema of the option property.
     * Example: for drop down list field, the option properties would be an array for key value pairs to provide drop down options.
     */
    optionProperties?: SchemaProperty[];
    /**
     * Here is the place to append any additional information for the data type.
     * E.g. Json object data type has a tag says "form-editor" to indicate that data type is only used for form editor, it's not available
     * for normal forms.
     */
    tags?: string[];
    /**
     * It defines whether the format of this data type is the default format of that type.
     */
    isDefaultFormat?: boolean;
    defaultDataHandler?: (schema: SchemaProperty) => any;
}
