/**
 * @author Martin Karkowski
 * @email m.karkowski@zema.de
 * @desc [description]
 */
import { INopeEventEmitter, INopeObservable } from "../types/nope";
import { IMapBasedMergeData, IMergeData } from "../types/nope/nopeHelpers.interface";
export declare class MergeData<T, D = any> implements IMergeData<T, D> {
    originalData: D;
    protected _extractData: (data: D) => Set<T>;
    /**
     * Element which will trig implements IMergeDatager an event containing the changes
     *
     * @author M.Karkowski
     * @type {INopeEventEmitter<{
     *     added: T[],
     *     removed: T[]
     *   }>}
     * @memberof MergeData
     */
    readonly onChange: INopeEventEmitter<{
        added: T[];
        removed: T[];
    }>;
    /**
     * Contains the current data.
     *
     * @author M.Karkowski
     * @type {INopeObservable<T[]>}
     * @memberof MergeData
     */
    readonly data: INopeObservable<T[]>;
    constructor(originalData: D, _extractData: (data: D) => Set<T>);
    /**
     * Update the underlying data.
     *
     * @author M.Karkowski
     * @param {*} [data=this.originalData]
     * @memberof MergeData
     */
    update(data?: D, force?: boolean): void;
    /**
     * Disposes the Element.
     *
     * @author M.Karkowski
     * @memberof MergeData
     */
    dispose(): void;
}
export declare class MapBasedMergeData<OriginalKey, OriginalValue, ExtractedKey = OriginalKey, ExtractedValue = OriginalValue> extends MergeData<ExtractedValue, Map<OriginalKey, OriginalValue>> implements IMapBasedMergeData<OriginalKey, OriginalValue, ExtractedKey, ExtractedValue> {
    protected _path: keyof OriginalValue | string;
    protected _pathKey: keyof OriginalValue | string;
    amountOf: Map<ExtractedKey, number>;
    simplified: Map<ExtractedKey, ExtractedValue>;
    keyMapping: Map<OriginalKey, Set<ExtractedKey>>;
    keyMappingReverse: Map<ExtractedKey, Set<OriginalKey>>;
    conflicts: Map<ExtractedKey, Set<ExtractedValue>>;
    orgKeyToExtractedValue: Map<OriginalKey, Set<ExtractedValue>>;
    extractedKey: ExtractedKey[];
    extractedValue: ExtractedValue[];
    constructor(originalData: Map<OriginalKey, OriginalValue>, _path?: keyof OriginalValue | string, _pathKey?: keyof OriginalValue | string);
    /**
     * Update the underlying data.
     *
     * @author M.Karkowski
     * @param {*} [data=this.originalData]
     * @memberof MergeData
     */
    update(data?: Map<OriginalKey, OriginalValue>): void;
}
