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
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"