import { INotifyPropertyChanged } from "../INotifyPropertyChanged";
import { EventWithSenderArg } from "../EventObject";
export declare abstract class ModelComponent implements INotifyPropertyChanged<ModelComponent, string> {
    id: string;
    private _tags;
    protected _name: string;
    get version(): string;
    constructor(id?: string, name?: string);
    get name(): string;
    set name(value: string);
    get tags(): {
        [key: string]: any;
    };
    set tags(value: {
        [key: string]: any;
    });
    protected _copy(source: ModelComponent, destination: ModelComponent, generateNewIds?: boolean, appropriateParentContainer?: boolean): void;
    getSimplifiedObject(omitProperties?: string | string[]): {};
    generateNewIds(): void;
    protected _generateNewId(): void;
    toString(): string;
    protected _propertyChanged: EventWithSenderArg<ModelComponent, string>;
    addPropertyChanged(listener: (sender: ModelComponent, eventArgs: string) => void): void;
    removePropertyChanged(listener: (sender: ModelComponent, eventArgs: string) => void): void;
    equals(other: ModelComponent): boolean;
}
