import { BehaviorSubject, Observable } from 'rxjs';
import { NodeModel } from './node.model';
import { LinkModel } from './link.model';
import { BaseEntity, BaseEntityType } from '../base.entity';
import { DiagramEngine } from '../services/engine.service';
import { BaseModel } from './base.model';
import { Coords } from '../interfaces/coords.interface';
import { ID } from '../utils/tool-kit.util';
export declare class DiagramModel extends BaseEntity {
    private diagramEngine;
    links$: BehaviorSubject<{
        [s: string]: LinkModel;
    }>;
    nodes$: BehaviorSubject<{
        [s: string]: NodeModel;
    }>;
    zoom$: BehaviorSubject<number>;
    offsetX$: BehaviorSubject<number>;
    offsetY$: BehaviorSubject<number>;
    gridSize$: BehaviorSubject<number>;
    constructor(diagramEngine: DiagramEngine, id?: string);
    getNodes(): {
        [s: string]: NodeModel;
    };
    getNode(id: ID): NodeModel | null;
    getLink(id: ID): LinkModel | null;
    getLinks(): {
        [s: string]: LinkModel;
    };
    /**
     * Add a node to the diagram
     * @returns Inserted Node
     */
    addNode(node: NodeModel): NodeModel;
    /**
     * Delete a node from the diagram
     */
    deleteNode(nodeOrId: NodeModel | string): void;
    /**
     * Get nodes behaviour subject, use `.getValue()` for snapshot
     */
    selectNodes(): Observable<{
        [s: string]: NodeModel;
    }>;
    /**
     * Add link
     * @returns Newly created link
     */
    addLink(link: LinkModel): LinkModel;
    /**
     * Delete link
     */
    deleteLink(linkOrId: LinkModel | string): void;
    /**
     * Get links behaviour subject, use `.getValue()` for snapshot
     */
    selectLinks(): Observable<{
        [s: string]: LinkModel;
    }>;
    /**
     * Serialize the diagram model
     * @returns diagram model as a string
     */
    /**
     * Load into the diagram model a serialized diagram
     */
    setOffset(x: number, y: number): void;
    setOffsetX(x: number): void;
    getOffsetX(): number;
    selectOffsetX(): Observable<number>;
    setOffsetY(y: number): void;
    getOffsetY(): number;
    selectOffsetY(): Observable<number>;
    setZoomLevel(z: number): void;
    getZoomLevel(): number;
    selectZoomLevel(): Observable<number>;
    getDiagramEngine(): DiagramEngine;
    clearSelection(ignore?: BaseModel | null): void;
    getGridPosition({ x, y }: Coords): Coords;
    getSelectedItems(...filters: BaseEntityType[]): BaseModel[];
    addAll(...models: BaseModel[]): BaseModel<BaseEntity>[];
}
