react-liquid-gauge  
 
  React Liquid Gauge component. It's heavily inspired by D3 Liquid Fill Gauge and react-liquidchart.
Demo: http://trendmicro-frontend.github.io/react-liquid-gauge
The sample code can be found in the examples directory.
Installation
npm install --save react react-dom react-liquid-gauge Usage
import { color } from 'd3-color'; import { interpolateRgb } from 'd3-interpolate'; import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import LiquidFillGauge from 'react-liquid-gauge';  class App extends Component {     state = {         value: 50     };     startColor = '#6495ed'; // cornflowerblue     endColor = '#dc143c'; // crimson      render() {         const radius = 200;         const interpolate = interpolateRgb(this.startColor, this.endColor);         const fillColor = interpolate(this.state.value / 100);         const gradientStops = [             {                 key: '0%',                 stopColor: color(fillColor).darker(0.5).toString(),                 stopOpacity: 1,                 offset: '0%'             },             {                 key: '50%',                 stopColor: fillColor,                 stopOpacity: 0.75,                 offset: '50%'             },             {                 key: '100%',                 stopColor: color(fillColor).brighter(0.5).toString(),                 stopOpacity: 0.5,                 offset: '100%'             }         ];          return (             <div>                 <LiquidFillGauge                     style={{ margin: '0 auto' }}                     width={radius * 2}                     height={radius * 2}                     value={this.state.value}                     percent="%"                     textSize={1}                     textOffsetX={0}                     textOffsetY={0}                     textRenderer={(props) => {                         const value = Math.round(props.value);                         const radius = Math.min(props.height / 2, props.width / 2);                         const textPixels = (props.textSize * radius / 2);                         const valueStyle = {                             fontSize: textPixels                         };                         const percentStyle = {                             fontSize: textPixels * 0.6                         };                          return (                             <tspan>                                 <tspan className="value" style={valueStyle}>{value}</tspan>                                 <tspan style={percentStyle}>{props.percent}</tspan>                             </tspan>                         );                     }}                     riseAnimation                     waveAnimation                     waveFrequency={2}                     waveAmplitude={1}                     gradient                     gradientStops={gradientStops}                     circleStyle={{                         fill: fillColor                     }}                     waveStyle={{                         fill: fillColor                     }}                     textStyle={{                         fill: color('#444').toString(),                         fontFamily: 'Arial'                     }}                     waveTextStyle={{                         fill: color('#fff').toString(),                         fontFamily: 'Arial'                     }}                     onClick={() => {                         this.setState({ value: Math.random() * 100 });                     }}                 />                 <div                     style={{                         margin: '20px auto',                         width: 120                     }}                 >                     <button                         type="button"                         className="btn btn-default btn-block"                         onClick={() => {                             this.setState({ value: Math.random() * 100 });                         }}                     >                         Refresh                     </button>                 </div>             </div>         );     } }  ReactDOM.render(     <App />,     document.getElementById('container') );API
Properties
| Name | Type | Default | Description | 
|---|---|---|---|
| id | String | A unique identifier (ID) to identify the element. Defaults to a unique random string. | |
| width | Number | 400 | The width of the component. | 
| height | Number | 400 | The height of the component. | 
| value | Number | 0 | The percent value (0-100). | 
| percent | String|Node | '%' | The percent string (%) or SVG text element. | 
| textSize | Number | 1 | The relative height of the text to display in the wave circle. A value of 1 equals 50% of the radius of the outer circle. | 
| textOffsetX | Number | 0 | |
| textOffsetY | Number | 0 | |
| textRenderer | Function(props) | Specifies a custom text renderer for rendering a percent value. | |
| riseAnimation | Boolean | false | Controls if the wave should rise from 0 to it's full height, or start at it's full height. | 
| riseAnimationTime | Number | 2000 | The amount of time in milliseconds for the wave to rise from 0 to it's final height. | 
| riseAnimationEasing | String | 'cubicInOut' | d3-ease options. See the easing explorer for a visual demostration. | 
| riseAnimationOnProgress | Function({ value, container }) | Progress callback function. | |
| riseAnimationOnComplete | Function({ value, container }) | Complete callback function. | |
| waveAnimation | Boolean | false | Controls if the wave scrolls or is static. | 
| waveAnimationTime | Number | 2000 | The amount of time in milliseconds for a full wave to enter the wave circle. | 
| waveAnimationEasing | String | 'linear' | d3-ease options. See the easing explorer for a visual demostration. | 
| waveAmplitude | Number | 1 | The wave height as a percentage of the radius of the wave circle. | 
| waveFrequency | Number | 2 | The number of full waves per width of the wave circle. | 
| gradient | Boolean | false | Whether to apply linear gradients to fill the wave circle. | 
| gradientStops | Node|Array | An array of the <stop> SVG element defines the ramp of colors to use on a gradient, which is a child element to either the <linearGradient> or the <radialGradient> element. | |
| onClick | Function(event) | onClick event handler. | |
| innerRadius | Number | 0.9 | The radius of the inner circle. A value of 0.9 equals 90% of the radius of the outer circle. | 
| outerRadius | Number | 1.0 | The radius of the outer circle. A value of 1 equals 100% of the radius of the outer circle. | 
| margin | Number | 0.025 | The size of the gap between the outer circle and wave circle as a percentage of the radius of the outer circle. A value of 0.025 equals 2.5% of the radius of the outer circle. | 
| circleStyle | Object | {   fill: 'rgb(23, 139, 202)' } | The style of the outer circle. | 
| waveStyle | Object | {   fill: 'rgb(23, 139, 202)' } | The style of the fill wave. | 
| textStyle | Object | {   fill: 'rgb(0, 0, 0)' } | The style of the text when the wave does not overlap it. | 
| waveTextStyle | Object | {   fill: 'rgb(255, 255, 255)' } | The style of the text when the wave overlaps it. | 
License
MIT
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
