import { Dom, type KeyValue } from '../../common';
import { Line, Path, Point, type PointLike, Rectangle } from '../../geometry';
import type { OnEdgeLabelRenderedArgs } from '../../graph/options';
import { Edge, type EdgeSetOptions, type LabelPosition, type LabelPositionObject, type LabelPositionOptions, type TerminalCellData, type TerminalData, type TerminalType } from '../../model/edge';
import { type ConnectionPointManualItem, type NodeAnchorManualItem } from '../../registry';
import { CellView } from '../cell';
import type { MarkupJSONMarkup, MarkupSelectors, MarkupType } from '../markup';
import type { EdgeViewMouseEventArgs, EdgeViewOptions, EdgeViewPositionEventArgs, EventDataArrowheadDragging, EventDataValidateConnectionArgs } from './type';
export * from './type';
export declare class EdgeView<Entity extends Edge = Edge, Options extends EdgeViewOptions = EdgeViewOptions> extends CellView<Entity, Options> {
    protected readonly POINT_ROUNDING = 2;
    path: Path;
    routePoints: Point[];
    sourceAnchor: Point;
    targetAnchor: Point;
    sourcePoint: Point;
    targetPoint: Point;
    sourceMarkerPoint: Point;
    targetMarkerPoint: Point;
    sourceView: CellView | null;
    targetView: CellView | null;
    sourceMagnet: Element | null;
    targetMagnet: Element | null;
    protected labelContainer: Element | null;
    protected labelCache: {
        [index: number]: Element;
    };
    protected labelSelectors: {
        [index: number]: MarkupSelectors;
    };
    protected labelDestroyFn: {
        [index: number]: (args: OnEdgeLabelRenderedArgs) => void;
    };
    static isEdgeView(instance: any): instance is EdgeView;
    protected get [Symbol.toStringTag](): string;
    protected getContainerClassName(): string;
    get sourceBBox(): Rectangle;
    get targetBBox(): Rectangle;
    isEdgeView(): this is EdgeView;
    confirmUpdate(flag: number, options?: any): number;
    render(): this;
    protected renderMarkup(): void;
    protected renderJSONMarkup(markup: MarkupJSONMarkup | MarkupJSONMarkup[]): void;
    protected customizeLabels(): void;
    protected destroyCustomizeLabels(): void;
    protected renderLabels(): this;
    onLabelsChange(options?: any): void;
    protected shouldRerenderLabels(options?: any): boolean;
    protected parseLabelMarkup(markup?: MarkupType): {
        fragment: DocumentFragment;
        selectors: {};
    };
    protected parseLabelStringMarkup(labelMarkup: string): {
        fragment: DocumentFragment;
        selectors: {};
    };
    protected normalizeLabelMarkup(markup?: {
        fragment: DocumentFragment;
        selectors: MarkupSelectors;
    } | null): {
        node: SVGElement;
        selectors: MarkupSelectors;
    };
    protected updateLabels(): void;
    protected renderTools(): this;
    update(options?: any): this;
    removeRedundantLinearVertices(options?: EdgeSetOptions): number;
    getTerminalView(type: TerminalType): CellView<import("../..").Cell<import("../..").CellProperties>, import("../cell").CellViewOptions>;
    getTerminalAnchor(type: TerminalType): Point;
    getTerminalConnectionPoint(type: TerminalType): Point;
    getTerminalMagnet(type: TerminalType, options?: {
        raw?: boolean;
    }): Element;
    updateConnection(options?: any): void;
    protected findAnchors(vertices: PointLike[]): {
        [x: string]: Point;
    };
    protected findAnchorsOrdered(firstType: TerminalType, firstPoint: PointLike, secondType: TerminalType, secondPoint: PointLike): {
        [x: string]: Point;
    };
    protected getAnchor(def: NodeAnchorManualItem | string | undefined, cellView: CellView, magnet: Element | null, ref: Point | Element | null, terminalType: TerminalType): Point;
    protected findRoutePoints(vertices?: PointLike[]): Point[];
    protected findConnectionPoints(routePoints: Point[], sourceAnchor: Point, targetAnchor: Point): {
        source: Point;
        target: Point;
    };
    protected getConnectionPoint(def: string | ConnectionPointManualItem | undefined, view: CellView, magnet: Element, line: Line, endType: TerminalType): Point;
    protected findMarkerPoints(routePoints: Point[], sourcePoint: Point, targetPoint: Point): {
        source: Point;
        target: Point;
    };
    protected findPath(routePoints: Point[], sourcePoint: Point, targetPoint: Point): Path;
    protected translateConnectionPoints(tx: number, ty: number): void;
    updateLabelPositions(): this;
    updateTerminalProperties(type: TerminalType): boolean;
    updateTerminalMagnet(type: TerminalType): void;
    protected getLabelPositionAngle(idx: number): number;
    protected getLabelPositionArgs(idx: number): LabelPositionOptions;
    protected getDefaultLabelPositionArgs(): LabelPositionOptions;
    protected mergeLabelPositionArgs(labelPositionArgs?: LabelPositionOptions, defaultLabelPositionArgs?: LabelPositionOptions): LabelPositionOptions;
    getConnection(): Path;
    getConnectionPathData(): string;
    getConnectionSubdivisions(): import("../../geometry").Segment[][];
    getConnectionLength(): number;
    getPointAtLength(length: number): any;
    getPointAtRatio(ratio: number): any;
    getTangentAtLength(length: number): any;
    getTangentAtRatio(ratio: number): any;
    getClosestPoint(point: PointLike): Point;
    getClosestPointLength(point: PointLike): number;
    getClosestPointRatio(point: PointLike): number;
    getLabelPosition(x: number, y: number, options?: LabelPositionOptions | null): LabelPositionObject;
    getLabelPosition(x: number, y: number, angle: number, options?: LabelPositionOptions | null): LabelPositionObject;
    protected normalizeLabelPosition(): undefined;
    protected normalizeLabelPosition(pos: LabelPosition): LabelPositionObject;
    protected getLabelTransformationMatrix(labelPosition: LabelPosition): DOMMatrix;
    getVertexIndex(x: number, y: number): number;
    protected getEventArgs<E>(e: E): EdgeViewMouseEventArgs<E>;
    protected getEventArgs<E>(e: E, x: number, y: number): EdgeViewPositionEventArgs<E>;
    protected notifyUnhandledMouseDown(e: Dom.MouseDownEvent, x: number, y: number): void;
    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;
    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): KeyValue<any>;
    onMouseUp(e: Dom.MouseUpEvent, x: number, y: number): KeyValue<any>;
    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;
    onCustomEvent(e: Dom.MouseDownEvent, name: string, x: number, y: number): void;
    onLabelMouseDown(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected startEdgeDragging(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected dragEdge(e: Dom.MouseMoveEvent, x: number, y: number): void;
    protected stopEdgeDragging(e: Dom.MouseUpEvent, x: number, y: number): void;
    prepareArrowheadDragging(type: TerminalType, options: {
        x: number;
        y: number;
        options?: KeyValue;
        isNewEdge?: boolean;
        fallbackAction?: EventDataArrowheadDragging['fallbackAction'];
    }): EventDataArrowheadDragging;
    protected createValidateConnectionArgs(type: TerminalType): (cellView: CellView, magnet: Element) => EventDataValidateConnectionArgs;
    protected beforeArrowheadDragging(data: EventDataArrowheadDragging): void;
    protected afterArrowheadDragging(data: EventDataArrowheadDragging): void;
    protected validateConnection(sourceView: CellView | null | undefined, sourceMagnet: Element | null | undefined, targetView: CellView | null | undefined, targetMagnet: Element | null | undefined, terminalType: TerminalType, edgeView?: EdgeView | null | undefined, candidateTerminal?: TerminalCellData | null | undefined): boolean;
    protected allowConnectToBlank(edge: Edge): boolean;
    protected validateEdge(edge: Edge, type: TerminalType, initialTerminal: TerminalData): boolean;
    protected arrowheadDragging(target: Element, x: number, y: number, data: EventDataArrowheadDragging): void;
    protected arrowheadDragged(data: EventDataArrowheadDragging, x: number, y: number): void;
    protected snapArrowhead(x: number, y: number, data: EventDataArrowheadDragging): void;
    protected snapArrowheadEnd(data: EventDataArrowheadDragging): void;
    protected finishEmbedding(data: EventDataArrowheadDragging): void;
    protected fallbackConnection(data: EventDataArrowheadDragging): void;
    protected notifyConnectionEvent(data: EventDataArrowheadDragging, e: Dom.MouseUpEvent): void;
    protected highlightAvailableMagnets(data: EventDataArrowheadDragging): void;
    protected unhighlightAvailableMagnets(data: EventDataArrowheadDragging): void;
    protected startArrowheadDragging(e: Dom.MouseDownEvent, x: number, y: number): void;
    protected dragArrowhead(e: Dom.MouseMoveEvent, x: number, y: number): void;
    protected stopArrowheadDragging(e: Dom.MouseUpEvent, x: number, y: number): void;
    startLabelDragging(e: Dom.MouseDownEvent, _x: number, _y: number): void;
    dragLabel(e: Dom.MouseMoveEvent, x: number, y: number): void;
    stopLabelDragging(_e: Dom.MouseUpEvent, _x: number, _y: number): void;
}
export declare const EdgeViewToStringTag: string;
