/**
 * Strategy for the approach on assigning the property metadata.
 */
export declare enum PropertyMergeStrategy {
    /**
     * Do not assign the passed value if a value is already assigned.
     */
    Skip = "skip",
    /**
     * Override any previously assigned value with the passed value.
     */
    Override = "override",
    /**
     * Merge an already existing property value object with the passed value using Object.assign
     */
    Merge = "merge"
}
/**
 * Registers metadata on classes and properties.
 */
export declare class WidgetMetadata {
    /**
     * Registers the base metadata property holder.
     * @param target The decorated class.
     */
    static registerPrototype(target: any): void;
    /**
     * Registers a property value in the metadata of the class on a given key.
     * @param target The decorated class.
     * @param key Propery key.
     * @param value The property value.
     */
    static registerProperty(target: any, key: string, value: any): void;
    /**
     * Registers a property value in the metadata of the class prototype on a given key.
     * @param target The decorated class.
     * @param key Propery key.
     * @param value The property value.
     */
    static registerPrototypeProperty(target: any, key: string, value: any): void;
    /**
     * Register a property value in the metadata of the class based on _propName_, _key_ in the property metadata, property.key _value_ and an optional override strategy.
     * @param target The decorated class.
     * @param propName The property name.
     * @param key The key of the metadata value.
     * @param value The value.
     * @param override The override strategy for the value:
     *  - skip - if there is already a value assigned
     *  - override - if you wish to force the value even if one is already assigned
     *  - merge - if the value object that is passed needs to be merged with the one that already is assigned
     * Default is to override.
     */
    static registerPropertyMetadata(target: any, propName: string, key: string, value: any, override?: PropertyMergeStrategy): void;
    /**
     * Register a property value in the metadata of the class prototype based on @param propName, @param key in the property metadata, property.key @param value and an optional override strategy.
     * @param target The decorated class.
     * @param propName The property name.
     * @param key The key of the metadata value.
     * @param value The value.
     * @param override The override strategy for the value:
     *  - skip - if there is already a value assigned
     *  - override - if you wish to force the value even if one is already assigned
     *  - merge - if the value object that is passed needs to be merged with the one that already is assigned
     * Default is to override.
     */
    static registerPrototypePropertyMetadata(target: any, propName: string, key: string, value: any, override?: PropertyMergeStrategy): void;
    /** @private */
    private static register;
    /** @private */
    private static registerPropertyObject;
}
