@antv/x6
Version:
JavaScript diagramming library that uses SVG and HTML for rendering.
340 lines (339 loc) • 16.1 kB
TypeScript
/// <reference types="jquery" />
import { KeyValue } from '../types';
import { Rectangle, Point, Path, Line } from '../geometry';
import { Dom } from '../util';
import { Attr, NodeAnchor, ConnectionPoint } from '../registry';
import { Cell } from '../model/cell';
import { Edge } from '../model/edge';
import { Markup } from './markup';
import { CellView } from './cell';
export declare class EdgeView<Entity extends Edge = Edge, Options extends EdgeView.Options = EdgeView.Options> extends CellView<Entity, Options> {
protected readonly POINT_ROUNDING = 2;
path: Path;
routePoints: Point[];
sourceAnchor: Point;
targetAnchor: Point;
sourcePoint: Point;
targetPoint: Point;
sourceView: CellView | null;
targetView: CellView | null;
sourceMagnet: Element | null;
targetMagnet: Element | null;
protected toolCache: Element;
protected tool2Cache: Element;
protected readonly markerCache: {
sourcePoint?: Point;
targetPoint?: Point;
sourceBBox?: Rectangle;
targetBBox?: Rectangle;
};
protected get [Symbol.toStringTag](): string;
protected getContainerClassName(): string;
get sourceBBox(): Rectangle;
get targetBBox(): Rectangle;
isEdgeView(): this is EdgeView;
confirmUpdate(flag: number, options?: any): number;
onLabelsChange(options?: any): void;
protected shouldRerenderLabels(options?: any): boolean;
protected containers: EdgeView.ContainerCache;
protected labelCache: {
[index: number]: Element;
};
protected labelSelectors: {
[index: number]: Markup.Selectors;
};
render(): this;
protected renderMarkup(): void;
protected renderJSONMarkup(markup: Markup.JSONMarkup | Markup.JSONMarkup[]): void;
protected renderStringMarkup(markup: string): void;
protected renderLabels(): this;
protected parseLabelMarkup(markup?: Markup): {
fragment: DocumentFragment;
selectors: {};
} | null;
protected parseLabelStringMarkup(labelMarkup: string): {
fragment: DocumentFragment;
selectors: {};
};
protected normalizeLabelMarkup(markup?: {
fragment: DocumentFragment;
selectors: Markup.Selectors;
} | null): {
node: SVGElement;
selectors: Markup.Selectors;
} | undefined;
protected updateLabels(): void;
protected mergeLabelAttrs(hasCustomMarkup: boolean, labelAttrs?: Attr.CellAttrs | null, defaultLabelAttrs?: Attr.CellAttrs | null): Attr.CellAttrs | null | undefined;
protected customizeLabels(): void;
protected renderTools(): this;
protected renderExternalTools(): this;
renderVertexMarkers(): this;
renderArrowheadMarkers(): this;
update(partialAttrs?: Attr.CellAttrs | null, options?: any): this;
removeRedundantLinearVertices(options?: Edge.SetOptions): number;
updateConnectionPath(): void;
getTerminalView(type: Edge.TerminalType): CellView<Cell<Cell.Properties>, CellView.Options> | null;
getTerminalAnchor(type: Edge.TerminalType): Point;
getTerminalConnectionPoint(type: Edge.TerminalType): Point;
getTerminalMagnet(type: Edge.TerminalType, options?: {
raw?: boolean;
}): Element | null;
updateConnection(options?: any): void;
protected findAnchors(vertices: Point.PointLike[]): {
[x: string]: Point;
};
protected findAnchorsOrdered(firstType: Edge.TerminalType, firstPoint: Point.PointLike, secondType: Edge.TerminalType, secondPoint: Point.PointLike): {
[x: string]: Point;
};
protected getAnchor(def: NodeAnchor.ManaualItem | string | undefined, cellView: CellView, magnet: Element | null, ref: Point | Element | null, terminalType: Edge.TerminalType): Point;
protected findRoutePoints(vertices?: Point.PointLike[]): Point[];
protected findConnectionPoints(routePoints: Point[], sourceAnchor: Point, targetAnchor: Point): {
source: Point;
target: Point;
};
protected getConnectionPoint(def: string | ConnectionPoint.ManaualItem | undefined, view: CellView, magnet: Element, line: Line, endType: Edge.TerminalType): Point;
protected updateMarkerAttr(type: Edge.TerminalType): void;
protected findMarkerPoints(routePoints: Point[], sourcePoint: Point, targetPoint: Point): {
source: Point | undefined;
target: Point | undefined;
};
protected findPath(routePoints: Point[], sourcePoint: Point, targetPoint: Point): Path;
protected translateConnectionPoints(tx: number, ty: number): void;
updateLabelPositions(): this;
updateToolsPosition(): this;
updateArrowheadMarkers(): this;
updateTerminalProperties(type: Edge.TerminalType): boolean;
updateTerminalMagnet(type: Edge.TerminalType): void;
protected translateAndAutoOrientArrows(sourceArrow?: Element, targetArrow?: Element): void;
protected getLabelPositionAngle(idx: number): number;
protected getLabelPositionArgs(idx: number): Edge.LabelPositionOptions | undefined;
protected getDefaultLabelPositionArgs(): Edge.LabelPositionOptions | undefined;
protected mergeLabelPositionArgs(labelPositionArgs?: Edge.LabelPositionOptions, defaultLabelPositionArgs?: Edge.LabelPositionOptions): Edge.LabelPositionOptions | null | undefined;
addLabel(x: number, y: number, options?: Edge.LabelPositionOptions & Edge.SetOptions): number;
addLabel(x: number, y: number, angle: number, options?: Edge.LabelPositionOptions & Edge.SetOptions): number;
addLabel(p: Point | Point.PointLike, options?: Edge.LabelPositionOptions & Edge.SetOptions): number;
addLabel(p: Point | Point.PointLike, angle: number, options?: Edge.LabelPositionOptions & Edge.SetOptions): number;
addVertex(p: Point | Point.PointLike, options?: Edge.SetOptions): number;
addVertex(x: number, y: number, options?: Edge.SetOptions): number;
sendToken(token: string | SVGElement, options?: number | ({
duration?: number;
reversed?: boolean;
selector?: string;
rotate?: boolean | number | 'auto' | 'auto-reverse';
timing?: 'linear' | 'discrete' | 'paced' | 'spline';
} & Dom.AnimateCallbacks & KeyValue<string | number | undefined>), callback?: () => void): () => void;
getConnection(): Path | null;
getConnectionPathData(): string;
getConnectionSubdivisions(): import("../geometry").Segment[][] | null | undefined;
getConnectionLength(): number | undefined;
getPointAtLength(length: number): Point | null;
getPointAtRatio(ratio: number): Point | null;
getTangentAtLength(length: number): Line | null;
getTangentAtRatio(ratio: number): Line | null;
getClosestPoint(point: Point.PointLike): Point | null;
getClosestPointLength(point: Point.PointLike): number | null;
getClosestPointRatio(point: Point.PointLike): number | null;
getLabelPosition(x: number, y: number, options?: Edge.LabelPositionOptions | null): Edge.LabelPositionObject;
getLabelPosition(x: number, y: number, angle: number, options?: Edge.LabelPositionOptions | null): Edge.LabelPositionObject;
protected normalizeLabelPosition(): undefined;
protected normalizeLabelPosition(pos: Edge.LabelPosition): Edge.LabelPositionObject;
protected getLabelTransformationMatrix(labelPosition: Edge.LabelPosition): DOMMatrix;
getLabelCoordinates(pos: Edge.LabelPosition): Point;
getVertexIndex(x: number, y: number): number;
protected getEventArgs<E>(e: E): EdgeView.MouseEventArgs<E>;
protected getEventArgs<E>(e: E, x: number, y: number): EdgeView.PositionEventArgs<E>;
protected notifyUnhandledMouseDown(e: JQuery.MouseDownEvent, x: number, y: number): void;
notifyMouseDown(e: JQuery.MouseDownEvent, x: number, y: number): void;
notifyMouseMove(e: JQuery.MouseMoveEvent, x: number, y: number): void;
notifyMouseUp(e: JQuery.MouseUpEvent, x: number, y: number): void;
onClick(e: JQuery.ClickEvent, x: number, y: number): void;
onDblClick(e: JQuery.DoubleClickEvent, x: number, y: number): void;
onContextMenu(e: JQuery.ContextMenuEvent, x: number, y: number): void;
onMouseDown(e: JQuery.MouseDownEvent, x: number, y: number): void;
onMouseMove(e: JQuery.MouseMoveEvent, x: number, y: number): KeyValue<any>;
onMouseUp(e: JQuery.MouseUpEvent, x: number, y: number): KeyValue<any>;
onMouseOver(e: JQuery.MouseOverEvent): void;
onMouseOut(e: JQuery.MouseOutEvent): void;
onMouseEnter(e: JQuery.MouseEnterEvent): void;
onMouseLeave(e: JQuery.MouseLeaveEvent): void;
onMouseWheel(e: JQuery.TriggeredEvent, x: number, y: number, delta: number): void;
onCustomEvent(e: JQuery.MouseDownEvent, name: string, x: number, y: number): void;
onLabelMouseDown(e: JQuery.MouseDownEvent, x: number, y: number): void;
protected startEdgeDragging(e: JQuery.MouseDownEvent, x: number, y: number): void;
protected dragEdge(e: JQuery.MouseMoveEvent, x: number, y: number): void;
protected stopEdgeDragging(e: JQuery.MouseUpEvent, x: number, y: number): void;
prepareArrowheadDragging(type: Edge.TerminalType, options: {
x: number;
y: number;
options?: KeyValue;
isNewEdge?: boolean;
fallbackAction?: EventData.ArrowheadDragging['fallbackAction'];
}): EventData.ArrowheadDragging;
protected createValidateConnectionArgs(type: Edge.TerminalType): (cellView: CellView, magnet: Element) => EventData.ValidateConnectionArgs;
protected beforeArrowheadDragging(data: EventData.ArrowheadDragging): void;
protected afterArrowheadDragging(data: EventData.ArrowheadDragging): void;
protected arrowheadDragging(target: Element, x: number, y: number, data: EventData.ArrowheadDragging): void;
protected arrowheadDragged(data: EventData.ArrowheadDragging, x: number, y: number): void;
protected snapArrowhead(x: number, y: number, data: EventData.ArrowheadDragging): void;
protected snapArrowheadEnd(data: EventData.ArrowheadDragging): void;
protected finishEmbedding(data: EventData.ArrowheadDragging): void;
protected fallbackConnection(data: EventData.ArrowheadDragging): void;
protected notifyConnectionEvent(data: EventData.ArrowheadDragging, e: JQuery.MouseUpEvent): void;
protected highlightAvailableMagnets(data: EventData.ArrowheadDragging): void;
protected unhighlightAvailableMagnets(data: EventData.ArrowheadDragging): void;
protected startArrowheadDragging(e: JQuery.MouseDownEvent, x: number, y: number): void;
protected dragArrowhead(e: JQuery.MouseMoveEvent, x: number, y: number): void;
protected stopArrowheadDragging(e: JQuery.MouseUpEvent, x: number, y: number): void;
startLabelDragging(e: JQuery.MouseDownEvent, x: number, y: number): void;
dragLabel(e: JQuery.MouseMoveEvent, x: number, y: number): void;
stopLabelDragging(e: JQuery.MouseUpEvent, x: number, y: number): void;
handleVertexAdding(e: JQuery.MouseDownEvent, x: number, y: number): void;
handleVertexRemoving(e: JQuery.MouseDownEvent, x: number, y: number): void;
startVertexDragging(e: JQuery.MouseDownEvent, x: number, y: number): void;
dragVertex(e: JQuery.MouseMoveEvent, x: number, y: number): void;
stopVertexDragging(e: JQuery.MouseUpEvent, x: number, y: number): void;
}
export declare namespace EdgeView {
interface Options extends CellView.Options {
perpendicular: boolean;
doubleTools: boolean;
shortLength: number;
longLength: number;
toolsOffset: number;
doubleToolsOffset: number;
sampleInterval: number;
}
interface ContainerCache {
connection?: Element;
connectionWrap?: Element;
sourceMarker?: Element;
targetMarker?: Element;
labels?: Element;
vertices?: Element;
arrowheads?: Element;
sourceArrowhead?: Element;
targetArrowhead?: Element;
tools?: Element;
}
}
export declare namespace EdgeView {
interface MouseEventArgs<E> {
e: E;
edge: Edge;
cell: Edge;
view: EdgeView;
}
interface PositionEventArgs<E> extends MouseEventArgs<E>, CellView.PositionEventArgs {
}
interface EventArgs {
'edge:click': PositionEventArgs<JQuery.ClickEvent>;
'edge:dblclick': PositionEventArgs<JQuery.DoubleClickEvent>;
'edge:contextmenu': PositionEventArgs<JQuery.ContextMenuEvent>;
'edge:mousedown': PositionEventArgs<JQuery.MouseDownEvent>;
'edge:mousemove': PositionEventArgs<JQuery.MouseMoveEvent>;
'edge:mouseup': PositionEventArgs<JQuery.MouseUpEvent>;
'edge:mouseover': MouseEventArgs<JQuery.MouseOverEvent>;
'edge:mouseout': MouseEventArgs<JQuery.MouseOutEvent>;
'edge:mouseenter': MouseEventArgs<JQuery.MouseEnterEvent>;
'edge:mouseleave': MouseEventArgs<JQuery.MouseLeaveEvent>;
'edge:mousewheel': PositionEventArgs<JQuery.TriggeredEvent> & CellView.MouseDeltaEventArgs;
'edge:customevent': EdgeView.PositionEventArgs<JQuery.MouseDownEvent> & {
name: string;
};
'edge:unhandled:mousedown': PositionEventArgs<JQuery.MouseDownEvent>;
'edge:connected': {
e: JQuery.MouseUpEvent;
edge: Edge;
view: EdgeView;
isNew: boolean;
type: Edge.TerminalType;
previousCell?: Cell | null;
previousView?: CellView | null;
previousPort?: string | null;
previousPoint?: Point.PointLike | null;
previousMagnet?: Element | null;
currentCell?: Cell | null;
currentView?: CellView | null;
currentPort?: string | null;
currentPoint?: Point.PointLike | null;
currentMagnet?: Element | null;
};
'edge:highlight': {
magnet: Element;
view: EdgeView;
edge: Edge;
cell: Edge;
options: CellView.HighlightOptions;
};
'edge:unhighlight': EventArgs['edge:highlight'];
'edge:move': PositionEventArgs<JQuery.MouseMoveEvent>;
'edge:moving': PositionEventArgs<JQuery.MouseMoveEvent>;
'edge:moved': PositionEventArgs<JQuery.MouseUpEvent>;
}
}
export declare namespace EdgeView {
const toStringTag: string;
function isEdgeView(instance: any): instance is EdgeView;
}
declare namespace EventData {
interface MousemoveEventData {
}
interface EdgeDragging {
action: 'drag-edge';
moving: boolean;
x: number;
y: number;
}
type ValidateConnectionArgs = [
CellView | null | undefined,
// source view
Element | null | undefined,
// source magnet
CellView | null | undefined,
// target view
Element | null | undefined,
Edge.TerminalType,
EdgeView
];
interface ArrowheadDragging {
action: 'drag-arrowhead';
x: number;
y: number;
isNewEdge: boolean;
terminalType: Edge.TerminalType;
fallbackAction: 'remove' | 'revert';
initialMagnet: Element | null;
initialTerminal: Edge.TerminalData;
getValidateConnectionArgs: (cellView: CellView, magnet: Element | null) => ValidateConnectionArgs;
zIndex?: number | null;
pointerEvents?: string | null;
/**
* Current event target.
*/
currentTarget?: Element;
/**
* Current view under pointer.
*/
currentView?: CellView | null;
/**
* Current magnet under pointer.
*/
currentMagnet?: Element | null;
closestView?: CellView | null;
closestMagnet?: Element | null;
marked?: KeyValue<Element[]> | null;
options?: KeyValue;
}
interface LabelDragging {
action: 'drag-label';
index: number;
positionAngle: number;
positionArgs?: Edge.LabelPositionOptions | null;
stopPropagation: true;
}
interface VertexDragging {
action: 'drag-vertex';
index: number;
}
}
export {};