declare class Vec {
x: number;
y: number;
constructor(x: number, y: number);
add(v: Vec): void;
}
type DummyValues = {
srcNodeKey: string;
srcNodeAttributes: A | undefined;
destNodeKey: string;
destNodeAttributes: A | undefined;
};
declare class Node {
key: string;
depth: number;
position: Vec;
orderNr: number;
optimalPosY: number;
attributes: A | undefined;
clicked: boolean;
mouseOver: boolean;
dummyValues?: DummyValues;
edges: Edge[];
inEdges: Edge[];
constructor(key: string, attributes?: A, dummyValues?: DummyValues);
get dummy(): boolean;
get posX(): number;
set posX(x: number);
get posY(): number;
set posY(y: number);
equalValues(node: Node): boolean;
equalStructure(node: Node): boolean;
setOptimalPositionY(srcNodes: Node[], canvasHeigth: number): void;
hasEdges(): boolean;
setDepth(depth: number): void;
}
type BezierPoints = {
cp1: Vec;
cp2: Vec;
};
type State = {
clicked: boolean;
mouseOver: boolean;
};
declare class Edge {
srcNode: Node;
destNode: Node;
bezierPoints: BezierPoints;
state: State;
constructor(srcNode: Node, destNode: Node, state?: State);
}
declare class Graph {
nodes: Map>;
rootNodeKeys: string[];
isDepthSet: Boolean;
constructor();
addNode(key: string, attributes?: A, dummyValues?: DummyValues): Node;
addEdge(srcNodeKey: string, destNodeKey: string, sharedState?: State): void;
initialize(rootNodeKeys: string[]): void;
createDummyNodes(): void;
removeEdge(srcNode: Node, destNode: Node): void;
getDepth(): number;
equalValues(graph: Graph): boolean;
equalStructure(graph: Graph): boolean;
getNodesAtDepth(depth: number): Node[];
setDepthNodes(): void;
static clone(graph: Graph): Graph;
}
declare class Drawer {
graph: Graph;
config: ConfigIntern;
context: CanvasRenderingContext2D;
constructor(config: ConfigIntern, canvas: HTMLCanvasElement);
setBezierCurvePoints(): void;
draw(graph?: Graph): void;
drawBackground(): void;
drawNode(node: Node): void;
drawEdges(node: Node): void;
}
declare class Positioner {
config: ConfigIntern;
drawer: Drawer;
constructor(config: ConfigIntern, drawer: Drawer);
setPositions(inputGraph: Graph): void;
setCoordinates(graph: Graph): void;
getPositionsY(nodeCount: number): number[];
setPositionY(graph: Graph): void;
setPositionX(graph: Graph): void;
ordering(graph: Graph): Graph;
sweepLeftToRight(graph: Graph): void;
sweepRightToLeft(graph: Graph): void;
transpose(graph: Graph): void;
median(arr: number[]): number;
/**
* Calculates the optimal y position.
* Function is minimizing the edge length from the incoming edges of a node.
*/
optimalPositionY(node: Node): number;
linearCoefficient(srcNode: Node, destNode: Node): number[];
checkIntersection(edgeA: Edge, edgeB: Edge): boolean;
crossingAdjacentLayers(depth: number, graph: Graph): number;
crossingsLayer(nodes: Node[]): number;
crossings(graph: Graph): number;
}
type GraphMethods = {
getNodeKeys: (graph: G) => string[];
getDestNodeKeys: (graph: G, nodeKey: string) => string[];
getNodeAttribute?: (graph: G, nodeKey: string) => A;
};
type ConfigIntern = {
maxArrangements: number;
maxIntersections: number;
width: number;
height: number;
paddingGraph: number;
nodeClick: (key: string, position: {
x: number;
y: number;
}, event: MouseEvent, draw: () => void) => void;
nodeHover: (key: string | null, position: {
x: number;
y: number;
} | null, event: MouseEvent, draw: () => void) => void;
edgeClick: (srcNodeKey: string, destNodeKey: string, event: MouseEvent, draw: () => void) => void;
edgeHover: (srcNodeKey: string | null, destNodeKey: string | null, event: MouseEvent, draw: () => void) => void;
nodeEventThreshold: number;
edgeEventThreshold: number;
backgroundColor: string;
nodeRadius: ((key: string, attribute: A, clicked: boolean, mouseOver: boolean) => number) | number;
nodeBorderWidth: ((key: string, attribute: A, clicked: boolean, mouseOver: boolean) => number) | number;
nodeBorderColor: ((key: string, attribute: A, clicked: boolean, mouseOver: boolean) => string) | string;
nodeColor: ((key: string, attribute: A, clicked: boolean, mouseOver: boolean) => string) | string;
nodeHasText: boolean;
nodeTextOffset: {
x: number;
y: number;
};
nodeFontColor: string;
nodeFontSize: number;
nodeFont: string;
nodeText: ((key: string, attribute: A, clicked: boolean, mouseOver: boolean) => string) | string;
edgeWidth: ((srcNodeKey: string, destNodeKey: string, srcAttribute: A, destNodeAttribute: A, clicked: boolean, mouseOver: boolean) => number) | number;
edgeColor: ((srcNodeKey: string, destNodeKey: string, srcAttribute: A, destNodeAttribute: A, clicked: boolean, mouseOver: boolean) => string) | string;
styleCanvas: Partial;
};
type Config = Partial>;
declare class GraphDrawer {
graphMethods: GraphMethods;
config: ConfigIntern;
graph: Graph;
canvas: HTMLCanvasElement;
drawer: Drawer;
positioner: Positioner;
constructor(graphMethods: GraphMethods, container: HTMLElement, config: Partial>);
createCanvas(container: HTMLElement): HTMLCanvasElement;
setupMouseMoveListener(): void;
setupMouseClickListener(): void;
distance(p1: Vec, p2: Vec): number;
cubicBezier(t: number, P0: Vec, P1: Vec, P2: Vec, P3: Vec): Vec;
edgeAtPosition(pos: Vec): Edge | null;
nodeAtPosition(pos: Vec): Node | null;
update(inputGraph: G, rootNodes: string[]): void;
}
export { type Config, type ConfigIntern, type GraphMethods, GraphDrawer as default };