UNPKG

force-graph

Version:

2D force-directed graph rendered on HTML5 canvas

206 lines (187 loc) 10.6 kB
interface GraphData<N extends NodeObject = NodeObject, L extends LinkObject<N> = LinkObject<N>> { nodes: N[]; links: L[]; } interface NodeObject { id?: string | number; index?: number; x?: number; y?: number; vx?: number; vy?: number; fx?: number; fy?: number; } interface LinkObject<N extends NodeObject = NodeObject> { source?: string | number | N; target?: string | number | N; } type Accessor<In, Out> = Out | string | ((obj: In) => Out); type NodeAccessor<T, N> = Accessor<N, T>; type LinkAccessor<T, N, L> = Accessor<L, T>; type Label = string | HTMLElement; type CanvasCustomRenderMode = 'replace' | 'before' | 'after'; type CanvasCustomRenderModeFn<T> = (obj: T) => CanvasCustomRenderMode | any; type CanvasCustomRenderFn<T> = (obj: T, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; type CanvasPointerAreaPaintFn<T> = (obj: T, paintColor: string, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; type CanvasLinkParticleRenderFn<L> = (x: number, y: number, link: L, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; type DagMode = 'td' | 'bu' | 'lr' | 'rl' | 'radialout' | 'radialin'; interface ForceFn<N extends NodeObject = NodeObject> { (alpha: number): void; initialize?: (nodes: N[], ...args: any[]) => void; [key: string]: any; } declare class ForceGraphGeneric<ChainableInstance, N extends NodeObject = NodeObject, L extends LinkObject<N> = LinkObject<N>> { constructor(element: HTMLElement); resetProps(): ChainableInstance; _destructor(): void; // Data input graphData(): GraphData<N, L>; graphData(data: GraphData<N, L>): ChainableInstance; nodeId(): string; nodeId(id: string): ChainableInstance; linkSource(): string; linkSource(source: string): ChainableInstance; linkTarget(): string; linkTarget(target: string): ChainableInstance; // Container layout width(): number; width(width: number): ChainableInstance; height(): number; height(height: number): ChainableInstance; backgroundColor(): string; backgroundColor(color?: string): ChainableInstance; // Node styling nodeRelSize(): number; nodeRelSize(size: number): ChainableInstance; nodeVal(): NodeAccessor<number, N>; nodeVal(valAccessor: NodeAccessor<number, N>): ChainableInstance; nodeLabel(): NodeAccessor<Label, N>; nodeLabel(labelAccessor: NodeAccessor<Label, N>): ChainableInstance; nodeVisibility(): NodeAccessor<boolean, N>; nodeVisibility(visibilityAccessor: NodeAccessor<boolean, N>): ChainableInstance; nodeColor(): NodeAccessor<string, N>; nodeColor(colorAccessor: NodeAccessor<string, N>): ChainableInstance; nodeAutoColorBy(): NodeAccessor<string | null, N>; nodeAutoColorBy(colorByAccessor: NodeAccessor<string | null, N>): ChainableInstance; nodeCanvasObject(): CanvasCustomRenderFn<N>; nodeCanvasObject(renderFn: CanvasCustomRenderFn<N>): ChainableInstance; nodeCanvasObjectMode(): string | CanvasCustomRenderModeFn<N>; nodeCanvasObjectMode(modeAccessor: string | CanvasCustomRenderModeFn<N>): ChainableInstance; nodePointerAreaPaint(): CanvasPointerAreaPaintFn<N>; nodePointerAreaPaint(renderFn: CanvasPointerAreaPaintFn<N>): ChainableInstance; // Link styling linkLabel(): LinkAccessor<Label, N, L>; linkLabel(labelAccessor: LinkAccessor<Label, N, L>): ChainableInstance; linkVisibility(): LinkAccessor<boolean, N, L>; linkVisibility(visibilityAccessor: LinkAccessor<boolean, N, L>): ChainableInstance; linkColor(): LinkAccessor<string, N, L>; linkColor(colorAccessor: LinkAccessor<string, N, L>): ChainableInstance; linkAutoColorBy(): LinkAccessor<string | null, N, L>; linkAutoColorBy(colorByAccessor: LinkAccessor<string | null, N, L>): ChainableInstance; linkLineDash(): LinkAccessor<number[] | null, N, L>; linkLineDash(linkLineDashAccessor: LinkAccessor<number[] | null, N, L>): ChainableInstance; linkWidth(): LinkAccessor<number, N, L>; linkWidth(widthAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkCurvature(): LinkAccessor<number, N, L>; linkCurvature(curvatureAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkCanvasObject(): CanvasCustomRenderFn<L>; linkCanvasObject(renderFn: CanvasCustomRenderFn<L>): ChainableInstance; linkCanvasObjectMode(): string | CanvasCustomRenderModeFn<L>; linkCanvasObjectMode(modeAccessor: string | CanvasCustomRenderModeFn<L>): ChainableInstance; linkDirectionalArrowLength(): LinkAccessor<number, N, L>; linkDirectionalArrowLength(lengthAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalArrowColor(): LinkAccessor<string, N, L>; linkDirectionalArrowColor(colorAccessor: LinkAccessor<string, N, L>): ChainableInstance; linkDirectionalArrowRelPos(): LinkAccessor<number, N, L>; linkDirectionalArrowRelPos(fractionAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalParticles(): LinkAccessor<number, N, L>; linkDirectionalParticles(numParticlesAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalParticleSpeed(): LinkAccessor<number, N, L>; linkDirectionalParticleSpeed(relDistancePerFrameAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalParticleOffset(): LinkAccessor<number, N, L>; linkDirectionalParticleOffset(relOffset: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalParticleWidth(): LinkAccessor<number, N, L>; linkDirectionalParticleWidth(widthAccessor: LinkAccessor<number, N, L>): ChainableInstance; linkDirectionalParticleColor(): LinkAccessor<string, N, L>; linkDirectionalParticleColor(colorAccessor: LinkAccessor<string, N, L>): ChainableInstance; linkDirectionalParticleCanvasObject(): CanvasLinkParticleRenderFn<L>; linkDirectionalParticleCanvasObject(renderFn: CanvasLinkParticleRenderFn<L>): ChainableInstance; emitParticle(link: L): ChainableInstance; linkPointerAreaPaint(): CanvasPointerAreaPaintFn<L>; linkPointerAreaPaint(renderFn: CanvasPointerAreaPaintFn<L>): ChainableInstance; // Render control autoPauseRedraw(): boolean; autoPauseRedraw(enable?: boolean): ChainableInstance; pauseAnimation(): ChainableInstance; resumeAnimation(): ChainableInstance; centerAt(): {x: number, y: number}; centerAt(x?: number, y?: number, durationMs?: number): ChainableInstance; zoom(): number; zoom(scale: number, durationMs?: number): ChainableInstance; zoomToFit(durationMs?: number, padding?: number, nodeFilter?: (node: N) => boolean): ChainableInstance; minZoom(): number; minZoom(scale: number): ChainableInstance; maxZoom(): number; maxZoom(scale: number): ChainableInstance; onRenderFramePre(callback: (canvasContext: CanvasRenderingContext2D, globalScale: number) => void): ChainableInstance; onRenderFramePost(callback: (canvasContext: CanvasRenderingContext2D, globalScale: number) => void): ChainableInstance; // Force engine (d3-force) configuration dagMode(): DagMode | null; dagMode(mode: DagMode | null): ChainableInstance; dagLevelDistance(): number | null; dagLevelDistance(distance: number): ChainableInstance; dagNodeFilter(): (node: N) => boolean; dagNodeFilter(filterFn: (node: N) => boolean): ChainableInstance; onDagError(): (loopNodeIds: (string | number)[]) => void; onDagError(errorHandleFn: (loopNodeIds: (string | number)[]) => void): ChainableInstance; d3AlphaMin(): number; d3AlphaMin(alphaMin: number): ChainableInstance; d3AlphaDecay(): number; d3AlphaDecay(alphaDecay: number): ChainableInstance; d3VelocityDecay(): number; d3VelocityDecay(velocityDecay: number): ChainableInstance; d3Force(forceName: 'link' | 'charge' | 'center' | string): ForceFn<N> | undefined; d3Force(forceName: 'link' | 'charge' | 'center' | string, forceFn: ForceFn<N> | null): ChainableInstance; d3ReheatSimulation(): ChainableInstance; warmupTicks(): number; warmupTicks(ticks: number): ChainableInstance; cooldownTicks(): number; cooldownTicks(ticks: number): ChainableInstance; cooldownTime(): number; cooldownTime(milliseconds: number): ChainableInstance; onEngineTick(callback: () => void): ChainableInstance; onEngineStop(callback: () => void): ChainableInstance; // Interaction onNodeClick(callback: (node: N, event: MouseEvent) => void): ChainableInstance; onNodeRightClick(callback: (node: N, event: MouseEvent) => void): ChainableInstance; onNodeHover(callback: (node: N | null, previousNode: N | null) => void): ChainableInstance; onNodeDrag(callback: (node: N, translate: { x: number, y: number }) => void): ChainableInstance; onNodeDragEnd(callback: (node: N, translate: { x: number, y: number }) => void): ChainableInstance; onLinkClick(callback: (link: L, event: MouseEvent) => void): ChainableInstance; onLinkRightClick(callback: (link: L, event: MouseEvent) => void): ChainableInstance; onLinkHover(callback: (link: L | null, previousLink: L | null) => void): ChainableInstance; linkHoverPrecision(): number; linkHoverPrecision(precision: number): ChainableInstance; onBackgroundClick(callback: (event: MouseEvent) => void): ChainableInstance; onBackgroundRightClick(callback: (event: MouseEvent) => void): ChainableInstance; showPointerCursor(): Accessor<N | L | undefined, boolean>; showPointerCursor(objAccessor: Accessor<N | L | undefined, boolean>): ChainableInstance; onZoom(callback: (transform: {k: number, x: number, y: number}) => void): ChainableInstance; onZoomEnd(callback: (transform: {k: number, x: number, y: number}) => void): ChainableInstance; enableNodeDrag(): boolean; enableNodeDrag(enable: boolean): ChainableInstance; enableZoomInteraction(): boolean; enableZoomInteraction(enable: boolean | ((event: MouseEvent) => boolean)): ChainableInstance; enablePanInteraction(): boolean; enablePanInteraction(enable: boolean | ((event: MouseEvent) => boolean)): ChainableInstance; enablePointerInteraction(): boolean; enablePointerInteraction(enable?: boolean): ChainableInstance; // Utility getGraphBbox(nodeFilter?: (node: N) => boolean): { x: [number, number], y: [number, number] }; screen2GraphCoords(x: number, y: number): { x: number, y: number }; graph2ScreenCoords(x: number, y: number): { x: number, y: number }; } declare class ForceGraph<N extends NodeObject = NodeObject, L extends LinkObject<N> = LinkObject<N>> extends ForceGraphGeneric<ForceGraph<N, L>, N, L> {} export { ForceGraphGeneric, ForceGraph as default }; export type { CanvasCustomRenderFn, CanvasCustomRenderModeFn, CanvasLinkParticleRenderFn, CanvasPointerAreaPaintFn, GraphData, LinkObject, NodeObject };