import { JsonSchema7 } from '@jsonforms/core';
import { Property } from './property.util';
import { EditorContext } from '../editor-context';
import { ModelMapping } from '../helpers/container.util';
/**
 * A ReferenceProperty extends the Property and provides methods
 * which allow to modify reference data.
 */
export interface ReferenceProperty extends Property {
    /**
     * The schema of the referenced elements.
     */
    readonly targetSchema: JsonSchema7;
    /**
     * This allows to set the reference.
     *
     * @param data The object to add to
     * @param valueToAdd For id based referencing: The object referenced by the id.
     *                   For path based referencing: the path itself
     */
    addToData(data: Object, valueToAdd: Object): void;
    /**
     * This allows to retrieve the refernced data object(s) of the reference.
     * The result object contains the data objects' identifier (its ID or path) as key
     * and the data object as value.
     *
     * @param data The object that contains the reference
     * @return The referenced value(s).
     *         If no referenced value(s) are found an empty object is returned.
     */
    getData(data: Object): {
        [key: string]: Object;
    };
    /**
     * Returns true if the references use ids to identify targets and false if they use paths.
     */
    isIdBased(): boolean;
    /**
     * Returns all possible objects which can be referenced by this property.
     * The result object contains targets' identifier (its ID or path) as key
     * and the referencable data object as value
     *
     * @return The object containing possible reference targets. Keys are identifiers of the targets
     *         and values are the actual data objects. If there are no available reference targets,
     *         an empty object is returned.
     */
    findReferenceTargets(data: Object): {
        [key: string]: Object;
    };
}
export declare class ReferencePropertyImpl implements ReferenceProperty {
    private innerSchema;
    private innerTargetSchema;
    private key;
    private name;
    private idBased;
    private findFunction;
    private addFunction;
    private getFunction;
    constructor(innerSchema: JsonSchema7, innerTargetSchema: JsonSchema7, key: string, name: string, idBased: boolean, findFunction: (data: Object) => {
        [key: string]: Object;
    }, addFunction: (data: object, valueToAdd: object) => void, getFunction: (data: object) => {
        [key: string]: Object;
    });
    readonly label: string;
    readonly schema: JsonSchema7;
    readonly property: string;
    readonly targetSchema: JsonSchema7;
    addToData(data: object, valueToAdd: Object): void;
    getData(data: object): {
        [key: string]: Object;
    };
    isIdBased(): boolean;
    findReferenceTargets(data: Object): {
        [key: string]: Object;
    };
}
export declare const resolveRef: (schema: JsonSchema7, findTargets: (data: Object) => {
    [key: string]: Object;
}, propName: string) => (data: Object) => {
    [key: string]: Object;
};
export declare const getFindReferenceTargetsFunction: (href: string, schemaId: string, idProp: string, modelMapping?: ModelMapping) => (data: Object) => {
    [key: string]: Object;
};
/**
 * Retrieves an array of reference properties based on the provided schema.
 * @param schema The schema to check for references
 * @return The array of {@link ReferenceProperty} or empty if no references are available
 * @see ReferenceProperty
 */
export declare const getReferenceProperties: (schema: JsonSchema7, editorContext: EditorContext) => ReferenceProperty[];
