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 };