... | ... |
@@ -27,14 +27,20 @@ |
27 | 27 |
"fs-extra": "3.0.1", |
28 | 28 |
"html-webpack-plugin": "2.29.0", |
29 | 29 |
"jest": "20.0.4", |
30 |
+ "moment": "^2.21.0", |
|
30 | 31 |
"object-assign": "4.1.1", |
31 | 32 |
"postcss-flexbugs-fixes": "3.2.0", |
32 | 33 |
"postcss-loader": "2.0.8", |
33 | 34 |
"promise": "8.0.1", |
34 | 35 |
"raf": "3.4.0", |
36 |
+ "rambda": "^1.0.12", |
|
37 |
+ "rambdax": "^0.8.10", |
|
38 |
+ "ramda": "^0.25.0", |
|
35 | 39 |
"react": "^16.2.0", |
36 | 40 |
"react-dev-utils": "^5.0.0", |
37 | 41 |
"react-dom": "^16.2.0", |
42 |
+ "react-measure": "^2.0.0", |
|
43 |
+ "recharts": "^1.0.0-beta.10", |
|
38 | 44 |
"style-loader": "0.19.0", |
39 | 45 |
"sw-precache-webpack-plugin": "0.11.4", |
40 | 46 |
"url-loader": "0.6.2", |
6 | 6 |
deleted file mode 100644 |
... | ... |
@@ -1,28 +0,0 @@ |
1 |
-.App { |
|
2 |
- text-align: center; |
|
3 |
-} |
|
4 |
- |
|
5 |
-.App-logo { |
|
6 |
- animation: App-logo-spin infinite 20s linear; |
|
7 |
- height: 80px; |
|
8 |
-} |
|
9 |
- |
|
10 |
-.App-header { |
|
11 |
- background-color: #222; |
|
12 |
- height: 150px; |
|
13 |
- padding: 20px; |
|
14 |
- color: white; |
|
15 |
-} |
|
16 |
- |
|
17 |
-.App-title { |
|
18 |
- font-size: 1.5em; |
|
19 |
-} |
|
20 |
- |
|
21 |
-.App-intro { |
|
22 |
- font-size: large; |
|
23 |
-} |
|
24 |
- |
|
25 |
-@keyframes App-logo-spin { |
|
26 |
- from { transform: rotate(0deg); } |
|
27 |
- to { transform: rotate(360deg); } |
|
28 |
-} |
... | ... |
@@ -1,18 +1,40 @@ |
1 |
-import React, { Component } from 'react'; |
|
2 |
-import logo from './logo.svg'; |
|
3 |
-import './App.css'; |
|
1 |
+import React, { PureComponent } from 'react'; |
|
2 |
+import Gantt from './components/Gantt'; |
|
3 |
+import { normalizeData } from './ganttUtils'; |
|
4 | 4 |
|
5 |
-class App extends Component { |
|
5 |
+const algoData = [ |
|
6 |
+ [ |
|
7 |
+ { startTime: 1, endTime: 3, processor: 1 }, |
|
8 |
+ { startTime: 4, endTime: 6, processor: 1 }, |
|
9 |
+ { startTime: 6, endTime: 10, processor: 1 }, |
|
10 |
+ ], |
|
11 |
+ [ |
|
12 |
+ { startTime: 6, endTime: 10, processor: 2 }, |
|
13 |
+ { startTime: 22, endTime: 23, processor: 2 }, |
|
14 |
+ { startTime: 23, endTime: 24, processor: 2 }, |
|
15 |
+ { startTime: 24, endTime: 25, processor: 2 }, |
|
16 |
+ ], |
|
17 |
+ [ |
|
18 |
+ { startTime: 10, endTime: 16, processor: 3 }, |
|
19 |
+ ], |
|
20 |
+ [ |
|
21 |
+ { startTime: 10, endTime: 16, processor: 4 }, |
|
22 |
+ ], |
|
23 |
+ [ |
|
24 |
+ { startTime: 10, endTime: 16, processor: 5 }, |
|
25 |
+ ], |
|
26 |
+ [ |
|
27 |
+ { startTime: 10, endTime: 16, processor: 6 }, |
|
28 |
+ ] |
|
29 |
+]; |
|
30 |
+ |
|
31 |
+const data = normalizeData(algoData); |
|
32 |
+ |
|
33 |
+class App extends PureComponent { |
|
6 | 34 |
render() { |
7 | 35 |
return ( |
8 |
- <div className="App"> |
|
9 |
- <header className="App-header"> |
|
10 |
- <img src={logo} className="App-logo" alt="logo" /> |
|
11 |
- <h1 className="App-title">Welcome to React</h1> |
|
12 |
- </header> |
|
13 |
- <p className="App-intro"> |
|
14 |
- To get started, edit <code>src/App.js</code> and save to reload. |
|
15 |
- </p> |
|
36 |
+ <div style={{ padding: 20 }}> |
|
37 |
+ <Gantt data={data} /> |
|
16 | 38 |
</div> |
17 | 39 |
); |
18 | 40 |
} |
19 | 41 |
deleted file mode 100644 |
... | ... |
@@ -1,9 +0,0 @@ |
1 |
-import React from 'react'; |
|
2 |
-import ReactDOM from 'react-dom'; |
|
3 |
-import App from './App'; |
|
4 |
- |
|
5 |
-it('renders without crashing', () => { |
|
6 |
- const div = document.createElement('div'); |
|
7 |
- ReactDOM.render(<App />, div); |
|
8 |
- ReactDOM.unmountComponentAtNode(div); |
|
9 |
-}); |
10 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,109 @@ |
0 |
+import React from 'react'; |
|
1 |
+import { withContentRect } from 'react-measure' |
|
2 |
+import { filter, range, map, pipe } from 'rambda'; |
|
3 |
+import { ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Brush, Label } from 'recharts'; |
|
4 |
+import Job from './Job'; |
|
5 |
+import { maxTime, minTime } from '../ganttUtils'; |
|
6 |
+import theme from '../theme'; |
|
7 |
+ |
|
8 |
+class Gannt extends React.PureComponent { |
|
9 |
+ constructor(props) { |
|
10 |
+ super(props); |
|
11 |
+ |
|
12 |
+ this.state = { |
|
13 |
+ startTime: minTime(props.data), |
|
14 |
+ endTime: maxTime(props.data) |
|
15 |
+ }; |
|
16 |
+ } |
|
17 |
+ |
|
18 |
+ render() { |
|
19 |
+ const { data, measureRef, contentRect: { bounds: dimensions } } = this.props; |
|
20 |
+ const { startTime } = this.state; |
|
21 |
+ const endTime = this.state.endTime === startTime ? startTime + 1 : this.state.endTime; |
|
22 |
+ |
|
23 |
+ const scopeData = map(processorData => |
|
24 |
+ pipe( |
|
25 |
+ filter(datum => |
|
26 |
+ (datum.startTime >= startTime |
|
27 |
+ || (datum.startTime < startTime && datum.endTime >= startTime) |
|
28 |
+ ) |
|
29 |
+ && datum.startTime <= endTime |
|
30 |
+ ), |
|
31 |
+ map(datum => { |
|
32 |
+ let newDatum = datum; |
|
33 |
+ if (newDatum.startTime < startTime) { |
|
34 |
+ newDatum = { ...newDatum, startTime, formerStartTime: newDatum.startTime }; |
|
35 |
+ } |
|
36 |
+ |
|
37 |
+ if (newDatum.endTime > endTime) { |
|
38 |
+ newDatum = { ...newDatum, endTime, formerEndTime: newDatum.endTime }; |
|
39 |
+ } |
|
40 |
+ |
|
41 |
+ return newDatum; |
|
42 |
+ }) |
|
43 |
+ )(processorData), |
|
44 |
+ data |
|
45 |
+ ); |
|
46 |
+ |
|
47 |
+ const processors = range(1, data.length + 1); |
|
48 |
+ |
|
49 |
+ const scopeMinTime = minTime(scopeData); |
|
50 |
+ const scopeMaxTime = maxTime(scopeData); |
|
51 |
+ const ticksCountX = scopeMinTime + scopeMaxTime; |
|
52 |
+ |
|
53 |
+ const width = Math.max(theme.gantt.maxWidth, dimensions.width); |
|
54 |
+ const height = 100 + 1.75 * theme.gantt.job.height * processors.length; |
|
55 |
+ |
|
56 |
+ const horizontalGuideLines = map( |
|
57 |
+ i => theme.gantt.margin.top + i * 1.75 * theme.gantt.job.height - i * 10, |
|
58 |
+ range(0, processors.length) |
|
59 |
+ ); |
|
60 |
+ |
|
61 |
+ return ( |
|
62 |
+ <div ref={measureRef}> |
|
63 |
+ <ScatterChart width={width} height={height} data={data[0]} margin={theme.gantt.margin}> |
|
64 |
+ <CartesianGrid |
|
65 |
+ stroke={theme.gantt.grid.stroke} |
|
66 |
+ strokeDasharray="5 5" |
|
67 |
+ horizontalPoints={horizontalGuideLines} |
|
68 |
+ /> |
|
69 |
+ <XAxis |
|
70 |
+ type="number" |
|
71 |
+ dataKey="startTime" |
|
72 |
+ interval={0} |
|
73 |
+ domain={[scopeMinTime, scopeMaxTime]} |
|
74 |
+ tickCount={ticksCountX} |
|
75 |
+ allowDecimals={false} |
|
76 |
+ > |
|
77 |
+ <Label offset={-30} position="insideBottom">Time</Label> |
|
78 |
+ </XAxis> |
|
79 |
+ <YAxis |
|
80 |
+ type="number" |
|
81 |
+ dataKey="processor" |
|
82 |
+ interval={0} |
|
83 |
+ name="processor" |
|
84 |
+ allowDecimals={false} |
|
85 |
+ domain={[0.5, processors.length + 0.5]} |
|
86 |
+ ticks={processors} |
|
87 |
+ > |
|
88 |
+ <Label position="insideLeft" angle={-90}>Workers</Label> |
|
89 |
+ </YAxis> |
|
90 |
+ <Brush |
|
91 |
+ dataKey="startTime" |
|
92 |
+ y={height - theme.gantt.brush.height - 10} |
|
93 |
+ height={theme.gantt.brush.height} |
|
94 |
+ stroke={theme.gantt.brush.stroke} |
|
95 |
+ onChange={({ startIndex, endIndex }) => |
|
96 |
+ this.setState({ startTime: startIndex + 1, endTime: endIndex + 1 }) |
|
97 |
+ } |
|
98 |
+ /> |
|
99 |
+ {scopeData.map((processorData, i) => ( |
|
100 |
+ <Scatter key={i} data={processorData} shape={<Job />} /> |
|
101 |
+ ))} |
|
102 |
+ </ScatterChart> |
|
103 |
+ </div> |
|
104 |
+ ); |
|
105 |
+ } |
|
106 |
+} |
|
107 |
+ |
|
108 |
+export default withContentRect('bounds')(Gannt); |
0 | 109 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,52 @@ |
0 |
+import React from 'react'; |
|
1 |
+import { Rectangle } from 'recharts'; |
|
2 |
+import theme from '../theme'; |
|
3 |
+ |
|
4 |
+export default class Job extends React.PureComponent { |
|
5 |
+ render() { |
|
6 |
+ const { |
|
7 |
+ x, |
|
8 |
+ y, |
|
9 |
+ payload: { |
|
10 |
+ formerStartTime, |
|
11 |
+ formerEndTime, |
|
12 |
+ startTime, |
|
13 |
+ endTime |
|
14 |
+ }, |
|
15 |
+ xAxis: { |
|
16 |
+ niceTicks, |
|
17 |
+ width: axisWidth |
|
18 |
+ } |
|
19 |
+ } = this.props; |
|
20 |
+ |
|
21 |
+ if (!endTime) return null; |
|
22 |
+ |
|
23 |
+ const duration = Math.abs(endTime - startTime); |
|
24 |
+ |
|
25 |
+ if (!duration) return null; |
|
26 |
+ |
|
27 |
+ const formerDuration = Math.abs( |
|
28 |
+ (typeof formerEndTime === 'undefined' ? endTime : formerEndTime) |
|
29 |
+ - (typeof formerStartTime === 'undefined' ? startTime : formerStartTime) |
|
30 |
+ ); |
|
31 |
+ |
|
32 |
+ const width = (axisWidth / (niceTicks.length - 1)) * duration; |
|
33 |
+ const height = theme.gantt.job.height; |
|
34 |
+ |
|
35 |
+ return <Box x={x + 5} y={y + 5} width={width} height={height} text={formerDuration} /> |
|
36 |
+ } |
|
37 |
+} |
|
38 |
+ |
|
39 |
+class Box extends React.PureComponent { |
|
40 |
+ render() { |
|
41 |
+ const { x, y, width, height, text } = this.props; |
|
42 |
+ const { fill, stroke, textColor } = theme.gantt.job; |
|
43 |
+ |
|
44 |
+ return ( |
|
45 |
+ <React.Fragment> |
|
46 |
+ <Rectangle x={x} y={y - (height / 2)} width={width} height={height} fill={fill} stroke={stroke} /> |
|
47 |
+ <text x={x + (width / 2)} y={y} textAnchor="middle" alignmentBaseline="central" fill={textColor}>{text}</text> |
|
48 |
+ </React.Fragment> |
|
49 |
+ ); |
|
50 |
+ } |
|
51 |
+} |
|
0 | 52 |
\ No newline at end of file |
1 | 53 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,60 @@ |
0 |
+import { forEach, last, multiply, range, map, prop, reduce } from 'rambda'; |
|
1 |
+import { max, min } from 'ramda'; |
|
2 |
+ |
|
3 |
+export const minTime = data => { |
|
4 |
+ const processorsMinTime = map( |
|
5 |
+ processorData => reduce( |
|
6 |
+ min, |
|
7 |
+ Infinity, |
|
8 |
+ map(prop('startTime'), processorData) |
|
9 |
+ ), |
|
10 |
+ data |
|
11 |
+ ); |
|
12 |
+ |
|
13 |
+ return reduce(min, Infinity, processorsMinTime); |
|
14 |
+}; |
|
15 |
+ |
|
16 |
+export const maxTime = data => { |
|
17 |
+ const processorsMaxTime = map( |
|
18 |
+ processorData => reduce( |
|
19 |
+ max, |
|
20 |
+ -Infinity, |
|
21 |
+ map(prop('startTime'), processorData) |
|
22 |
+ ), |
|
23 |
+ data |
|
24 |
+ ); |
|
25 |
+ |
|
26 |
+ return reduce(max, -Infinity, processorsMaxTime); |
|
27 |
+}; |
|
28 |
+ |
|
29 |
+export const normalizeData = data => |
|
30 |
+ map(processorData => { |
|
31 |
+ // if startTime would be days (thousands of seconds), set step to day |
|
32 |
+ const step = 1; // >= 1 |
|
33 |
+ |
|
34 |
+ const _minTime = Math.floor(minTime(data) / step); |
|
35 |
+ const _maxTime = Math.floor(maxTime(data) / step); |
|
36 |
+ |
|
37 |
+ const rangeTime = map( |
|
38 |
+ multiply(step), |
|
39 |
+ range(_minTime, _maxTime + 1) |
|
40 |
+ ); |
|
41 |
+ |
|
42 |
+ const dataObj = reduce( |
|
43 |
+ (obj, row) => ({ ...obj, [row.startTime]: row }), |
|
44 |
+ {}, |
|
45 |
+ processorData |
|
46 |
+ ); |
|
47 |
+ |
|
48 |
+ forEach(startTime => { |
|
49 |
+ if (!dataObj[startTime]) { |
|
50 |
+ dataObj[startTime] = { startTime }; |
|
51 |
+ } |
|
52 |
+ }, rangeTime); |
|
53 |
+ |
|
54 |
+ const filledData = Object.values(dataObj); |
|
55 |
+ |
|
56 |
+ filledData.push({ startTime: last(processorData).endTime }); |
|
57 |
+ |
|
58 |
+ return filledData; |
|
59 |
+ }, data); |
|
0 | 60 |
\ No newline at end of file |
... | ... |
@@ -1,5 +1,38 @@ |
1 | 1 |
body { |
2 | 2 |
margin: 0; |
3 | 3 |
padding: 0; |
4 |
- font-family: sans-serif; |
|
4 |
+ font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; |
|
5 |
+} |
|
6 |
+ |
|
7 |
+svg * { |
|
8 |
+ user-select: none; |
|
9 |
+} |
|
10 |
+ |
|
11 |
+.recharts-cartesian-axis-tick-value { |
|
12 |
+ fill: #3A4168; |
|
13 |
+} |
|
14 |
+ |
|
15 |
+.recharts-cartesian-axis-line, |
|
16 |
+.recharts-cartesian-axis-tick-line { |
|
17 |
+ stroke: #3A4168; |
|
18 |
+} |
|
19 |
+ |
|
20 |
+.color1 { |
|
21 |
+ color: #1B1B3A; |
|
22 |
+} |
|
23 |
+ |
|
24 |
+.color2 { |
|
25 |
+ color: #3A4168; |
|
26 |
+} |
|
27 |
+ |
|
28 |
+.color3 { |
|
29 |
+ color: #98798F; |
|
30 |
+} |
|
31 |
+ |
|
32 |
+.color4 { |
|
33 |
+ color: #C89C93; |
|
34 |
+} |
|
35 |
+ |
|
36 |
+.color5 { |
|
37 |
+ color: #F1D8CB; |
|
5 | 38 |
} |
... | ... |
@@ -2,7 +2,5 @@ import React from 'react'; |
2 | 2 |
import ReactDOM from 'react-dom'; |
3 | 3 |
import './index.css'; |
4 | 4 |
import App from './App'; |
5 |
-import registerServiceWorker from './registerServiceWorker'; |
|
6 | 5 |
|
7 | 6 |
ReactDOM.render(<App />, document.getElementById('root')); |
8 |
-registerServiceWorker(); |
9 | 7 |
deleted file mode 100644 |
... | ... |
@@ -1,7 +0,0 @@ |
1 |
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"> |
|
2 |
- <g fill="#61DAFB"> |
|
3 |
- <path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/> |
|
4 |
- <circle cx="420.9" cy="296.5" r="45.7"/> |
|
5 |
- <path d="M520.5 78.1z"/> |
|
6 |
- </g> |
|
7 |
-</svg> |
8 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,117 +0,0 @@ |
1 |
-// In production, we register a service worker to serve assets from local cache. |
|
2 |
- |
|
3 |
-// This lets the app load faster on subsequent visits in production, and gives |
|
4 |
-// it offline capabilities. However, it also means that developers (and users) |
|
5 |
-// will only see deployed updates on the "N+1" visit to a page, since previously |
|
6 |
-// cached resources are updated in the background. |
|
7 |
- |
|
8 |
-// To learn more about the benefits of this model, read https://goo.gl/KwvDNy. |
|
9 |
-// This link also includes instructions on opting out of this behavior. |
|
10 |
- |
|
11 |
-const isLocalhost = Boolean( |
|
12 |
- window.location.hostname === 'localhost' || |
|
13 |
- // [::1] is the IPv6 localhost address. |
|
14 |
- window.location.hostname === '[::1]' || |
|
15 |
- // 127.0.0.1/8 is considered localhost for IPv4. |
|
16 |
- window.location.hostname.match( |
|
17 |
- /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ |
|
18 |
- ) |
|
19 |
-); |
|
20 |
- |
|
21 |
-export default function register() { |
|
22 |
- if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { |
|
23 |
- // The URL constructor is available in all browsers that support SW. |
|
24 |
- const publicUrl = new URL(process.env.PUBLIC_URL, window.location); |
|
25 |
- if (publicUrl.origin !== window.location.origin) { |
|
26 |
- // Our service worker won't work if PUBLIC_URL is on a different origin |
|
27 |
- // from what our page is served on. This might happen if a CDN is used to |
|
28 |
- // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374 |
|
29 |
- return; |
|
30 |
- } |
|
31 |
- |
|
32 |
- window.addEventListener('load', () => { |
|
33 |
- const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; |
|
34 |
- |
|
35 |
- if (isLocalhost) { |
|
36 |
- // This is running on localhost. Lets check if a service worker still exists or not. |
|
37 |
- checkValidServiceWorker(swUrl); |
|
38 |
- |
|
39 |
- // Add some additional logging to localhost, pointing developers to the |
|
40 |
- // service worker/PWA documentation. |
|
41 |
- navigator.serviceWorker.ready.then(() => { |
|
42 |
- console.log( |
|
43 |
- 'This web app is being served cache-first by a service ' + |
|
44 |
- 'worker. To learn more, visit https://goo.gl/SC7cgQ' |
|
45 |
- ); |
|
46 |
- }); |
|
47 |
- } else { |
|
48 |
- // Is not local host. Just register service worker |
|
49 |
- registerValidSW(swUrl); |
|
50 |
- } |
|
51 |
- }); |
|
52 |
- } |
|
53 |
-} |
|
54 |
- |
|
55 |
-function registerValidSW(swUrl) { |
|
56 |
- navigator.serviceWorker |
|
57 |
- .register(swUrl) |
|
58 |
- .then(registration => { |
|
59 |
- registration.onupdatefound = () => { |
|
60 |
- const installingWorker = registration.installing; |
|
61 |
- installingWorker.onstatechange = () => { |
|
62 |
- if (installingWorker.state === 'installed') { |
|
63 |
- if (navigator.serviceWorker.controller) { |
|
64 |
- // At this point, the old content will have been purged and |
|
65 |
- // the fresh content will have been added to the cache. |
|
66 |
- // It's the perfect time to display a "New content is |
|
67 |
- // available; please refresh." message in your web app. |
|
68 |
- console.log('New content is available; please refresh.'); |
|
69 |
- } else { |
|
70 |
- // At this point, everything has been precached. |
|
71 |
- // It's the perfect time to display a |
|
72 |
- // "Content is cached for offline use." message. |
|
73 |
- console.log('Content is cached for offline use.'); |
|
74 |
- } |
|
75 |
- } |
|
76 |
- }; |
|
77 |
- }; |
|
78 |
- }) |
|
79 |
- .catch(error => { |
|
80 |
- console.error('Error during service worker registration:', error); |
|
81 |
- }); |
|
82 |
-} |
|
83 |
- |
|
84 |
-function checkValidServiceWorker(swUrl) { |
|
85 |
- // Check if the service worker can be found. If it can't reload the page. |
|
86 |
- fetch(swUrl) |
|
87 |
- .then(response => { |
|
88 |
- // Ensure service worker exists, and that we really are getting a JS file. |
|
89 |
- if ( |
|
90 |
- response.status === 404 || |
|
91 |
- response.headers.get('content-type').indexOf('javascript') === -1 |
|
92 |
- ) { |
|
93 |
- // No service worker found. Probably a different app. Reload the page. |
|
94 |
- navigator.serviceWorker.ready.then(registration => { |
|
95 |
- registration.unregister().then(() => { |
|
96 |
- window.location.reload(); |
|
97 |
- }); |
|
98 |
- }); |
|
99 |
- } else { |
|
100 |
- // Service worker found. Proceed as normal. |
|
101 |
- registerValidSW(swUrl); |
|
102 |
- } |
|
103 |
- }) |
|
104 |
- .catch(() => { |
|
105 |
- console.log( |
|
106 |
- 'No internet connection found. App is running in offline mode.' |
|
107 |
- ); |
|
108 |
- }); |
|
109 |
-} |
|
110 |
- |
|
111 |
-export function unregister() { |
|
112 |
- if ('serviceWorker' in navigator) { |
|
113 |
- navigator.serviceWorker.ready.then(registration => { |
|
114 |
- registration.unregister(); |
|
115 |
- }); |
|
116 |
- } |
|
117 |
-} |
118 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,23 @@ |
0 |
+export default { |
|
1 |
+ gantt: { |
|
2 |
+ maxWidth: 700, |
|
3 |
+ margin: { top: 40, right: 20, bottom: 60, left: 20 }, |
|
4 |
+ grid: { |
|
5 |
+ stroke: 'rgba(241, 216, 203, 0.6)' |
|
6 |
+ }, |
|
7 |
+ brush: { |
|
8 |
+ height: 30, |
|
9 |
+ stroke: '#C89C93' |
|
10 |
+ }, |
|
11 |
+ job: { |
|
12 |
+ height: 50, |
|
13 |
+ fill: '#3A4168', |
|
14 |
+ stroke: '#1B1B3A', |
|
15 |
+ textColor: '#e8e9f2' |
|
16 |
+ }, |
|
17 |
+ label: { |
|
18 |
+ color: '#3A4168' |
|
19 |
+ } |
|
20 |
+ }, |
|
21 |
+ |
|
22 |
+} |
|
0 | 23 |
\ No newline at end of file |
... | ... |
@@ -1347,6 +1347,10 @@ center-align@^0.1.1: |
1347 | 1347 |
align-text "^0.1.3" |
1348 | 1348 |
lazy-cache "^1.0.3" |
1349 | 1349 |
|
1350 |
+chain-function@^1.0.0: |
|
1351 |
+ version "1.0.0" |
|
1352 |
+ resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" |
|
1353 |
+ |
|
1350 | 1354 |
chalk@1.1.3, chalk@^1.1.3: |
1351 | 1355 |
version "1.1.3" |
1352 | 1356 |
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" |
... | ... |
@@ -1432,6 +1436,10 @@ class-utils@^0.3.5: |
1432 | 1432 |
isobject "^3.0.0" |
1433 | 1433 |
static-extend "^0.1.1" |
1434 | 1434 |
|
1435 |
+classnames@2.2.5, classnames@^2.2.5: |
|
1436 |
+ version "2.2.5" |
|
1437 |
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" |
|
1438 |
+ |
|
1435 | 1439 |
clean-css@4.1.x: |
1436 | 1440 |
version "4.1.9" |
1437 | 1441 |
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" |
... | ... |
@@ -1638,6 +1646,10 @@ copy-descriptor@^0.1.0: |
1638 | 1638 |
version "0.1.1" |
1639 | 1639 |
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" |
1640 | 1640 |
|
1641 |
+core-js@2.5.1: |
|
1642 |
+ version "2.5.1" |
|
1643 |
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" |
|
1644 |
+ |
|
1641 | 1645 |
core-js@^1.0.0: |
1642 | 1646 |
version "1.2.7" |
1643 | 1647 |
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" |
... | ... |
@@ -1843,6 +1855,60 @@ currently-unhandled@^0.4.1: |
1843 | 1843 |
dependencies: |
1844 | 1844 |
array-find-index "^1.0.1" |
1845 | 1845 |
|
1846 |
+d3-array@^1.2.0: |
|
1847 |
+ version "1.2.1" |
|
1848 |
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" |
|
1849 |
+ |
|
1850 |
+d3-collection@1: |
|
1851 |
+ version "1.0.4" |
|
1852 |
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" |
|
1853 |
+ |
|
1854 |
+d3-color@1: |
|
1855 |
+ version "1.0.3" |
|
1856 |
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" |
|
1857 |
+ |
|
1858 |
+d3-format@1: |
|
1859 |
+ version "1.2.2" |
|
1860 |
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" |
|
1861 |
+ |
|
1862 |
+d3-interpolate@1, d3-interpolate@^1.1.5: |
|
1863 |
+ version "1.1.6" |
|
1864 |
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" |
|
1865 |
+ dependencies: |
|
1866 |
+ d3-color "1" |
|
1867 |
+ |
|
1868 |
+d3-path@1: |
|
1869 |
+ version "1.0.5" |
|
1870 |
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" |
|
1871 |
+ |
|
1872 |
+d3-scale@1.0.6: |
|
1873 |
+ version "1.0.6" |
|
1874 |
+ resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed" |
|
1875 |
+ dependencies: |
|
1876 |
+ d3-array "^1.2.0" |
|
1877 |
+ d3-collection "1" |
|
1878 |
+ d3-color "1" |
|
1879 |
+ d3-format "1" |
|
1880 |
+ d3-interpolate "1" |
|
1881 |
+ d3-time "1" |
|
1882 |
+ d3-time-format "2" |
|
1883 |
+ |
|
1884 |
+d3-shape@1.2.0: |
|
1885 |
+ version "1.2.0" |
|
1886 |
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" |
|
1887 |
+ dependencies: |
|
1888 |
+ d3-path "1" |
|
1889 |
+ |
|
1890 |
+d3-time-format@2: |
|
1891 |
+ version "2.1.1" |
|
1892 |
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" |
|
1893 |
+ dependencies: |
|
1894 |
+ d3-time "1" |
|
1895 |
+ |
|
1896 |
+d3-time@1: |
|
1897 |
+ version "1.0.8" |
|
1898 |
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" |
|
1899 |
+ |
|
1846 | 1900 |
d@1: |
1847 | 1901 |
version "1.0.0" |
1848 | 1902 |
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" |
... | ... |
@@ -2050,6 +2116,10 @@ dom-converter@~0.1: |
2050 | 2050 |
dependencies: |
2051 | 2051 |
utila "~0.3" |
2052 | 2052 |
|
2053 |
+dom-helpers@^3.2.0: |
|
2054 |
+ version "3.3.1" |
|
2055 |
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" |
|
2056 |
+ |
|
2053 | 2057 |
dom-serializer@0: |
2054 | 2058 |
version "0.1.0" |
2055 | 2059 |
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" |
... | ... |
@@ -2851,7 +2921,7 @@ fs.realpath@^1.0.0: |
2851 | 2851 |
version "1.0.0" |
2852 | 2852 |
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" |
2853 | 2853 |
|
2854 |
-fsevents@^1.0.0, fsevents@^1.1.3: |
|
2854 |
+fsevents@^1.0.0: |
|
2855 | 2855 |
version "1.1.3" |
2856 | 2856 |
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" |
2857 | 2857 |
dependencies: |
... | ... |
@@ -2900,6 +2970,10 @@ get-caller-file@^1.0.1: |
2900 | 2900 |
version "1.0.2" |
2901 | 2901 |
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" |
2902 | 2902 |
|
2903 |
+get-node-dimensions@^1.2.0: |
|
2904 |
+ version "1.2.1" |
|
2905 |
+ resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823" |
|
2906 |
+ |
|
2903 | 2907 |
get-stdin@^4.0.1: |
2904 | 2908 |
version "4.0.1" |
2905 | 2909 |
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" |
... | ... |
@@ -4275,7 +4349,7 @@ lodash.uniq@^4.5.0: |
4275 | 4275 |
version "4.5.0" |
4276 | 4276 |
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" |
4277 | 4277 |
|
4278 |
-"lodash@>=3.5 <5", lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0: |
|
4278 |
+"lodash@>=3.5 <5", lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: |
|
4279 | 4279 |
version "4.17.5" |
4280 | 4280 |
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" |
4281 | 4281 |
|
... | ... |
@@ -4510,6 +4584,10 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdi |
4510 | 4510 |
dependencies: |
4511 | 4511 |
minimist "0.0.8" |
4512 | 4512 |
|
4513 |
+moment@^2.21.0: |
|
4514 |
+ version "2.21.0" |
|
4515 |
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" |
|
4516 |
+ |
|
4513 | 4517 |
ms@2.0.0: |
4514 | 4518 |
version "2.0.0" |
4515 | 4519 |
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" |
... | ... |
@@ -5390,7 +5468,7 @@ promise@^7.1.1: |
5390 | 5390 |
dependencies: |
5391 | 5391 |
asap "~2.0.3" |
5392 | 5392 |
|
5393 |
-prop-types@^15.5.10, prop-types@^15.6.0: |
|
5393 |
+prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: |
|
5394 | 5394 |
version "15.6.1" |
5395 | 5395 |
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" |
5396 | 5396 |
dependencies: |
... | ... |
@@ -5466,12 +5544,30 @@ querystringify@~1.0.0: |
5466 | 5466 |
version "1.0.0" |
5467 | 5467 |
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" |
5468 | 5468 |
|
5469 |
-raf@3.4.0: |
|
5469 |
+raf@3.4.0, raf@^3.2.0: |
|
5470 | 5470 |
version "3.4.0" |
5471 | 5471 |
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" |
5472 | 5472 |
dependencies: |
5473 | 5473 |
performance-now "^2.1.0" |
5474 | 5474 |
|
5475 |
+rambda@^1.0.12: |
|
5476 |
+ version "1.0.12" |
|
5477 |
+ resolved "https://registry.yarnpkg.com/rambda/-/rambda-1.0.12.tgz#041f942e7ad56599a0a0248cd92d9313b069b923" |
|
5478 |
+ |
|
5479 |
+"rambda@https://github.com/selfrefactor/rambda#1.1.0": |
|
5480 |
+ version "1.0.9" |
|
5481 |
+ resolved "https://github.com/selfrefactor/rambda#ee04b4005da84b29d166364100d50e2a9be56a60" |
|
5482 |
+ |
|
5483 |
+rambdax@^0.8.10: |
|
5484 |
+ version "0.8.10" |
|
5485 |
+ resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-0.8.10.tgz#d8cc090c754e2225a39aa8a5a8d69475e9acd9ed" |
|
5486 |
+ dependencies: |
|
5487 |
+ rambda "https://github.com/selfrefactor/rambda#1.1.0" |
|
5488 |
+ |
|
5489 |
+ramda@^0.25.0: |
|
5490 |
+ version "0.25.0" |
|
5491 |
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" |
|
5492 |
+ |
|
5475 | 5493 |
randomatic@^1.1.3: |
5476 | 5494 |
version "1.1.7" |
5477 | 5495 |
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" |
... | ... |
@@ -5537,7 +5633,7 @@ react-dev-utils@^5.0.0: |
5537 | 5537 |
strip-ansi "3.0.1" |
5538 | 5538 |
text-table "0.2.0" |
5539 | 5539 |
|
5540 |
-react-dom@16.2.0: |
|
5540 |
+react-dom@^16.2.0: |
|
5541 | 5541 |
version "16.2.0" |
5542 | 5542 |
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" |
5543 | 5543 |
dependencies: |
... | ... |
@@ -5550,51 +5646,41 @@ react-error-overlay@^4.0.0: |
5550 | 5550 |
version "4.0.0" |
5551 | 5551 |
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" |
5552 | 5552 |
|
5553 |
-react-scripts@1.1.1: |
|
5554 |
- version "1.1.1" |
|
5555 |
- resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.1.1.tgz#279d449f7311fed910506987a1ade014027788a8" |
|
5556 |
- dependencies: |
|
5557 |
- autoprefixer "7.1.6" |
|
5558 |
- babel-core "6.26.0" |
|
5559 |
- babel-eslint "7.2.3" |
|
5560 |
- babel-jest "20.0.3" |
|
5561 |
- babel-loader "7.1.2" |
|
5562 |
- babel-preset-react-app "^3.1.1" |
|
5563 |
- babel-runtime "6.26.0" |
|
5564 |
- case-sensitive-paths-webpack-plugin "2.1.1" |
|
5565 |
- chalk "1.1.3" |
|
5566 |
- css-loader "0.28.7" |
|
5567 |
- dotenv "4.0.0" |
|
5568 |
- dotenv-expand "4.2.0" |
|
5569 |
- eslint "4.10.0" |
|
5570 |
- eslint-config-react-app "^2.1.0" |
|
5571 |
- eslint-loader "1.9.0" |
|
5572 |
- eslint-plugin-flowtype "2.39.1" |
|
5573 |
- eslint-plugin-import "2.8.0" |
|
5574 |
- eslint-plugin-jsx-a11y "5.1.1" |
|
5575 |
- eslint-plugin-react "7.4.0" |
|
5576 |
- extract-text-webpack-plugin "3.0.2" |
|
5577 |
- file-loader "1.1.5" |
|
5578 |
- fs-extra "3.0.1" |
|
5579 |
- html-webpack-plugin "2.29.0" |
|
5580 |
- jest "20.0.4" |
|
5581 |
- object-assign "4.1.1" |
|
5582 |
- postcss-flexbugs-fixes "3.2.0" |
|
5583 |
- postcss-loader "2.0.8" |
|
5584 |
- promise "8.0.1" |
|
5585 |
- raf "3.4.0" |
|
5586 |
- react-dev-utils "^5.0.0" |
|
5587 |
- style-loader "0.19.0" |
|
5588 |
- sw-precache-webpack-plugin "0.11.4" |
|
5589 |
- url-loader "0.6.2" |
|
5590 |
- webpack "3.8.1" |
|
5591 |
- webpack-dev-server "2.9.4" |
|
5592 |
- webpack-manifest-plugin "1.3.2" |
|
5593 |
- whatwg-fetch "2.0.3" |
|
5594 |
- optionalDependencies: |
|
5595 |
- fsevents "^1.1.3" |
|
5553 |
+react-measure@^2.0.0: |
|
5554 |
+ version "2.0.2" |
|
5555 |
+ resolved "https://registry.yarnpkg.com/react-measure/-/react-measure-2.0.2.tgz#072a9a5fafc01dfbadc1fa5fb09fc351037f636c" |
|
5556 |
+ dependencies: |
|
5557 |
+ get-node-dimensions "^1.2.0" |
|
5558 |
+ prop-types "^15.5.10" |
|
5559 |
+ resize-observer-polyfill "^1.4.2" |
|
5560 |
+ |
|
5561 |
+react-resize-detector@1.1.0: |
|
5562 |
+ version "1.1.0" |
|
5563 |
+ resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-1.1.0.tgz#4a9831fa3caad32230478dd0185cbd2aa91a5ebf" |
|
5564 |
+ dependencies: |
|
5565 |
+ prop-types "^15.5.10" |
|
5566 |
+ |
|
5567 |
+react-smooth@1.0.0: |
|
5568 |
+ version "1.0.0" |
|
5569 |
+ resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.0.tgz#b29dbebddddb06d21b5b08962167fb9eac1897d8" |
|
5570 |
+ dependencies: |
|
5571 |
+ lodash "~4.17.4" |
|
5572 |
+ prop-types "^15.6.0" |
|
5573 |
+ raf "^3.2.0" |
|
5574 |
+ react-transition-group "^2.2.1" |
|
5575 |
+ |
|
5576 |
+react-transition-group@^2.2.1: |
|
5577 |
+ version "2.2.1" |
|
5578 |
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" |
|
5579 |
+ dependencies: |
|
5580 |
+ chain-function "^1.0.0" |
|
5581 |
+ classnames "^2.2.5" |
|
5582 |
+ dom-helpers "^3.2.0" |
|
5583 |
+ loose-envify "^1.3.1" |
|
5584 |
+ prop-types "^15.5.8" |
|
5585 |
+ warning "^3.0.0" |
|
5596 | 5586 |
|
5597 |
-react@16.2.0: |
|
5587 |
+react@^16.2.0: |
|
5598 | 5588 |
version "16.2.0" |
5599 | 5589 |
resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" |
5600 | 5590 |
dependencies: |
... | ... |
@@ -5663,6 +5749,26 @@ readdirp@^2.0.0: |
5663 | 5663 |
readable-stream "^2.0.2" |
5664 | 5664 |
set-immediate-shim "^1.0.1" |
5665 | 5665 |
|
5666 |
+recharts-scale@0.3.2: |
|
5667 |
+ version "0.3.2" |
|
5668 |
+ resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.3.2.tgz#dac7621714a4765d152cb2adbc30c73b831208c9" |
|
5669 |
+ |
|
5670 |
+recharts@^1.0.0-beta.10: |
|
5671 |
+ version "1.0.0-beta.10" |
|
5672 |
+ resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.0.0-beta.10.tgz#d3cd15df6b7879d5968da3c942b5fcdaf2504fe1" |
|
5673 |
+ dependencies: |
|
5674 |
+ classnames "2.2.5" |
|
5675 |
+ core-js "2.5.1" |
|
5676 |
+ d3-interpolate "^1.1.5" |
|
5677 |
+ d3-scale "1.0.6" |
|
5678 |
+ d3-shape "1.2.0" |
|
5679 |
+ lodash "~4.17.4" |
|
5680 |
+ prop-types "^15.6.0" |
|
5681 |
+ react-resize-detector "1.1.0" |
|
5682 |
+ react-smooth "1.0.0" |
|
5683 |
+ recharts-scale "0.3.2" |
|
5684 |
+ reduce-css-calc "1.3.0" |
|
5685 |
+ |
|
5666 | 5686 |
recursive-readdir@2.2.1: |
5667 | 5687 |
version "2.2.1" |
5668 | 5688 |
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" |
... | ... |
@@ -5676,7 +5782,7 @@ redent@^1.0.0: |
5676 | 5676 |
indent-string "^2.1.0" |
5677 | 5677 |
strip-indent "^1.0.1" |
5678 | 5678 |
|
5679 |
-reduce-css-calc@^1.2.6: |
|
5679 |
+reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6: |
|
5680 | 5680 |
version "1.3.0" |
5681 | 5681 |
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" |
5682 | 5682 |
dependencies: |
... | ... |
@@ -5867,6 +5973,10 @@ requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: |
5867 | 5867 |
version "1.0.0" |
5868 | 5868 |
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" |
5869 | 5869 |
|
5870 |
+resize-observer-polyfill@^1.4.2: |
|
5871 |
+ version "1.5.0" |
|
5872 |
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69" |
|
5873 |
+ |
|
5870 | 5874 |
resolve-cwd@^2.0.0: |
5871 | 5875 |
version "2.0.0" |
5872 | 5876 |
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" |
... | ... |
@@ -6880,6 +6990,12 @@ walker@~1.0.5: |
6880 | 6880 |
dependencies: |
6881 | 6881 |
makeerror "1.0.x" |
6882 | 6882 |
|
6883 |
+warning@^3.0.0: |
|
6884 |
+ version "3.0.0" |
|
6885 |
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" |
|
6886 |
+ dependencies: |
|
6887 |
+ loose-envify "^1.0.0" |
|
6888 |
+ |
|
6883 | 6889 |
watch@~0.10.0: |
6884 | 6890 |
version "0.10.0" |
6885 | 6891 |
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" |