import INodeModel, { NodeModelType } from './INodeModel';
import FeatureModel from './FeatureModel';
import Mindmap from './Mindmap';
import FeatureType from './FeatureType';
declare class NodeModel extends INodeModel {
    private _properties;
    private _children;
    private _features;
    private _parent;
    constructor(type: NodeModelType, mindmap: Mindmap, id?: number);
    /**
       * @param type
       * @param attributes
       * @return {mindplot.model.FeatureModel} the created feature model
       */
    createFeature(type: FeatureType, attributes: any): FeatureModel;
    /**
       * @param feature
       * @throws will throw an error if feature is null or undefined
       */
    addFeature(feature: FeatureModel): void;
    getFeatures(): FeatureModel[];
    /**
       * @param feature
       * @throws will throw an error if feature is null or undefined
       * @throws will throw an error if the feature could not be removed
       */
    removeFeature(feature: FeatureModel): void;
    /**
       * @param {String} type the feature type, e.g. icon or link
       * @throws will throw an error if type is null or undefined
       */
    findFeatureByType(type: string): FeatureModel[];
    /**
       * @param {String} id
       * @throws will throw an error if id is null or undefined
       * @throws will throw an error if feature could not be found
       * @return the feature with the given id
       */
    findFeatureById(id: number): FeatureModel;
    getPropertiesKeys(): string[];
    /**
       * @param key
       * @param value
       * @throws will throw an error if key is null or undefined
       */
    putProperty(key: string, value: string | number | boolean): void;
    getProperties(): Record<string, string | number | boolean>;
    getProperty(key: string): number | string | boolean;
    /**
       * @return {mindplot.model.NodeModel} an identical clone of the NodeModel
       */
    clone(): NodeModel;
    /**
       * Similar to clone, assign new id to the elements ...
       * @return {mindplot.model.NodeModel}
       */
    deepCopy(): NodeModel;
    /**
       * @param {mindplot.model.NodeModel} child
       * @throws will throw an error if child is null, undefined or not a NodeModel object
       */
    append(child: NodeModel): void;
    /**
       * @param {mindplot.model.NodeModel} child
       * @throws will throw an error if child is null, undefined or not a NodeModel object
       */
    removeChild(child: NodeModel): void;
    getChildren(): NodeModel[];
    getParent(): NodeModel | null;
    setParent(parent: NodeModel): void;
}
export default NodeModel;
