export interface GraphData { nodes: NodeObject[]; links: LinkObject[]; } export type NodeObject = { [s: string]: unknown; id?: string; x?: number; y?: number; degree?: number; z?: number; vx?: number; vy?: number; vz?: number; fx?: number; fy?: number; }; export type LinkObject = { id?: string; source?: string | number | NodeObject; target?: string | number | NodeObject; graphIndex?: number; [s: string]: unknown; }; type Accessor = Out | string | ((obj: In) => Out); type NodeAccessor = Accessor; type LinkAccessor = Accessor; type CanvasCustomRenderMode = 'replace' | 'before' | 'after'; type CanvasCustomRenderFn = ( obj: T, canvasContext: CanvasRenderingContext2D, globalScale: number, isShadow: boolean ) => void; type CanvasPointerAreaPaintFn = ( obj: T, paintColor: string, canvasContext: CanvasRenderingContext2D, globalScale: number ) => void; export type DagMode = 'td' | 'bu' | 'lr' | 'rl' | 'radialout' | 'radialin'; interface ForceFn { (alpha: number): void; initialize?: (nodes: NodeObject[]) => void; [key: string]: any; } export interface ForceGraphGenericInstance { (element: HTMLElement): ChainableInstance; 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 | ((obj: NodeObject) => CanvasCustomRenderMode); nodeCanvasObjectMode(modeAccessor: string | ((obj: NodeObject) => CanvasCustomRenderMode)): 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; linkRender(renderFn: CanvasCustomRenderFn): ChainableInstance; linkCanvasObjectMode(): string | ((obj: LinkObject) => CanvasCustomRenderMode); linkCanvasObjectMode(modeAccessor: string | ((obj: LinkObject) => CanvasCustomRenderMode)): 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; linkDirectionalParticleWidth(): LinkAccessor; linkDirectionalParticleWidth(widthAccessor: LinkAccessor): ChainableInstance; linkDirectionalParticleColor(): LinkAccessor; linkDirectionalParticleColor(colorAccessor: LinkAccessor): ChainableInstance; emitParticle(link: LinkObject): 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: NodeObject) => 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; dagMode(mode: DagMode): ChainableInstance; dagLevelDistance(): number | null; dagLevelDistance(distance: number): ChainableInstance; dagNodeFilter(): (node: NodeObject) => boolean; dagNodeFilter(filterFn: (node: NodeObject) => 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): 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: NodeObject, event: MouseEvent) => void): ChainableInstance; onNodeDoubleClick(callback: (node: NodeObject, event: MouseEvent) => void): ChainableInstance; onNodeRightClick(callback: (node: NodeObject, event: MouseEvent) => void): ChainableInstance; onNodeHover(callback: (node: NodeObject | null, previousNode: NodeObject | null) => void): ChainableInstance; onNodeDrag(callback: (node: NodeObject, translate: { x: number; y: number }) => void): ChainableInstance; onNodeDragEnd(callback: (node: NodeObject, translate: { x: number; y: number }) => void): ChainableInstance; onLinkClick(callback: (link: LinkObject, event: MouseEvent) => void): ChainableInstance; onLinkDoubleClick(callback: (link: LinkObject, event: MouseEvent) => void): ChainableInstance; onLinkRightClick(callback: (link: LinkObject, event: MouseEvent) => void): ChainableInstance; onLinkHover(callback: (link: LinkObject | null, previousLink: LinkObject | 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): ChainableInstance; enablePanInteraction(): boolean; enablePanInteraction(enable: boolean): ChainableInstance; enablePointerInteraction(): boolean; enablePointerInteraction(enable?: boolean): ChainableInstance; getState(): any; // Utility getGraphBbox(nodeFilter?: (node: NodeObject) => 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 }; } export type ForceGraphInstance = ForceGraphGenericInstance; declare function ForceGraph(): ForceGraphInstance; export default ForceGraph;