import { JsonSchema7 } from '@jsonforms/core';
/**
 * A Property wraps a JsonSchema and provides additional information
 * like a label and the property key.
 */
export interface Property {
    /**
     * The label is a text donating a human readable name of the schema the property describes.
     */
    label: string;
    /**
     * The property is a text donating the schema key from which this property was created.
     */
    property: string;
    /**
     * The schema is the JsonSchema this property describes.
     */
    schema: JsonSchema7;
}
/**
 * Returns the label of a property based on the best-effort solution
 * @param property The property contains a schema, label and a property as key
 * @returns {string}
 */
export declare const findPropertyLabel: (property: Property) => string;
/**
 * Calculate references for a given schema and copy definitions into the schema
 *
 * @param parentSchema root schema which is used to find all the schema refs
 * @param schema current subschema without resolved references
 * @returns JsonSchema current subschema with resolved references
 */
export declare const makeSchemaSelfContained: (parentSchema: JsonSchema7, schema: JsonSchema7) => JsonSchema7;
/**
 * Create a self contained schema.
 * @param parentSchema The schema to use for resolving
 * @param refPath The path to resolve
 * @return a JsonSchema that is self-contained
 */
export declare const makeSelfContainedSchema: (parentSchema: JsonSchema7, refPath: string) => JsonSchema7;
/**
 * Returns a flattened list of container properties.
 * A property is being considered a container property if it is an array of objects,
 * meaning that all its children are non-primitive.
 *
 * @param {string} property The schema key from which this property was created.
 * @param {string} label The name of the schema the property describes.
 * @param {JsonSchema} schema The schema is the JsonSchema this property describes.
 * @param {JsonSchema} rootSchema The parent schema
 * @param {boolean} isInContainer To indicate whether the schema is in a container or not
 *                                Properties that are described in array are considered as
 *                                they are in a container.
 * @param {boolean} hasOnlyOwnChildren To accept only corresponding children of a property
 * @returns {@link Property[]} An array of properties where each property describes
 *                             a self-contained schema for the corresponding schema
 */
export declare const findContainerProperties: (property: string, label: string, schema: JsonSchema7, rootSchema: JsonSchema7, isInContainer: boolean, hasOnlyOwnChildren?: boolean) => Property[];
/**
 * Retrieves an array of properties based on the provided schema.
 *
 * @param schema The schema to check for properties
 * @return The array of {@link Property} or empty if no properties are available
 * @see Property
 */
export declare const retrieveContainerProperties: (schema: JsonSchema7, rootSchema: JsonSchema7) => Property[];
/**
 * Returns a flattened map of sub schema ID to container properties.
 * A property is being considered a container property if it is an array of objects,
 * meaning that all its children are non-primitive
 *
 * @param schema The root schema
 * @param containerProperties All the available containers in the given schema
 *
 * @returns {{[p: string]: Property[]}}
 */
export declare const findAllContainerProperties: (schema: JsonSchema7, rootSchema: JsonSchema7, containerProperties?: {
    [schemaId: string]: Property[];
}) => {
    [schemaId: string]: Property[];
};
