///
import * as React from 'react';
import * as THREE from 'three';
import { Vector3, Mesh, Line, Group } from "three";
import { Observable } from "rxjs/Observable";
export declare type NodeID = string;
export interface Connection {
to: NodeID;
lineMesh?: Line;
incoming?: boolean;
strength?: number;
}
export interface Label {
text: string;
mesh?: Mesh;
}
export interface Node {
id: NodeID;
position: Vector3;
connections: Connection[];
incomingConnections: Connection[];
radius: number;
label: Label;
color?: number;
nodeObject?: Mesh;
dx?: number;
dy?: number;
dz?: number;
weight?: number;
repulsiveForce?: number;
attractiveForce?: number;
}
export interface ReactGraphProps {
handleError?: (any) => void;
handleClick?: (Node) => void;
handleDoubleClick?: (Node) => void;
handleMouseOver?: (Node) => void;
onReady?: () => void;
panRestriction?: number;
showLabels: boolean;
labelsColor: number;
graphColor: number;
edgesHighlightColor: number;
onSelectColor: number;
onHoverColor: number;
highlightEdges: boolean;
nodes: Node[];
transformLayout: boolean;
className?: string;
layoutGenerator?: (iterations: number, width: number, height: number, nodes: Node[]) => Iterator;
}
export interface ReactGraphState {
highlighted: Node;
selected: Node;
transformLayout: boolean;
}
export declare let generateRandomNodes: (n: number, canvasWidth: number) => Node[];
export declare class ReactGraph extends React.Component {
container: HTMLElement;
scene: THREE.Scene;
lights: THREE.Light[];
camera: THREE.PerspectiveCamera;
renderer: THREE.WebGLRenderer;
controls: THREE.OrbitControls;
graph: THREE.Group;
width: number;
height: number;
resize: Observable;
mousemove: Observable;
click: Observable;
dblclick: Observable;
space: Observable;
nodes: Node[];
transparent: Node[];
layoutIterator: Iterator;
constructor(props: any);
componentDidMount(): void;
initGraph(nodes: Node[]): Group;
generateMeshes: (nodes: Node[]) => Node[];
generateLabels(nodes: Node[]): Node[];
setCameraOffset(nodes: any): void;
setupEventListeners(): void;
setTransparent(): void;
makeNotTransparent(nodes: Node[]): Node[];
mouseClickHandler: () => void;
doubleClickHandler: () => void;
highlightPath(nodes: Node[], color: number): void;
highlightEdges(inColor: number, outColor?: number): void;
mouseMoveHandler: () => void;
onSpace(event: any): void;
spaceHandler(): void;
resizeHandler: () => void;
select(position: any): Node;
adjustLayout(): void;
labelsLookAtCamera(): void;
animate(): void;
graphOrigin(nodes: Node[]): Vector3;
updateMeshesPositions(nodes: Node[]): Node[];
onResize(event: any): void;
render(): JSX.Element;
}