import { Observable } from 'rxjs';
import { Coords } from '../interfaces/coords.interface';
import { SerializedLinkModel } from '../interfaces/serialization.interface';
import { DiagramEngine } from '../services/engine.service';
import { ID } from '../utils/tool-kit.util';
import { BaseModel } from './base.model';
import { DiagramModel } from './diagram.model';
import { LabelModel } from './label.model';
import { PointModel } from './point.model';
import { PortModel } from './port.model';
export declare class LinkModel extends BaseModel<DiagramModel> {
    diagramEngine: DiagramEngine;
    protected name: string;
    protected sourcePort: PortModel | null;
    protected targetPort: PortModel | null;
    protected points: PointModel[];
    protected extras: any;
    protected label$: import("../state/state").ValueState<LabelModel>;
    constructor(linkType?: string, id?: string, logPrefix?: string);
    serialize(): SerializedLinkModel;
    setName(name: string): void;
    getName(): string;
    getExtras(): any;
    setExtras(extras: any): void;
    destroy(): void;
    doClone(lookupTable: {}, clone: any): void;
    isLastPoint(point: PointModel): boolean;
    getPointIndex(point: PointModel): number;
    getPointModel(id: ID): PointModel | null;
    getPortForPoint(point: PointModel): PortModel;
    getPointForPort(port: PortModel): PointModel;
    getFirstPoint(): PointModel;
    getLastPoint(): PointModel;
    setSourcePort(port: PortModel): void;
    getSourcePort(): PortModel;
    getTargetPort(): PortModel;
    setTargetPort(port: PortModel): void;
    point({ x, y }: Coords): PointModel;
    getPoints(): PointModel[];
    setPoints(points: PointModel[]): void;
    setLabel(label: LabelModel): void;
    selectLabel(): Observable<LabelModel | null>;
    getLabel(): LabelModel;
    resetLabel(): void;
    removePoint(pointModel: PointModel): void;
    removePointsBefore(pointModel: PointModel): void;
    removePointsAfter(pointModel: PointModel): void;
    removeMiddlePoints(): void;
    addPoint<P extends PointModel>(pointModel: P, index?: number): P;
    generatePoint({ x, y }: Coords): PointModel;
    setLocked(locked?: boolean): void;
}
