import { Dom } from '../../common';
import { type RectangleLike } from '../../geometry';
import { Cell } from '../../model/cell';
import type { Edge } from '../../model/edge';
import type { Node } from '../../model/node';
import type { Label, Port } from '../../model/port';
import type { CellAttrs, PortLayoutResult } from '../../registry';
import { CellView } from '../cell';
import type { EdgeView } from '../edge';
import { type MarkupJSONMarkup } from '../markup';
import type { EventDataMovingTargetNode, NodeViewEventArgs, NodeViewMouseEventArgs, NodeViewOptions, NodeViewPortCache, NodeViewPositionEventArgs } from './type';
export * from './type';
export declare class NodeView<Entity extends Node = Node, Options extends NodeViewOptions = NodeViewOptions> extends CellView<Entity, Options> {
    protected portsCache: {
        [id: string]: NodeViewPortCache;
    };
    static isNodeView(instance: any): instance is NodeView;
    protected get [Symbol.toStringTag](): string;
    protected getContainerClassName(): string;
    protected updateClassName(e: Dom.MouseEnterEvent): void;
    isNodeView(): this is NodeView;
    confirmUpdate(flag: number, options?: any): number;
    update(partialAttrs?: CellAttrs): void;
    protected renderMarkup(): void;
    protected renderJSONMarkup(markup: MarkupJSONMarkup | MarkupJSONMarkup[]): void;
    render(): this;
    resize(): void;
    translate(): void;
    rotate(): void;
    protected getTranslationString(): string;
    protected getRotationString(): string;
    protected updateTransform(): void;
    findPortElem(portId?: string, selector?: string): Element;
    protected cleanPortsCache(): void;
    protected removePorts(): void;
    protected renderPorts(): void;
    protected updateConnectedEdges(): void;
    protected appendPorts(ports: Port[], zIndex: number, refs: Element[]): void;
    protected getPortElement(port: Port): Element;
    protected createPortElement(port: Port): Element;
    protected updatePorts(): void;
    protected updatePortGroup(groupName?: string): void;
    protected applyPortTransform(element: Element, layout: PortLayoutResult, initialAngle?: number): void;
    protected getPortMarkup(port: Port): import("../markup").MarkupType;
    protected getPortLabelMarkup(label: Label): import("../markup").MarkupType;
    protected existPortLabel(port: Port): import("../../registry").ComplexAttrs;
    protected getEventArgs<E>(e: E): NodeViewMouseEventArgs<E>;
    protected getEventArgs<E>(e: E, x: number, y: number): NodeViewPositionEventArgs<E>;
    protected getPortEventArgs<E>(e: E, port: string, pos?: {
        x: number;
        y: number;
    }): NodeViewPositionEventArgs<E> | NodeViewMouseEventArgs<E>;
    notifyMouseDown(e: Dom.MouseDownEvent, x: number, y: number): void;
    notifyMouseMove(e: Dom.MouseMoveEvent, x: number, y: number): void;
    notifyMouseUp(e: Dom.MouseUpEvent, x: number, y: number): void;
    notifyPortEvent(name: string, e: Dom.EventObject, pos?: {
        x: number;
        y: number;
    }): void;
    onClick(e: Dom.ClickEvent, x: number, y: number): void;
    onDblClick(e: Dom.DoubleClickEvent, x: number, y: number): void;
    onContextMenu(e: Dom.ContextMenuEvent, x: number, y: number): void;
    onMouseDown(e: Dom.MouseDownEvent, x: number, y: number): void;
    onMouseMove(e: Dom.MouseMoveEvent, x: number, y: number): void;
    onMouseUp(e: Dom.MouseUpEvent, x: number, y: number): void;
    onMouseOver(e: Dom.MouseOverEvent): void;
    onMouseOut(e: Dom.MouseOutEvent): void;
    onMouseEnter(e: Dom.MouseEnterEvent): void;
    onMouseLeave(e: Dom.MouseLeaveEvent): void;
    onMouseWheel(e: Dom.EventObject, x: number, y: number, delta: number): void;
    onMagnetClick(e: Dom.MouseUpEvent, magnet: Element, x: number, y: number): void;
    onMagnetDblClick(e: Dom.DoubleClickEvent, magnet: Element, x: number, y: number): void;
    onMagnetContextMenu(e: Dom.ContextMenuEvent, magnet: Element, x: number, y: number): void;
    onMagnetMouseDown(e: Dom.MouseDownEvent, magnet: Element, x: number, y: number): void;
    onCustomEvent(e: Dom.MouseDownEvent, name: string, x: number, y: number): void;
    protected prepareEmbedding(e: Dom.MouseMoveEvent): void;
    processEmbedding(e: Dom.MouseMoveEvent, data: EventDataMovingTargetNode): void;
    clearEmbedding(data: EventDataMovingTargetNode): void;
    finalizeEmbedding(e: Dom.MouseUpEvent, data: EventDataMovingTargetNode): void;
    getDelegatedView(): NodeView<Node<import("../../model/node").NodeProperties>, NodeViewOptions>;
    protected validateMagnet(cellView: CellView, magnet: Element, e: Dom.MouseDownEvent | Dom.MouseEnterEvent): boolean;
    protected startMagnetDragging(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected startConnectting(e: Dom.MouseDownEvent, magnet: Element, x: number, y: number): void;
    protected getDefaultEdge(sourceView: CellView, sourceMagnet: Element): Edge;
    protected createEdgeFromMagnet(magnet: Element, x: number, y: number): EdgeView;
    protected dragMagnet(e: Dom.MouseMoveEvent, x: number, y: number): void;
    protected stopMagnetDragging(e: Dom.MouseUpEvent, x: number, y: number): void;
    protected notifyUnhandledMouseDown(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected notifyNodeMove<Key extends keyof NodeViewEventArgs>(name: Key, e: Dom.MouseMoveEvent | Dom.MouseUpEvent, x: number, y: number, cell: Cell): void;
    protected getRestrictArea(view?: NodeView): RectangleLike | null;
    protected startNodeDragging(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected dragNode(e: Dom.MouseMoveEvent, x: number, y: number): void;
    protected autoOffsetNode(): void;
    protected stopNodeDragging(e: Dom.MouseUpEvent, x: number, y: number): void;
    protected autoScrollGraph(x: number, y: number): void;
}
export declare const NodeViewToStringTag: string;
