export interface GraphData = LinkObject> { nodes: N[]; links: L[]; } export interface NodeObject { id?: string | number; index?: number; x?: number; y?: number; vx?: number; vy?: number; fx?: number; fy?: number; } export interface LinkObject { source?: string | number | N; target?: string | number | N; } type Accessor = Out | string | ((obj: In) => Out); type NodeAccessor = Accessor; type LinkAccessor = Accessor; type Label = string | HTMLElement; type CanvasCustomRenderMode = 'replace' | 'before' | 'after'; export type CanvasCustomRenderModeFn = (obj: T) => CanvasCustomRenderMode | any; export type CanvasCustomRenderFn = (obj: T, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; export type CanvasPointerAreaPaintFn = (obj: T, paintColor: string, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; export type CanvasLinkParticleRenderFn = (x: number, y: number, link: L, canvasContext: CanvasRenderingContext2D, globalScale: number) => void; type DagMode = 'td' | 'bu' | 'lr' | 'rl' | 'radialout' | 'radialin'; interface ForceFn { (alpha: number): void; initialize?: (nodes: N[], ...args: any[]) => void; [key: string]: any; } export declare class ForceGraphGeneric = LinkObject> { constructor(element: HTMLElement); resetProps(): ChainableInstance; _destructor(): void; // Data input graphData(): GraphData; graphData(data: GraphData): 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; nodeVal(valAccessor: NodeAccessor): ChainableInstance; nodeLabel(): NodeAccessor; nodeLabel(labelAccessor: NodeAccessor): ChainableInstance; nodeVisibility(): NodeAccessor; nodeVisibility(visibilityAccessor: NodeAccessor): ChainableInstance; nodeColor(): NodeAccessor; nodeColor(colorAccessor: NodeAccessor): ChainableInstance; nodeAutoColorBy(): NodeAccessor; nodeAutoColorBy(colorByAccessor: NodeAccessor): ChainableInstance; nodeCanvasObject(): CanvasCustomRenderFn; nodeCanvasObject(renderFn: CanvasCustomRenderFn): ChainableInstance; nodeCanvasObjectMode(): string | CanvasCustomRenderModeFn; nodeCanvasObjectMode(modeAccessor: string | CanvasCustomRenderModeFn): ChainableInstance; nodePointerAreaPaint(): CanvasPointerAreaPaintFn; nodePointerAreaPaint(renderFn: CanvasPointerAreaPaintFn): ChainableInstance; // Link styling linkLabel(): LinkAccessor; linkLabel(labelAccessor: LinkAccessor): ChainableInstance; linkVisibility(): LinkAccessor; linkVisibility(visibilityAccessor: LinkAccessor): ChainableInstance; linkColor(): LinkAccessor; linkColor(colorAccessor: LinkAccessor): ChainableInstance; linkAutoColorBy(): LinkAccessor; linkAutoColorBy(colorByAccessor: LinkAccessor): ChainableInstance; linkLineDash(): LinkAccessor; linkLineDash(linkLineDashAccessor: LinkAccessor): ChainableInstance; linkWidth(): LinkAccessor; linkWidth(widthAccessor: LinkAccessor): ChainableInstance; linkCurvature(): LinkAccessor; linkCurvature(curvatureAccessor: LinkAccessor): ChainableInstance; linkCanvasObject(): CanvasCustomRenderFn; linkCanvasObject(renderFn: CanvasCustomRenderFn): ChainableInstance; linkCanvasObjectMode(): string | CanvasCustomRenderModeFn; linkCanvasObjectMode(modeAccessor: string | CanvasCustomRenderModeFn): ChainableInstance; linkDirectionalArrowLength(): LinkAccessor; linkDirectionalArrowLength(lengthAccessor: LinkAccessor): ChainableInstance; linkDirectionalArrowColor(): LinkAccessor; linkDirectionalArrowColor(colorAccessor: LinkAccessor): ChainableInstance; linkDirectionalArrowRelPos(): LinkAccessor; linkDirectionalArrowRelPos(fractionAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticles(): LinkAccessor; linkDirectionalParticles(numParticlesAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticleSpeed(): LinkAccessor; linkDirectionalParticleSpeed(relDistancePerFrameAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticleOffset(): LinkAccessor; linkDirectionalParticleOffset(relOffset: LinkAccessor): ChainableInstance; linkDirectionalParticleWidth(): LinkAccessor; linkDirectionalParticleWidth(widthAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticleColor(): LinkAccessor; linkDirectionalParticleColor(colorAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticleCanvasObject(): CanvasLinkParticleRenderFn; linkDirectionalParticleCanvasObject(renderFn: CanvasLinkParticleRenderFn): ChainableInstance; emitParticle(link: L): ChainableInstance; linkPointerAreaPaint(): CanvasPointerAreaPaintFn; linkPointerAreaPaint(renderFn: CanvasPointerAreaPaintFn): 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 | undefined; d3Force(forceName: 'link' | 'charge' | 'center' | string, forceFn: ForceFn | 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; 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 = LinkObject> extends ForceGraphGeneric, N, L> {} export default ForceGraph;