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[];
    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 | undefined;
    clone(): NodeModel;
    deepCopy(): NodeModel;
    append(child: NodeModel): void;
    removeChild(child: NodeModel): void;
    getChildren(): NodeModel[];
    getParent(): NodeModel | null;
    setParent(parent: NodeModel): void;
}
export default NodeModel;
