declare module "3d-force-graph" {
	interface ForceGraph3DInstance {
		(element: HTMLElement): ForceGraph3DInstance;
		backgroundColor(color: string): ForceGraph3DInstance;
		showNavInfo(show: boolean): ForceGraph3DInstance;
		nodeId(id: string): ForceGraph3DInstance;
		nodeLabel(label: string | ((node: any) => string)): ForceGraph3DInstance;
		nodeThreeObject(fn: (node: any) => any): ForceGraph3DInstance;
		nodeThreeObjectExtend(extend: boolean): ForceGraph3DInstance;
		linkSource(source: string): ForceGraph3DInstance;
		linkTarget(target: string): ForceGraph3DInstance;
		linkColor(fn: (link: any) => string): ForceGraph3DInstance;
		linkWidth(fn: (link: any) => number): ForceGraph3DInstance;
		linkOpacity(opacity: number): ForceGraph3DInstance;
		linkDirectionalArrowLength(len: number | ((link: any) => number)): ForceGraph3DInstance;
		linkDirectionalArrowRelPos(pos: number): ForceGraph3DInstance;
		linkDirectionalArrowColor(fn: (link: any) => string): ForceGraph3DInstance;
		linkCurvature(curvature: number | ((link: any) => number)): ForceGraph3DInstance;
		onNodeClick(fn: (node: any, event: MouseEvent) => void): ForceGraph3DInstance;
		onNodeHover(fn: (node: any | null, prev: any | null) => void): ForceGraph3DInstance;
		graphData(data: { nodes: any[]; links: any[] }): ForceGraph3DInstance;
		graphData(): { nodes: any[]; links: any[] };
		d3Force(name: string, force?: any): any;
		width(width: number): ForceGraph3DInstance;
		height(height: number): ForceGraph3DInstance;
		refresh(): ForceGraph3DInstance;
		scene(): any;
		camera(): any;
		renderer(): any;
		controls(): any;
		[key: string]: any;
	}

	function ForceGraph3D(config?: { controlType?: string }): ForceGraph3DInstance;
	export default ForceGraph3D;
}
