react-force-graph-2d
Version:
React component for 2D force directed graphs
118 lines (112 loc) • 5.79 kB
JavaScript
'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var fromKapsule = _interopDefault(require('react-kapsule'));
var ForceGraph2DKapsule = _interopDefault(require('force-graph'));
var PropTypes = _interopDefault(require('prop-types'));
const 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]),
linkSource: PropTypes.string,
linkTarget: PropTypes.string,
linkLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
linkVisibility: PropTypes.oneOfType([PropTypes.bool, PropTypes.string, PropTypes.func]),
linkHoverPrecision: PropTypes.number,
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]),
dagMode: PropTypes.oneOf(['td', 'bu', 'lr', 'rl', 'zin', 'zout', 'radialin', 'radialout']),
dagLevelDistance: PropTypes.number,
d3AlphaDecay: PropTypes.number,
d3VelocityDecay: PropTypes.number,
warmupTicks: PropTypes.number,
cooldownTicks: PropTypes.number,
cooldownTime: PropTypes.number,
onEngineTick: PropTypes.func,
onEngineStop: PropTypes.func
};
const pointerBasedPropTypes = {
onNodeClick: PropTypes.func,
onNodeRightClick: PropTypes.func,
onNodeHover: PropTypes.func,
onNodeDrag: PropTypes.func,
onNodeDragEnd: PropTypes.func,
onLinkClick: PropTypes.func,
onLinkRightClick: PropTypes.func,
onLinkHover: PropTypes.func,
onBackgroundClick: PropTypes.func,
onBackgroundRightClick: PropTypes.func,
enablePointerInteraction: PropTypes.bool,
enableNodeDrag: PropTypes.bool
};
const 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]),
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']),
numDimensions: PropTypes.oneOf([1, 2, 3])
};
const ForceGraph2DPropTypes = Object.assign({}, commonPropTypes, pointerBasedPropTypes, {
nodeCanvasObject: PropTypes.func,
nodeCanvasObjectMode: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
linkCanvasObject: PropTypes.func,
linkCanvasObjectMode: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
enableZoomPanInteraction: PropTypes.bool,
onZoom: PropTypes.func,
onZoomEnd: PropTypes.func
});
const ForceGraph3DPropTypes = Object.assign({}, commonPropTypes, pointerBasedPropTypes, threeBasedPropTypes, {
enableNavigationControls: PropTypes.bool,
controlType: PropTypes.oneOf(['trackball', 'orbit', 'fly']),
rendererConfig: PropTypes.object
});
const ForceGraphVRPropTypes = Object.assign({}, commonPropTypes, threeBasedPropTypes, {
nodeDesc: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
linkDesc: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
onNodeCenterHover: PropTypes.func,
onLinkCenterHover: PropTypes.func
});
const ForceGraphARPropTypes = Object.assign({}, commonPropTypes, threeBasedPropTypes, {
markerAttrs: PropTypes.object,
yOffset: PropTypes.number,
glScale: PropTypes.number,
onNodeCenterHover: PropTypes.func,
onLinkCenterHover: PropTypes.func
});
const ForceGraph2D = fromKapsule(ForceGraph2DKapsule, {
methodNames: [// bind methods
'emitParticle', 'd3Force', 'd3ReheatSimulation', 'stopAnimation', 'pauseAnimation', 'resumeAnimation', 'centerAt', 'zoom', 'screen2GraphCoords', 'graph2ScreenCoords']
});
ForceGraph2D.displayName = 'ForceGraph2D';
ForceGraph2D.propTypes = ForceGraph2DPropTypes;
module.exports = ForceGraph2D;