UNPKG

react-force-graph

Version:

React component for 2D, 3D, VR and AR force directed graphs

159 lines (152 loc) 7.57 kB
import fromKapsule from 'react-kapsule'; import ForceGraphVRKapsule from '3d-force-graph-vr'; import PropTypes from 'prop-types'; import ForceGraphARKapsule from '3d-force-graph-ar'; import ForceGraph3DKapsule from '3d-force-graph'; import ForceGraph2DKapsule from 'force-graph'; var commonPropTypes = { width: PropTypes.number, height: PropTypes.number, graphData: PropTypes.shape({ nodes: PropTypes.arrayOf(PropTypes.object).isRequired, links: PropTypes.arrayOf(PropTypes.object).isRequired }), backgroundColor: PropTypes.string, nodeRelSize: PropTypes.number, nodeId: PropTypes.string, nodeLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), nodeVal: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), nodeVisibility: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.func]), nodeColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), nodeAutoColorBy: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), onNodeHover: PropTypes.func, onNodeClick: PropTypes.func, linkSource: PropTypes.string, linkTarget: PropTypes.string, linkLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkVisibility: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.func]), linkColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkAutoColorBy: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkCurvature: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalArrowLength: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalArrowColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkDirectionalArrowRelPos: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalParticles: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalParticleSpeed: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalParticleWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkDirectionalParticleColor: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), onLinkHover: PropTypes.func, onLinkClick: PropTypes.func, dagMode: PropTypes.oneOf(['td', 'bu', 'lr', 'rl', 'zin', 'zout', 'radialin', 'radialout']), dagLevelDistance: PropTypes.number, dagNodeFilter: PropTypes.func, onDagError: PropTypes.func, d3AlphaMin: PropTypes.number, d3AlphaDecay: PropTypes.number, d3VelocityDecay: PropTypes.number, warmupTicks: PropTypes.number, cooldownTicks: PropTypes.number, cooldownTime: PropTypes.number, onEngineTick: PropTypes.func, onEngineStop: PropTypes.func, getGraphBbox: PropTypes.func }; var pointerBasedPropTypes = { zoomToFit: PropTypes.func, onNodeRightClick: PropTypes.func, onNodeDrag: PropTypes.func, onNodeDragEnd: PropTypes.func, onLinkRightClick: PropTypes.func, linkHoverPrecision: PropTypes.number, onBackgroundClick: PropTypes.func, onBackgroundRightClick: PropTypes.func, enablePointerInteraction: PropTypes.bool, enableNodeDrag: PropTypes.bool }; var threeBasedPropTypes = { showNavInfo: PropTypes.bool, nodeOpacity: PropTypes.number, nodeResolution: PropTypes.number, nodeThreeObject: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]), nodeThreeObjectExtend: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.func]), nodePositionUpdate: PropTypes.func, linkOpacity: PropTypes.number, linkResolution: PropTypes.number, linkCurveRotation: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.func]), linkMaterial: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]), linkThreeObject: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]), linkThreeObjectExtend: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.func]), linkPositionUpdate: PropTypes.func, linkDirectionalArrowResolution: PropTypes.number, linkDirectionalParticleResolution: PropTypes.number, forceEngine: PropTypes.oneOf(['d3', 'ngraph']), ngraphPhysics: PropTypes.object, numDimensions: PropTypes.oneOf([1, 2, 3]) }; var ForceGraph2DPropTypes = Object.assign({}, commonPropTypes, pointerBasedPropTypes, { linkLineDash: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.string, PropTypes.func]), nodeCanvasObjectMode: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), nodeCanvasObject: PropTypes.func, nodePointerAreaPaint: PropTypes.func, linkCanvasObjectMode: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkCanvasObject: PropTypes.func, linkPointerAreaPaint: PropTypes.func, autoPauseRedraw: PropTypes.bool, minZoom: PropTypes.number, maxZoom: PropTypes.number, enableZoomInteraction: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]), enablePanInteraction: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]), onZoom: PropTypes.func, onZoomEnd: PropTypes.func, onRenderFramePre: PropTypes.func, onRenderFramePost: PropTypes.func }); var ForceGraph3DPropTypes = Object.assign({}, commonPropTypes, pointerBasedPropTypes, threeBasedPropTypes, { enableNavigationControls: PropTypes.bool, controlType: PropTypes.oneOf(['trackball', 'orbit', 'fly']), rendererConfig: PropTypes.object, extraRenderers: PropTypes.arrayOf(PropTypes.shape({ render: PropTypes.func.isRequired })) }); var ForceGraphVRPropTypes = Object.assign({}, commonPropTypes, threeBasedPropTypes, { nodeDesc: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), linkDesc: PropTypes.oneOfType([PropTypes.string, PropTypes.func]) }); var ForceGraphARPropTypes = Object.assign({}, commonPropTypes, threeBasedPropTypes, { markerAttrs: PropTypes.object, yOffset: PropTypes.number, glScale: PropTypes.number }); const ForceGraphVR = fromKapsule(ForceGraphVRKapsule, { methodNames: [ // bind methods 'getGraphBbox', 'emitParticle', 'd3Force', 'd3ReheatSimulation', 'refresh'] }); ForceGraphVR.displayName = 'ForceGraphVR'; ForceGraphVR.propTypes = ForceGraphVRPropTypes; const ForceGraphAR = fromKapsule(ForceGraphARKapsule, { methodNames: [ // bind methods 'getGraphBbox', 'emitParticle', 'd3Force', 'd3ReheatSimulation', 'refresh'], initPropNames: ['markerAttrs'] }); ForceGraphAR.displayName = 'ForceGraphAR'; ForceGraphAR.propTypes = ForceGraphARPropTypes; const ForceGraph3D = fromKapsule(ForceGraph3DKapsule, { methodNames: [ // bind methods 'emitParticle', 'd3Force', 'd3ReheatSimulation', 'stopAnimation', 'pauseAnimation', 'resumeAnimation', 'cameraPosition', 'zoomToFit', 'getGraphBbox', 'screen2GraphCoords', 'graph2ScreenCoords', 'postProcessingComposer', 'lights', 'scene', 'camera', 'renderer', 'controls', 'refresh'], initPropNames: ['controlType', 'rendererConfig', 'extraRenderers'] }); ForceGraph3D.displayName = 'ForceGraph3D'; ForceGraph3D.propTypes = ForceGraph3DPropTypes; const ForceGraph2D = fromKapsule(ForceGraph2DKapsule, { methodNames: [ // bind methods 'emitParticle', 'd3Force', 'd3ReheatSimulation', 'stopAnimation', 'pauseAnimation', 'resumeAnimation', 'centerAt', 'zoom', 'zoomToFit', 'getGraphBbox', 'screen2GraphCoords', 'graph2ScreenCoords'] }); ForceGraph2D.displayName = 'ForceGraph2D'; ForceGraph2D.propTypes = ForceGraph2DPropTypes; export { ForceGraph2D, ForceGraph3D, ForceGraphAR, ForceGraphVR };