import { Observable } from 'rxjs';
import { PortModel } from './port.model';
import { BaseModel } from './base.model';
import { DiagramModel } from './diagram.model';
import { Coords } from '../interfaces/coords.interface.js';
import { DiagramEngine } from '../services/engine.service';
import { Dimensions } from '../interfaces/dimensions.interface';
import { ID } from '../utils/tool-kit.util';
export declare class NodeModel<P extends PortModel = PortModel> extends BaseModel<DiagramModel> {
    id: ID;
    diagramEngine: DiagramEngine;
    private readonly _extras;
    private readonly _ports;
    private readonly _coords;
    private readonly _dimensions;
    private readonly extras$;
    private readonly ports$;
    private readonly coords$;
    private readonly dimensions$;
    constructor(nodeType?: string, id?: string, extras?: {
        [s: string]: any;
    }, x?: number, y?: number, width?: number, height?: number, logPrefix?: string);
    getCoords(): Coords;
    setCoords({ x, y }: Coords): void;
    transitionToCoords({ x, y }: Coords): void;
    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;
    getPort(id: ID): P;
    selectPorts(selector?: () => boolean | ID | ID[]): Observable<P[]>;
    getPorts(ids?: ID[]): {
        [s: string]: P | P[];
    };
    setDimensions({ width, height }: Dimensions): void;
    getDimensions(): Dimensions;
    dimensionChanges(): Observable<Dimensions>;
    getHeight(): number;
    getWidth(): number;
    selectWidth(): Observable<number>;
    selectHeight(): Observable<number>;
    setExtras(extras: any): void;
    getExtras(): {
        [s: string]: any;
    };
    selectExtras<E = any>(selector?: (extra: E) => E[keyof E] | string | string[]): Observable<{
        [s: string]: any;
    }>;
}
