From d6a02688e6f6499205ba514d0431299e354d8b1e Mon Sep 17 00:00:00 2001 From: Sanzhar Date: Tue, 5 Nov 2019 15:38:05 +0600 Subject: [PATCH 1/2] Allowed rerenders on nbrOfLines change --- .idea/.gitignore | 2 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/react-gauge-chart.iml | 12 + .idea/vcs.xml | 6 + src/App.js | 148 +++-- src/lib/GaugeChart/index.js | 612 ++++++++++--------- yarn.lock | 306 +++++++--- 9 files changed, 664 insertions(+), 442 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/react-gauge-chart.iml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..24eb271 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..20a69eb --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/react-gauge-chart.iml b/.idea/react-gauge-chart.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/react-gauge-chart.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/App.js b/src/App.js index 1e9a8dd..ef36fae 100644 --- a/src/App.js +++ b/src/App.js @@ -1,71 +1,91 @@ -import React, { Component } from 'react' -import { Container, Row, Col } from 'react-bootstrap' +import React, {Component} from 'react' +import {Col, Container, Row} from 'react-bootstrap' import './App.css' import GaugeChart from './lib' class App extends Component { - render() { - return ( - <> - - - -

React Gauge Chart Demo

- -
- - -
GaugeChart with default props
- - - -
GaugeChart with 20 levels
- - -
- - -
GaugeChart with custom colors
- - - -
GaugeChart with larger padding between elements
- - -
- - -
GaugeChart with custom arcs width
- - - -
GaugeChart without animation
- - -
-
- - ) - } + + state = { + lines: 20 + } + + componentDidMount() { + this.intervalID = setInterval(() => { + if (this.state.lines > 25) { + clearInterval(this.intervalID) + } else { + this.setState({ + lines: this.state.lines + 1 + }) + } + + }, 1000) + } + + render() { + return ( + <> + + + +

React Gauge Chart Demo

+ +
+ + +
GaugeChart with default props
+ + + +
GaugeChart with {this.state.lines} levels
+ + +
+ + +
GaugeChart with custom colors
+ + + +
GaugeChart with larger padding between elements
+ + +
+ + +
GaugeChart with custom arcs width
+ + + +
GaugeChart without animation
+ + +
+
+ + ) + } } export default App diff --git a/src/lib/GaugeChart/index.js b/src/lib/GaugeChart/index.js index 88f5ff4..962037e 100644 --- a/src/lib/GaugeChart/index.js +++ b/src/lib/GaugeChart/index.js @@ -1,6 +1,5 @@ import React from 'react' -import { arc, pie, select, easeElastic, - scaleLinear, interpolateHsl } from 'd3' +import {arc, easeElastic, interpolateHsl, pie, scaleLinear, select} from 'd3' import PropTypes from 'prop-types' import './style.css' @@ -21,305 +20,352 @@ const endAngle = Math.PI / 2 //Positive x-axis const animateNeedleProps = ['marginInPercent', 'arcPadding', 'percent', 'nrOfLevels'] class GaugeChart extends React.Component { - constructor(props) { - super(props) - const { nrOfLevels, colors } = this.props - //Class variables - this.svg = {} - this.g = {} - this.width = {} - this.height = {} - this.doughnut = {} - this.needle = {} - this.data = {} - this.outerRadius = {} - this.margin = {} // = {top: 20, right: 50, bottom: 50, left: 50}, - this.arc = arc() - this.pie = pie() - - // We have to make a decision about number of arcs to display - // If arcsLength is setted, we choose arcsLength length instead of nrOfLevels - this.nbArcsToDisplay = props.arcsLength ? props.arcsLength.length : nrOfLevels - - //Check if the number of colors equals the number of levels - //Otherwise make an interpolation - if (this.nbArcsToDisplay === colors.length) { - this.colorArray = colors - } else { - this.colorArray = this.getColors() + + state = { + nbArcsToDisplay: this.props.nrOfLevels, + arcData: [], + mounted: false, + colorArray: [] + } + + constructor(props) { + super(props) + const {nrOfLevels, colors} = this.props + //Class variables + this.svg = {} + this.g = {} + this.width = {} + this.height = {} + this.doughnut = {} + this.needle = {} + this.data = {} + this.outerRadius = {} + this.margin = {} // = {top: 20, right: 50, bottom: 50, left: 50}, + this.arc = arc() + this.pie = pie() + + // We have to make a decision about number of arcs to display + // If arcsLength is setted, we choose arcsLength length instead of nrOfLevels + const nbArcs = props.arcsLength ? props.arcsLength.length : nrOfLevels + this.setState({ + nbArcsToDisplay: nbArcs + }) + + //Check if the number of colors equals the number of levels + //Otherwise make an interpolation + if (nbArcs === colors.length) { + this.colorArray = colors + } else { + this.colorArray = this.getColors() + } + + //The data that is used to create the arc + // Each arc could have hiw own value width arcsLength prop + this.arcData = [] + for (var i = 0; i < nbArcs; i++) { + var arcDatum = { + value: props.arcsLength && props.arcsLength.length > i ? props.arcsLength[i] : 1, + color: this.colorArray[i] + } + this.arcData.push(arcDatum) + } + this.setState({ + arcData: this.arcData, + colorArray: this.colorArray, + mounted:true + }) + } + + componentDidMount() { + if (this.props.id) { + this.container = select(`#${this.props.id + this.state.nbArcsToDisplay}`) + //Initialize chart + this.initChart() + } + } + + componentDidUpdate(prevProps) { + //Initialize chart + // Always redraw the chart, but potentially do not animate it + const resize = !animateNeedleProps.some(key => prevProps[key] !== this.props[key]) + this.initChart(true, resize) + + if(prevProps.nrOfLevels !== this.props.nrOfLevels){ + const nbArcs = this.props.arcsLength ? this.props.arcsLength.length : this.props.nrOfLevels + + let colorArray = [] + if (nbArcs === this.props.colors.length) { + colorArray = this.props.colors + } else { + colorArray = this.getColors(nbArcs) + } + + //The data that is used to create the arc + // Each arc could have hiw own value width arcsLength prop + this.arcData = [] + for (var i = 0; i < nbArcs; i++) { + var arcDatum = { + value: this.props.arcsLength && this.props.arcsLength.length > i ? this.props.arcsLength[i] : 1, + color: colorArray[i] + } + this.arcData.push(arcDatum) + } + this.setState({ + arcData: this.arcData, + nbArcsToDisplay: nbArcs + }) + } + } + + initChart = (update, resize = false) => { + if (update) { + this.renderChart(resize) + return + } + + this.svg = this.container.append('svg') + this.g = this.svg.append('g') //Used for margins + this.doughnut = this.g.append('g').attr('class', 'doughnut') + + //Set up the pie generator + //Each arc should be of equal length (or should they?) + this.pie + .value(function (d) { + return d.value + }) + //.padAngle(arcPadding) + .startAngle(startAngle) + .endAngle(endAngle) + .sort(null) + //Add the needle element + this.needle = this.g.append('g').attr('class', 'needle') + //Set up resize event listener to re-render the chart everytime the window is resized + window.addEventListener('resize', () => { + var resize = true + this.renderChart(resize) + }) + this.renderChart(resize) + } + + //Renders the chart, should be called every time the window is resized + renderChart = resize => { + this.updateDimensions() + //Set dimensions of svg element and translations + this.svg + .attr('width', this.width + this.margin.left + this.margin.right) + .attr('height', this.height + this.margin.top + this.margin.bottom) + this.g.attr('transform', 'translate(' + this.margin.left + ', ' + this.margin.top + ')') + //Set the radius to lesser of width or height and remove the margins + //Calculate the new radius + this.calculateRadius() + this.doughnut.attr('transform', 'translate(' + this.outerRadius + ', ' + this.outerRadius + ')') + //Setup the arc + this.arc + .outerRadius(this.outerRadius) + .innerRadius(this.outerRadius * (1 - this.props.arcWidth)) + .cornerRadius(this.props.cornerRadius) + .padAngle(this.props.arcPadding) + //Remove the old stuff + this.doughnut.selectAll('.arc').remove() + this.needle.selectAll('*').remove() + this.g.selectAll('.text-group').remove() + //Draw the arc + var arcPaths = this.doughnut + .selectAll('.arc') + .data(this.pie(!this.state.mounted ? this.arcData : this.state.arcData)) + .enter() + .append('g') + .attr('class', 'arc') + arcPaths + .append('path') + .attr('d', this.arc) + .style('fill', function (d) { + return d.data.color + }) + + this.drawNeedle(resize) + //Translate the needle starting point to the middle of the arc + this.needle.attr('transform', 'translate(' + this.outerRadius + ', ' + this.outerRadius + ')') } - //The data that is used to create the arc - // Each arc could have hiw own value width arcsLength prop - this.arcData = [] - for (var i = 0; i < this.nbArcsToDisplay; i++) { - var arcDatum = { - value: props.arcsLength && props.arcsLength.length > i ? props.arcsLength[i] : 1, - color: this.colorArray[i] - } - this.arcData.push(arcDatum) + + updateDimensions = () => { + //TODO: Fix so that the container is included in the component + const {marginInPercent} = this.props + var divDimensions = this.container.node().getBoundingClientRect(), + divWidth = divDimensions.width, + divHeight = divDimensions.height + //Set the new width and horizontal margins + this.margin.left = divWidth * marginInPercent + this.margin.right = divWidth * marginInPercent + this.width = divWidth - this.margin.left - this.margin.right + + this.margin.top = divHeight * marginInPercent + this.margin.bottom = divHeight * marginInPercent + this.height = this.width / 2 - this.margin.top - this.margin.bottom + //this.height = divHeight - this.margin.top - this.margin.bottom; + } + + calculateRadius = () => { + //The radius needs to be constrained by the containing div + //Since it is a half circle we are dealing with the height of the div + //Only needs to be half of the width, because the width needs to be 2 * radius + //For the whole arc to fit + + //First check if it is the width or the height that is the "limiting" dimension + if (this.width < 2 * this.height) { + //Then the width limits the size of the chart + //Set the radius to the width - the horizontal margins + this.outerRadius = (this.width - this.margin.left - this.margin.right) / 2 + } else { + this.outerRadius = this.height - this.margin.top - this.margin.bottom + } + this.centerGraph() } - } - componentDidMount() { - if (this.props.id) { - this.container = select(`#${this.props.id}`) - //Initialize chart - this.initChart() + //Calculates new margins to make the graph centered + centerGraph = () => { + this.margin.left = this.width / 2 - this.outerRadius + this.margin.right + this.g.attr('transform', 'translate(' + this.margin.left + ', ' + this.margin.top + ')') } - } - - componentDidUpdate(prevProps) { - //Initialize chart - // Always redraw the chart, but potentially do not animate it - const resize = !animateNeedleProps.some(key => prevProps[key] !== this.props[key]) - this.initChart(true, resize) - } - - initChart = (update, resize = false) => { - if (update) { - this.renderChart(resize) - return + + //If 'resize' is true then the animation does not play + drawNeedle = (resize) => { + const {percent, needleColor, needleBaseColor, hideText, animate} = this.props; + const {container, calculateRotation} = this; + var needleRadius = 15 * (this.width / 500), // Make the needle radius responsive + centerPoint = [0, -needleRadius / 2]; + //Draw the triangle + //var pathStr = `M ${leftPoint[0]} ${leftPoint[1]} L ${topPoint[0]} ${topPoint[1]} L ${rightPoint[0]} ${rightPoint[1]}`; + var pathStr = this.calculateRotation(0) + this.needle + .append('path') + .attr('d', pathStr) + .attr('fill', needleColor) + //Add a circle at the bottom of needle + this.needle + .append('circle') + .attr('cx', centerPoint[0]) + .attr('cy', centerPoint[1]) + .attr('r', needleRadius) + .attr('fill', needleBaseColor) + if (!hideText) { + this.addText(percent) + } + //Rotate the needle + if (!resize && animate) { + this.needle.transition() + .delay(500) + .ease(easeElastic) + .duration(3000) + .tween('progress', function () { + return function (percentOfPercent) { + var progress = percentOfPercent * percent; + return container.select(`.needle path`).attr("d", calculateRotation(progress)); + } + }); + } else { + container.select(`.needle path`).attr("d", calculateRotation(percent)); + } } - this.svg = this.container.append('svg') - this.g = this.svg.append('g') //Used for margins - this.doughnut = this.g.append('g').attr('class', 'doughnut') - - //Set up the pie generator - //Each arc should be of equal length (or should they?) - this.pie - .value(function(d) { - return d.value - }) - //.padAngle(arcPadding) - .startAngle(startAngle) - .endAngle(endAngle) - .sort(null) - //Add the needle element - this.needle = this.g.append('g').attr('class', 'needle') - //Set up resize event listener to re-render the chart everytime the window is resized - window.addEventListener('resize', () => { - var resize = true - this.renderChart(resize) - }) - this.renderChart(resize) - } - - //Renders the chart, should be called every time the window is resized - renderChart = resize => { - this.updateDimensions() - //Set dimensions of svg element and translations - this.svg - .attr('width', this.width + this.margin.left + this.margin.right) - .attr('height', this.height + this.margin.top + this.margin.bottom) - this.g.attr('transform', 'translate(' + this.margin.left + ', ' + this.margin.top + ')') - //Set the radius to lesser of width or height and remove the margins - //Calculate the new radius - this.calculateRadius() - this.doughnut.attr('transform', 'translate(' + this.outerRadius + ', ' + this.outerRadius + ')') - //Setup the arc - this.arc - .outerRadius(this.outerRadius) - .innerRadius(this.outerRadius * (1 - this.props.arcWidth)) - .cornerRadius(this.props.cornerRadius) - .padAngle(this.props.arcPadding) - //Remove the old stuff - this.doughnut.selectAll('.arc').remove() - this.needle.selectAll('*').remove() - this.g.selectAll('.text-group').remove() - //Draw the arc - var arcPaths = this.doughnut - .selectAll('.arc') - .data(this.pie(this.arcData)) - .enter() - .append('g') - .attr('class', 'arc') - arcPaths - .append('path') - .attr('d', this.arc) - .style('fill', function(d) { - return d.data.color - }) - - this.drawNeedle(resize) - //Translate the needle starting point to the middle of the arc - this.needle.attr('transform', 'translate(' + this.outerRadius + ', ' + this.outerRadius + ')') - } - - updateDimensions = () => { - //TODO: Fix so that the container is included in the component - const { marginInPercent } = this.props - var divDimensions = this.container.node().getBoundingClientRect(), - divWidth = divDimensions.width, - divHeight = divDimensions.height - //Set the new width and horizontal margins - this.margin.left = divWidth * marginInPercent - this.margin.right = divWidth * marginInPercent - this.width = divWidth - this.margin.left - this.margin.right - - this.margin.top = divHeight * marginInPercent - this.margin.bottom = divHeight * marginInPercent - this.height = this.width / 2 - this.margin.top - this.margin.bottom - //this.height = divHeight - this.margin.top - this.margin.bottom; - } - - calculateRadius = () => { - //The radius needs to be constrained by the containing div - //Since it is a half circle we are dealing with the height of the div - //Only needs to be half of the width, because the width needs to be 2 * radius - //For the whole arc to fit - - //First check if it is the width or the height that is the "limiting" dimension - if (this.width < 2 * this.height) { - //Then the width limits the size of the chart - //Set the radius to the width - the horizontal margins - this.outerRadius = (this.width - this.margin.left - this.margin.right) / 2 - } else { - this.outerRadius = this.height - this.margin.top - this.margin.bottom + calculateRotation = percent => { + var needleLength = this.outerRadius * 0.55, //TODO: Maybe it should be specified as a percentage of the arc radius? + needleRadius = 15 * (this.width / 500), + theta = this.percentToRad(percent), + centerPoint = [0, -needleRadius / 2], + topPoint = [centerPoint[0] - needleLength * Math.cos(theta), centerPoint[1] - needleLength * Math.sin(theta)], + leftPoint = [ + centerPoint[0] - needleRadius * Math.cos(theta - Math.PI / 2), + centerPoint[1] - needleRadius * Math.sin(theta - Math.PI / 2) + ], + rightPoint = [ + centerPoint[0] - needleRadius * Math.cos(theta + Math.PI / 2), + centerPoint[1] - needleRadius * Math.sin(theta + Math.PI / 2) + ] + var pathStr = `M ${leftPoint[0]} ${leftPoint[1]} L ${topPoint[0]} ${topPoint[1]} L ${rightPoint[0]} ${ + rightPoint[1] + }` + return pathStr } - this.centerGraph() - } - - //Calculates new margins to make the graph centered - centerGraph = () => { - this.margin.left = this.width / 2 - this.outerRadius + this.margin.right - this.g.attr('transform', 'translate(' + this.margin.left + ', ' + this.margin.top + ')') - } - - //If 'resize' is true then the animation does not play - drawNeedle = (resize) => { - const { percent, needleColor, needleBaseColor, hideText, animate } = this.props; - const { container, calculateRotation } = this; - var needleRadius = 15*(this.width / 500) , // Make the needle radius responsive - centerPoint = [0, -needleRadius/2]; - //Draw the triangle - //var pathStr = `M ${leftPoint[0]} ${leftPoint[1]} L ${topPoint[0]} ${topPoint[1]} L ${rightPoint[0]} ${rightPoint[1]}`; - var pathStr = this.calculateRotation(0) - this.needle - .append('path') - .attr('d', pathStr) - .attr('fill', needleColor) - //Add a circle at the bottom of needle - this.needle - .append('circle') - .attr('cx', centerPoint[0]) - .attr('cy', centerPoint[1]) - .attr('r', needleRadius) - .attr('fill', needleBaseColor) - if (!hideText) { - this.addText(percent) + + //Returns the angle (in rad) for the given 'percent' value where percent = 1 means 100% and is 180 degree angle + percentToRad = percent => { + return percent * Math.PI } - //Rotate the needle - if(!resize && animate){ - this.needle.transition() - .delay(500) - .ease(easeElastic) - .duration(3000) - .tween('progress', function(){ - return function(percentOfPercent){ - var progress = percentOfPercent * percent; - return container.select(`.needle path`).attr("d", calculateRotation(progress)); + + //Depending on the number of levels in the chart + //This function returns the same number of colors + getColors = (nbArcs) => { + const {colors} = this.props + var colorScale = scaleLinear() + .domain([1, nbArcs ? nbArcs : this.state.nbArcsToDisplay]) + .range([colors[0], colors[colors.length - 1]]) //Use the first and the last color as range + .interpolate(interpolateHsl) + var colorArray = [] + const iterationCount = nbArcs ? nbArcs : this.state.nbArcsToDisplay + for (var i = 1; i <= iterationCount; i++) { + colorArray.push(colorScale(i)) } - }); + return colorArray } - else{ - container.select(`.needle path`).attr("d", calculateRotation(percent)); + + //Adds text undeneath the graft to display which percentage is the current one + addText = percentage => { + var textPadding = 20 + this.g + .append('g') + .attr('class', 'text-group') + .attr('transform', `translate(${this.outerRadius}, ${this.outerRadius / 2 + textPadding})`) + .append('text') + .text(`${this.floatingNumber(percentage)}%`) + .style('font-size', () => `${this.width / 10}px`) + .style('fill', this.props.textColor) + .attr('class', 'percent-text') } - } - - calculateRotation = percent => { - var needleLength = this.outerRadius * 0.55, //TODO: Maybe it should be specified as a percentage of the arc radius? - needleRadius = 15 * (this.width / 500), - theta = this.percentToRad(percent), - centerPoint = [0, -needleRadius / 2], - topPoint = [centerPoint[0] - needleLength * Math.cos(theta), centerPoint[1] - needleLength * Math.sin(theta)], - leftPoint = [ - centerPoint[0] - needleRadius * Math.cos(theta - Math.PI / 2), - centerPoint[1] - needleRadius * Math.sin(theta - Math.PI / 2) - ], - rightPoint = [ - centerPoint[0] - needleRadius * Math.cos(theta + Math.PI / 2), - centerPoint[1] - needleRadius * Math.sin(theta + Math.PI / 2) - ] - var pathStr = `M ${leftPoint[0]} ${leftPoint[1]} L ${topPoint[0]} ${topPoint[1]} L ${rightPoint[0]} ${ - rightPoint[1] - }` - return pathStr - } - - //Returns the angle (in rad) for the given 'percent' value where percent = 1 means 100% and is 180 degree angle - percentToRad = percent => { - return percent * Math.PI - } - - //Depending on the number of levels in the chart - //This function returns the same number of colors - getColors = () => { - const { colors } = this.props - var colorScale = scaleLinear() - .domain([1, this.nbArcsToDisplay]) - .range([colors[0], colors[colors.length - 1]]) //Use the first and the last color as range - .interpolate(interpolateHsl) - var colorArray = [] - for (var i = 1; i <= this.nbArcsToDisplay; i++) { - colorArray.push(colorScale(i)) + + floatingNumber = (value, maxDigits = 2) => { + return Math.round(value * 100 * 10 ** maxDigits) / 10 ** maxDigits + } + + render() { + return
+
{Date.now()}
+
{this.state.nbArcsToDisplay}
+
+
} - return colorArray - } - - //Adds text undeneath the graft to display which percentage is the current one - addText = percentage => { - var textPadding = 20 - this.g - .append('g') - .attr('class', 'text-group') - .attr('transform', `translate(${this.outerRadius}, ${this.outerRadius / 2 + textPadding})`) - .append('text') - .text(`${this.floatingNumber(percentage)}%`) - .style('font-size', () => `${this.width / 10}px`) - .style('fill', this.props.textColor) - .attr('class', 'percent-text') - } - - floatingNumber = (value, maxDigits = 2) => { - return Math.round(value * 100 * 10 ** maxDigits) / 10 ** maxDigits - } - - render() { - return
- } } export default GaugeChart GaugeChart.defaultProps = { - marginInPercent: 0.05, - cornerRadius: 6, - nrOfLevels: 3, - percent: 0.4, - arcPadding: 0.05, //The padding between arcs, in rad - arcWidth: 0.2, //The width of the arc given in percent of the radius - colors: ['#00FF00', '#FF0000'], //Default defined colors - textColor: '#fff', - needleColor: "#464A4F", - needleBaseColor: "#464A4F", - hideText: false, - animate: true + marginInPercent: 0.05, + cornerRadius: 6, + nrOfLevels: 3, + percent: 0.4, + arcPadding: 0.05, //The padding between arcs, in rad + arcWidth: 0.2, //The width of the arc given in percent of the radius + colors: ['#00FF00', '#FF0000'], //Default defined colors + textColor: '#fff', + needleColor: "#464A4F", + needleBaseColor: "#464A4F", + hideText: false, + animate: true } GaugeChart.propTypes = { - id: PropTypes.string.isRequired, - marginInPercent: PropTypes.number, - cornerRadius: PropTypes.number, - nrOfLevels: PropTypes.number, - percent: PropTypes.number, - arcPadding: PropTypes.number, - arcWidth: PropTypes.number, - arcsLength: PropTypes.array, - colors: PropTypes.array, - textColor: PropTypes.string, - needleColor: PropTypes.string, - needleBaseColor: PropTypes.string, - hideText: PropTypes.bool, - animate: PropTypes.bool + id: PropTypes.string.isRequired, + marginInPercent: PropTypes.number, + cornerRadius: PropTypes.number, + nrOfLevels: PropTypes.number, + percent: PropTypes.number, + arcPadding: PropTypes.number, + arcWidth: PropTypes.number, + arcsLength: PropTypes.array, + colors: PropTypes.array, + textColor: PropTypes.string, + needleColor: PropTypes.string, + needleBaseColor: PropTypes.string, + hideText: PropTypes.bool, + animate: PropTypes.bool } diff --git a/yarn.lock b/yarn.lock index 493a893..37d2a41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,22 +2,22 @@ # yarn lockfile v1 -"@babel/cli@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.4.4.tgz#5454bb7112f29026a4069d8e6f0e1794e651966c" - integrity sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ== +"@babel/cli@^7.6.2": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.6.4.tgz#9b35a4e15fa7d8f487418aaa8229c8b0bc815f20" + integrity sha512-tqrDyvPryBM6xjIyKKUwr3s8CzmmYidwgdswd7Uc/Cv0ogZcuS1TYQTLx/eWKP3UbJ6JxZAiYlBZabXm/rtRsQ== dependencies: commander "^2.8.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.11" + lodash "^4.17.13" mkdirp "^0.5.1" output-file-sync "^2.0.0" slash "^2.0.0" source-map "^0.5.0" optionalDependencies: - chokidar "^2.0.4" + chokidar "^2.1.8" "@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" @@ -25,6 +25,13 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/core@7.2.2", "@babel/core@^7.1.6": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" @@ -64,22 +71,22 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" - integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.4" - "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" +"@babel/core@^7.6.2": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.4" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.4" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" - lodash "^4.17.11" + lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" @@ -105,6 +112,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== + dependencies: + "@babel/types" "^7.6.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -339,7 +356,7 @@ "@babel/traverse" "^7.1.5" "@babel/types" "^7.3.0" -"@babel/helpers@^7.4.3", "@babel/helpers@^7.4.4": +"@babel/helpers@^7.4.3": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== @@ -348,6 +365,15 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -365,6 +391,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== +"@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -1161,13 +1192,20 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.2": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -1185,6 +1223,15 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" +"@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": version "7.2.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" @@ -1214,6 +1261,21 @@ globals "^11.1.0" lodash "^4.17.11" +"@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.2.tgz#424f5be4be633fff33fb83ab8d67e4a8290f5a2f" @@ -1231,6 +1293,15 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.6.0", "@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -1246,27 +1317,15 @@ version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" -"@react-bootstrap/react-popper@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@react-bootstrap/react-popper/-/react-popper-1.2.1.tgz#4edf4851d5b4dcf2eb6b264ebbed1a7b7654177b" - integrity sha512-4l3q7LcZEhrSkI4d3Ie3g4CdrXqqTexXX4PFT45CB0z5z2JUbaxgRwKNq7r5j2bLdVpZm+uvUGqxJw8d9vgbJQ== - dependencies: - babel-runtime "6.x.x" - create-react-context "^0.2.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.5" - warning "^3.0.0" - "@restart/context@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== -"@restart/hooks@^0.2.3": - version "0.2.13" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.2.13.tgz#de9a2dfd6dacac3b60f9b19614cdd49f90e434c3" - integrity sha512-riuYub4Xx/Pk+YUPRHZPwJd2+rAJSsRd4Pqkqvhzu+AbkDdNi4y+kYEQicnAofbfTA5apRPm3cK9sWc6Gj5DNg== +"@restart/hooks@^0.3.11": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.15.tgz#17cb37a272dfb9cbacf83614a5a7170e68f17d75" + integrity sha512-rVNba1A2oMzKBg16fCrrHmCf4JjOzFhT9TWR8J+Y8iOcY4zffxtP3ke7mEsakvghHZT+9//uDOPSSeuBDW41GQ== "@svgr/babel-plugin-add-jsx-attribute@^4.0.0": version "4.0.0" @@ -1363,10 +1422,23 @@ version "10.12.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.24.tgz#b13564af612a22a20b5d95ca40f1bffb3af315cf" +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + "@types/q@^1.5.1": version "1.5.1" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" +"@types/react@^16.8.23", "@types/react@^16.9.11": + version "16.9.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120" + integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/tapable@1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd" @@ -2049,7 +2121,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.x.x, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -2482,6 +2554,25 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -2854,21 +2945,12 @@ create-react-context@<=0.2.2: fbjs "^0.8.0" gud "^1.0.0" -create-react-context@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" - integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - -cross-env@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" - integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== +cross-env@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" + integrity sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ== dependencies: cross-spawn "^6.0.5" - is-windows "^1.0.0" cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" @@ -3097,6 +3179,11 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +csstype@^2.2.0, csstype@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" + integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -3312,10 +3399,10 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3@^5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.9.2.tgz#64e8a7e9c3d96d9e6e4999d2c8a2c829767e67f5" - integrity sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ== +d3@^5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.12.0.tgz#0ddeac879c28c882317cd439b495290acd59ab61" + integrity sha512-flYVMoVuhPFHd9zVCe2BxIszUWqBcd5fvQGMNRmSiBrgdnh6Vlruh60RJQTouAK9xPbOB0plxMvBm4MoyODXNg== dependencies: d3-array "1" d3-axis "1" @@ -3580,6 +3667,14 @@ dom-helpers@^3.4.0: dependencies: "@babel/runtime" "^7.1.2" +dom-helpers@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" + integrity sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw== + dependencies: + "@babel/runtime" "^7.6.3" + csstype "^2.6.7" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -4535,10 +4630,10 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gh-pages@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.0.1.tgz#aefe47a43b8d9d2aa3130576b33fe95641e29a2f" - integrity sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg== +gh-pages@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.1.1.tgz#5be70a92f9cb70404bafabd8bb149c0e9a8c264b" + integrity sha512-yNW2SFp9xGRP/8Sk2WXuLI/Gn92oOL4HBgudn6PsqAnuWT90Y1tozJoTfX1WdrDSW5Rb90kLVOf5mm9KJ/2fDw== dependencies: async "^2.6.1" commander "^2.18.0" @@ -5395,7 +5490,7 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is-windows@^1.0.0, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6138,6 +6233,11 @@ lodash.uniq@^4.5.0: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" +lodash@^4.17.13: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" @@ -7930,15 +8030,15 @@ react-app-polyfill@^0.2.1: raf "3.4.1" whatwg-fetch "3.0.0" -react-bootstrap@^1.0.0-beta.8: - version "1.0.0-beta.8" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.0.0-beta.8.tgz#88d545526abe61c591d4eb84abad82e7f432c111" - integrity sha512-rdCJbjBMIVzjeKrploQJMpmpVkndsPDFH+NBGM5npefL+oA5WBEzURgllWLbKdb3mmuuJamilt4j7+Dg7yTxBQ== +react-bootstrap@^1.0.0-beta.12: + version "1.0.0-beta.14" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.0.0-beta.14.tgz#30330df61edbed1f0405f75363ef72d77c1fed57" + integrity sha512-UGK5f78FE8wAei1YL/oSwFlJZLqxJ/h4S8DCwHyY8hQjFCrjEW5PoEBTOOhQ6PQL6WOsZe1jkiOJG7L5TZWu+w== dependencies: "@babel/runtime" "^7.4.2" - "@react-bootstrap/react-popper" "1.2.1" "@restart/context" "^2.1.4" - "@restart/hooks" "^0.2.3" + "@restart/hooks" "^0.3.11" + "@types/react" "^16.8.23" classnames "^2.2.6" dom-helpers "^3.4.0" invariant "^2.2.4" @@ -7947,8 +8047,8 @@ react-bootstrap@^1.0.0-beta.8: prop-types "^15.7.2" prop-types-extra "^1.1.0" react-overlays "^1.2.0" - react-transition-group "^2.7.1" - uncontrollable "^6.1.0" + react-transition-group "^4.0.0" + uncontrollable "^7.0.0" warning "^4.0.3" react-context-toolbox@^2.0.2: @@ -7985,15 +8085,15 @@ react-dev-utils@^7.0.3: strip-ansi "5.0.0" text-table "0.2.0" -react-dom@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" - integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== +react-dom@^16.10.1: + version "16.11.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.11.0.tgz#7e7c4a5a85a569d565c2462f5d345da2dd849af5" + integrity sha512-nrRyIUE1e7j8PaXSPtyRKtz+2y9ubW/ghNgqKFHHAHaeP0fpF5uXR+sq8IMRHC+ZUxw7W9NyCDTBtwWxvkb0iA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" + scheduler "^0.17.0" react-error-overlay@^5.1.3: version "5.1.3" @@ -8093,25 +8193,24 @@ react-scripts@2.1.5: optionalDependencies: fsevents "1.2.4" -react-transition-group@^2.7.1: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== +react-transition-group@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683" + integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw== dependencies: - dom-helpers "^3.4.0" + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" -react@^16.8.6: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" - integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== +react@^16.10.1: + version "16.11.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.11.0.tgz#d294545fe62299ccee83363599bf904e4a07fdbb" + integrity sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.6" read-pkg-up@^1.0.1: version "1.0.1" @@ -8458,12 +8557,19 @@ rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: glob "^7.1.3" +rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8542,10 +8648,10 @@ sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -scheduler@^0.13.6: - version "0.13.6" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" - integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== +scheduler@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" + integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -9359,11 +9465,6 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" -typed-styles@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.5.tgz#a60df245d482a9b1adf9c06c078d0f06085ed1cf" - integrity sha512-ht+rEe5UsdEBAa3gr64+QjUOqjOLJfWLvl5HZR5Ev9uo/OnD3p43wPeFSB1hNFc13GXQF/JU1Bn0YHLUqBRIlw== - typed-styles@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" @@ -9385,13 +9486,23 @@ uglify-js@3.4.x, uglify-js@^3.1.4: commander "~2.17.1" source-map "~0.6.1" -uncontrollable@^6.0.0, uncontrollable@^6.1.0: +uncontrollable@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-6.1.0.tgz#45dcf54b76bf07e0ddf7c1a669caf935d2e101d5" integrity sha512-2TzEm0pLKauMBZfAZXsgQvLpZHEp95891frCZdGDrSG7dWYaIQhedwLAzi0X8pR8KHNqlmuYEb2cEgbQzr050A== dependencies: invariant "^2.2.4" +uncontrollable@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.1.1.tgz#f67fed3ef93637126571809746323a9db815d556" + integrity sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" "^16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -9485,6 +9596,11 @@ upath@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" From b6bd6d5e06043bc91bfa63bb306a5f45400eb800 Mon Sep 17 00:00:00 2001 From: Sanzhar Date: Tue, 5 Nov 2019 15:40:23 +0600 Subject: [PATCH 2/2] Removed unnecessary files --- .idea/.gitignore | 2 -- .idea/inspectionProfiles/Project_Default.xml | 6 ------ .idea/misc.xml | 6 ------ .idea/modules.xml | 8 -------- .idea/react-gauge-chart.iml | 12 ------------ .idea/vcs.xml | 6 ------ .vscode/launch.json | 15 --------------- 7 files changed, 55 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/react-gauge-chart.iml delete mode 100644 .idea/vcs.xml delete mode 100644 .vscode/launch.json diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 5c98b42..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Default ignored files -/workspace.xml \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 03d9549..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 24eb271..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 20a69eb..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/react-gauge-chart.iml b/.idea/react-gauge-chart.iml deleted file mode 100644 index 24643cc..0000000 --- a/.idea/react-gauge-chart.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 23fde26..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Chrome", - "type": "chrome", - "request": "launch", - "url": "http://localhost:3000", - "webRoot": "${workspaceRoot}/src" - } - ] -} \ No newline at end of file