import { ComponentFactoryResolver, ViewContainerRef, ComponentRef, RendererFactory2 } from '@angular/core';
import { AbstractNodeFactory } from '../factories/node.factory';
import { DiagramModel } from '../models/diagram.model';
import { NodeModel } from '../models/node.model';
import { AbstractLinkFactory } from '../factories/link.factory';
import { AbstractPortFactory } from '../factories/port.factory';
import { LinkModel } from '../models/link.model';
import { PortModel } from '../models/port.model';
import { BaseEntity } from '../base.entity';
import { AbstractLabelFactory } from '../factories/label.factory';
import { LabelModel } from '../models/label.model';
export declare class DiagramEngine {
    private resolver;
    private rendererFactory;
    private _renderer;
    private nodeFactories;
    private labelFactories;
    private linkFactories;
    private portFactories;
    private canvas$;
    diagramModel: DiagramModel;
    constructor(resolver: ComponentFactoryResolver, rendererFactory: RendererFactory2);
    createDiagram(): DiagramModel;
    registerDefaultFactories(): void;
    registerLabelFactory(labelFactory: AbstractLabelFactory): void;
    getLabelFactories(): {
        [s: string]: AbstractLabelFactory;
    };
    getLabelFactory(type: string): AbstractLabelFactory;
    getFactoryForLabel(label: LabelModel): AbstractLabelFactory | null;
    generateWidgetForLabel(label: LabelModel, labelHost: ViewContainerRef): ComponentRef<LabelModel> | null;
    registerNodeFactory(nodeFactory: AbstractNodeFactory): void;
    getNodeFactories(): {
        [s: string]: AbstractNodeFactory;
    };
    getNodeFactory(type: string): AbstractNodeFactory;
    getFactoryForNode(node: NodeModel): AbstractNodeFactory | null;
    generateWidgetForNode(node: NodeModel, nodesHost: ViewContainerRef): ComponentRef<NodeModel> | null;
    registerPortFactory(factory: AbstractPortFactory): void;
    getPortFactories(): {
        [s: string]: AbstractPortFactory<PortModel>;
    };
    getPortFactory(type: string): AbstractPortFactory;
    getFactoryForPort(port: PortModel): AbstractPortFactory | null;
    generateWidgetForPort(port: PortModel, portsHost: ViewContainerRef): ComponentRef<PortModel> | null;
    getLinkFactories(): {
        [s: string]: AbstractLinkFactory;
    };
    registerLinkFactory(factory: AbstractLinkFactory): void;
    getLinkFactory(type: string): AbstractLinkFactory;
    getFactoryForLink(link: LinkModel): AbstractLinkFactory | null;
    generateWidgetForLink(link: LinkModel, linksHost: ViewContainerRef): ComponentRef<LinkModel> | null;
    getNodeElement(node: NodeModel): HTMLElement;
    getNodePortElement(port: PortModel): HTMLElement;
    getPortCenter(port: PortModel): {
        x: number;
        y: number;
    };
    /**
     * Calculate rectangular coordinates of the port passed in.
     */
    getPortCoords(port: PortModel): {
        x: number;
        y: number;
        width: number;
        height: number;
    };
    /**
     * Determine the width and height of the node passed in.
     * It currently assumes nodes have a rectangular shape, can be overriden for customised shapes.
     */
    getNodeDimensions(node: NodeModel): {
        width: number;
        height: number;
    };
    setCanvas(canvas: Element): void;
    getRelativeMousePoint(event: MouseEvent): {
        x: number;
        y: number;
    };
    getRelativePoint(x: number, y: number): {
        x: number;
        y: number;
    };
    getDiagramModel(): DiagramModel;
    isModelLocked(model: BaseEntity): boolean;
    /**
     * auto arrange the graph
     */
    autoArrange(): void;
    /**
     * fit the canvas zoom levels to the elements contained.
     * @param additionalZoomFactor allow for further zooming out to make sure edges doesn't cut
     */
    zoomToFit(additionalZoomFactor?: number): void;
}
