import { ModelAttributeSet, ModelEdge, ModelGraphData, ModelNode } from './types';
export declare class ContentModel {
    readonly nodes: Record<string, ModelNode>;
    readonly edges: Record<string, ModelEdge>;
    static fromRaw(data: ModelGraphData): ContentModel;
    static createEmpty(): ContentModel;
    constructor(nodes: Record<string, ModelNode>, edges: Record<string, ModelEdge>);
    containsNode(id: string): boolean;
    containsEdge(id: string): boolean;
    getNode(id: string): ModelNode | undefined;
    private getExistingNode;
    getEdgesLinkedToNode(nodeId: string): ModelEdge[];
    addNode(node: Partial<ModelNode>): ContentModel;
    editNode(node: ModelNode): ContentModel;
    addNodeAttribute<V>(id: string, attributeName: string, attributeValue: V): ContentModel;
    /**
     * Remove node and associated edges
     * @param id id of the node
     */
    removeNode(id: string): ContentModel;
    private removeOrphanNode;
    editNodeAttribute<V>(id: string, attributeName: string, attributeValue: V): ContentModel;
    removeNodeAttribute(id: string, attributeName: string): ContentModel;
    addEdge(edge: Omit<ModelEdge, 'id' | 'attributes'> & {
        id?: string;
        attributes?: ModelAttributeSet;
    }): ContentModel;
    checkEdgeNodes(edge: Omit<ModelEdge, 'id' | 'attributes'> & {
        id?: string;
        attributes?: ModelAttributeSet;
    }): void;
    getEdge(id: string): ModelEdge | undefined;
    private getExistingEdge;
    editEdge(edge: ModelEdge): ContentModel;
    addEdgeAttribute<V>(id: string, attributeName: string, attributeValue: V): ContentModel;
    editEdgeAttribute<V>(id: string, attributeName: string, attributeValue: V): ContentModel;
    removeEdgeAttribute(id: string, attributeName: string): ContentModel;
    removeEdge(id: string): ContentModel;
}
