import { Observable } from 'rxjs';
import { Coords } from '../interfaces/coords.interface';
import { Dimensions } from '../interfaces/dimensions.interface';
import { SerializedNodeModel } from '../interfaces/serialization.interface';
import { DiagramEngine } from '../services/engine.service';
import { ID } from '../utils/tool-kit.util';
import { EntityMap, HashMap } from '../utils/types';
import { BaseModel } from './base.model';
import { DiagramModel } from './diagram.model';
import { PortModel } from './port.model';
export declare class NodeModel<P extends PortModel = PortModel> extends BaseModel<DiagramModel> {
    protected diagramEngine$: import("../state/state").ValueState<DiagramEngine>;
    protected extras$: import("../state/state").ValueState<any>;
    protected ports$: import("../state/state").EntityState<P>;
    protected coords$: import("../state/state").ValueState<Coords>;
    protected dimensions$: import("../state/state").ValueState<Dimensions>;
    constructor(nodeType?: string, id?: string, extras?: HashMap<any>, x?: number, y?: number, width?: number, height?: number, logPrefix?: string);
    getDiagramEngine(): DiagramEngine;
    selectDiagramEngine(): Observable<DiagramEngine>;
    setDiagramEngine(diagramEngine: DiagramEngine): void;
    getCoords(): Coords;
    setCoords({ x, y }: Coords): void;
    serialize(): SerializedNodeModel;
    getSelectedEntities(): BaseModel<import("../base.entity").BaseEntity>[];
    coordsChanges(): Observable<Coords>;
    selectCoords(): Observable<Coords>;
    selectX(): Observable<number>;
    selectY(): Observable<number>;
    /**
     * Assign a port to the node and set the node as its getParent
     * @returns the inserted port
     */
    addPort(port: P): P;
    removePort(portOrId: ID | P): string;
    getPort(id: ID): P;
    selectPorts(selector?: () => boolean | ID | ID[]): Observable<P[]>;
    getPorts(): EntityMap<P>;
    getPortsArray(): P[];
    setDimensions(dimensions: Partial<Dimensions>): void;
    getDimensions(): Dimensions;
    dimensionChanges(): Observable<Dimensions>;
    getHeight(): number;
    setHeight(height: number): void;
    getWidth(): number;
    setWidth(width: number): void;
    selectWidth(): Observable<number>;
    selectHeight(): Observable<number>;
    setExtras(extras: any): void;
    getExtras(): any;
    selectExtras<E = any>(selector?: (extra: E) => E[keyof E] | string | string[]): Observable<E>;
    destroy(): void;
    removeAllPorts(): void;
}
