import { Observable } from 'rxjs';
import { BaseEntity, BaseEntityType } from '../base.entity';
import { Coords } from '../interfaces/coords.interface';
import { SelectOptions } from '../interfaces/select-options.interface';
import { SerializedDiagramModel } from '../interfaces/serialization.interface';
import { DiagramEngine } from '../services/engine.service';
import { ID } from '../utils';
import { EntityMap } from '../utils/types';
import { BaseModel } from './base.model';
import { LinkModel } from './link.model';
import { NodeModel } from './node.model';
import { PortModel } from './port.model';
export declare class DiagramModel extends BaseEntity {
    protected diagramEngine: DiagramEngine;
    protected nodes$: import("../state/state").EntityState<NodeModel<PortModel>>;
    protected links$: import("../state/state").EntityState<LinkModel>;
    protected offsetX$: import("../state/state").ValueState<number>;
    protected offsetY$: import("../state/state").ValueState<number>;
    protected zoom$: import("../state/state").ValueState<number>;
    protected maxZoomOut$: import("../state/state").ValueState<any>;
    protected maxZoomIn$: import("../state/state").ValueState<any>;
    protected gridSize$: import("../state/state").ValueState<number>;
    constructor(diagramEngine: DiagramEngine, id?: string, logPrefix?: string);
    getNodes(): EntityMap<NodeModel>;
    getNodesArray(): NodeModel[];
    getNode(id: ID): NodeModel | undefined;
    getLink(id: ID): LinkModel | undefined;
    getLinks(): EntityMap<LinkModel>;
    getLinksArray(): LinkModel[];
    getAllPorts(options?: SelectOptions<PortModel>): Map<string, PortModel>;
    /**
     * 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 as observable, use `.getValue()` for snapshot
     */
    selectNodes(): Observable<EntityMap<NodeModel>>;
    /**
     * Add link
     * @returns Newly created link
     */
    addLink(link: LinkModel): LinkModel;
    /**
     * Delete link
     */
    deleteLink(linkOrId: LinkModel | string): void;
    reset(): void;
    /**
     * Get links behaviour subject, use `.getValue()` for snapshot
     */
    selectLinks(): Observable<EntityMap<LinkModel>>;
    serialize(): SerializedDiagramModel;
    setMaxZoomOut(maxZoomOut: number): void;
    setMaxZoomIn(maxZoomIn: number): void;
    getMaxZoomOut(): any;
    getMaxZoomIn(): any;
    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>[];
    addLinks(links: LinkModel[]): void;
    addNodes(nodes: NodeModel[]): void;
    destroy(): void;
}
