diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json
index 5badfebe18f31..5a9df0c6578b2 100644
--- a/packages/cubejs-playground/package.json
+++ b/packages/cubejs-playground/package.json
@@ -22,6 +22,7 @@
"codesandbox-import-utils": "^2.1.1",
"component-cookie": "^1.1.4",
"customize-cra": "^0.7.0",
+ "d3": "^5.14.2",
"history": "^4.9.0",
"less": "^3.10.3",
"less-loader": "^5.0.0",
diff --git a/packages/cubejs-playground/src/ChartRenderer.js b/packages/cubejs-playground/src/ChartRenderer.js
index 0790d752d7faf..ba11dae05bb8f 100644
--- a/packages/cubejs-playground/src/ChartRenderer.js
+++ b/packages/cubejs-playground/src/ChartRenderer.js
@@ -14,12 +14,14 @@ import ChartContainer from './ChartContainer';
import * as bizChartLibrary from './libraries/bizChart';
import * as rechartsLibrary from './libraries/recharts';
import * as chartjsLibrary from './libraries/chartjs';
+import * as d3ChartLibrary from './libraries/d3';
import * as tablesLibrary from './libraries/tables';
export const libraryToTemplate = {
chartjs: { library: chartjsLibrary, title: 'Chart.js' },
recharts: { library: rechartsLibrary, title: 'Recharts' },
- bizcharts: { library: bizChartLibrary, title: 'Bizcharts' }
+ bizcharts: { library: bizChartLibrary, title: 'Bizcharts' },
+ d3: { library: d3ChartLibrary, title: 'D3' }
};
export const babelConfig = {
diff --git a/packages/cubejs-playground/src/libraries/d3.js b/packages/cubejs-playground/src/libraries/d3.js
new file mode 100644
index 0000000000000..9a9c4884bcead
--- /dev/null
+++ b/packages/cubejs-playground/src/libraries/d3.js
@@ -0,0 +1,169 @@
+import * as d3 from 'd3';
+
+const drawFrame = `// Set the dimensions and margins of the graph
+ var margin = {top: 10, right: 30, bottom: 30, left: 60},
+ width = node.clientWidth - margin.left - margin.right, height = 400 - margin.top - margin.bottom;
+
+ d3.select(node).html("");
+ var svg = d3.select(node)
+ .append("svg")
+ .attr("width", width + margin.left + margin.right)
+ .attr("height", height + margin.top + margin.bottom)
+ .append("g")
+ .attr("transform",
+ "translate(" + margin.left + "," + margin.top + ")");`;
+
+const yAxis = (max) => (`// Add Y axis
+ var y = d3.scaleLinear()
+ .domain([0, ${max}])
+ .range([ height, 0 ]);
+ svg.append("g")
+ .call(d3.axisLeft(y));`);
+
+const xAxisTime = `// Add X axis
+ var x = d3.scaleTime()
+ .domain(d3.extent(resultSet.chartPivot(), c => d3.isoParse(c.x)))
+ .range([ 0, width ]);
+ svg.append("g")
+ .attr("transform", "translate(0," + height + ")")
+ .call(d3.axisBottom(x));`;
+
+const stackData = `// Transform data into D3 format
+ var keys = resultSet.seriesNames().map(s => s.key)
+ const data = d3.stack()
+ .keys(keys)
+ (resultSet.chartPivot())
+
+ // Color palette
+ var color = d3.scaleOrdinal()
+ .domain(keys)
+ .range(COLORS_SERIES)`;
+
+const drawByChartType = {
+ line: `
+ // Prepare data in D3 format
+ const data = resultSet.series().map((series) => ({
+ key: series.title, values: series.series
+ }));
+
+ // color palette
+ var color = d3.scaleOrdinal()
+ .domain(data.map(d => d.key ))
+ .range(COLORS_SERIES)
+
+ ${xAxisTime}
+
+ ${yAxis(`d3.max(data.map((s) => d3.max(s.values, (i) => i.value)))`)}
+
+ // Draw the lines
+ svg.selectAll(".line")
+ .data(data)
+ .enter()
+ .append("path")
+ .attr("fill", "none")
+ .attr("stroke", d => color(d.key))
+ .attr("stroke-width", 1.5)
+ .attr("d", (d) => {
+ return d3.line()
+ .x(d => x(d3.isoParse(d.x)))
+ .y(d => y(+d.value))
+ (d.values)
+ })
+ `,
+ bar: `
+ ${stackData}
+
+ // Add X axis
+ var x = d3.scaleBand()
+ .range([ 0, width ])
+ .domain(resultSet.chartPivot().map(c => c.x))
+ .padding(0.3);
+ svg.append("g")
+ .attr("transform", "translate(0," + height + ")")
+ .call(d3.axisBottom(x))
+
+ ${yAxis(`d3.max(data.map((s) => d3.max(s, (i) => i[1])))`)}
+
+ // Add the bars
+ svg.append("g")
+ .selectAll("g")
+ // Enter in the stack data = loop key per key = group per group
+ .data(data)
+ .enter().append("g")
+ .attr("fill", d => color(d.key))
+ .selectAll("rect")
+ // enter a second time = loop subgroup per subgroup to add all rectangles
+ .data(d => d)
+ .enter().append("rect")
+ .attr("x", d => x(d.data.x))
+ .attr("y", d => y(d[1]))
+ .attr("height", d => y(d[0]) - y(d[1]))
+ .attr("width",x.bandwidth())
+ `,
+ area: `
+ ${stackData}
+
+ ${xAxisTime}
+
+ ${yAxis(`d3.max(data.map((s) => d3.max(s, (i) => i[1])))`)}
+
+ // Add the areas
+ svg
+ .selectAll("mylayers")
+ .data(data)
+ .enter().append("path")
+ .style("fill", d => color(d.key))
+ .attr("d", d3.area()
+ .x(d => x(d3.isoParse(d.data.x)))
+ .y0(d => y(d[0]))
+ .y1(d => y(d[1]))
+ )
+ `,
+ pie: `const data = resultSet.series()[0].series.map(s => s.value);
+ const data_ready = d3.pie()(data);
+
+ // The radius of the pieplot is half the width or half the height (smallest one).
+ var radius = Math.min(400, 400) / 2 - 40;
+
+ // Seprate container to center align pie chart
+ var pieContainer = svg.attr('height', height)
+ .append('g')
+ .attr('transform', 'translate(' + width/2 + ',' + height/2 +')');
+
+ pieContainer
+ .selectAll('pieArcs')
+ .data(data_ready)
+ .enter()
+ .append('path')
+ .attr('d', d3.arc()
+ .innerRadius(0)
+ .outerRadius(radius)
+ )
+ .attr('fill', d => COLORS_SERIES[d.index])
+ .style("opacity", 0.7)
+ `
+};
+
+export const sourceCodeTemplate = ({ chartType, renderFnName }) => (
+ `
+import * as d3 from 'd3';
+const COLORS_SERIES = ['#FF6492', '#141446', '#7A77FF'];
+
+const draw = (node, resultSet, chartType) => {
+ ${drawFrame}
+ ${drawByChartType[chartType]}
+}
+
+const ${renderFnName} = ({ resultSet }) => {
+ return (
+
el && draw(el, resultSet, '${chartType}')}
+ />
+ );
+};
+`
+);
+
+export const imports = {
+ 'd3': d3
+};
diff --git a/packages/cubejs-playground/yarn.lock b/packages/cubejs-playground/yarn.lock
index 7091f9c4aa9af..8cc870c325aaa 100644
--- a/packages/cubejs-playground/yarn.lock
+++ b/packages/cubejs-playground/yarn.lock
@@ -1031,10 +1031,10 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
-"@cubejs-client/core@^0.12.0":
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/@cubejs-client/core/-/core-0.12.0.tgz#ef3f474ac405e80a67532e6a3e3fd8e693ef2853"
- integrity sha512-I7msBRbSdnOb+Q+tWb3j8O4aKs4AKg9gAFuT4lEuaJZEUxBng243a/l73f/+2rMBMxYf6Q7TaUiCzJ2lFrqCoA==
+"@cubejs-client/core@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/@cubejs-client/core/-/core-0.13.0.tgz#cce54170011fdfa86d263b5e6d4f11fc480df140"
+ integrity sha512-OwRi9tNrhKVnli+xIAbQZsVOv3AmPDYOWZDG+heJLZJIPMBzqiAbB7jHiN5LXrI8Vapa89M7pUlowiozD/L6Aw==
dependencies:
"@babel/runtime" "^7.1.2"
core-js "^2.5.3"
@@ -1044,10 +1044,10 @@
ramda "^0.25.0"
url-search-params-polyfill "^7.0.0"
-"@cubejs-client/react@^0.12.0":
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/@cubejs-client/react/-/react-0.12.0.tgz#71792351456210ba45f72896325a478111da30dc"
- integrity sha512-sWG1zlvGuaN3WbxP5D5uXryM86jEt6aqurrM1dYPyXxGtgAWK3al9/vQ2GuZOa5oaawkuAc6+TeeUaH542cKZA==
+"@cubejs-client/react@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/@cubejs-client/react/-/react-0.13.0.tgz#675d0a71c190687e9a018068cf37b502b9f4fabf"
+ integrity sha512-eM4Ld66jqp9O5mZkv9hG8PcZiVkvKPdRS6D2Gdq3yWv+O/LeoUypMJlbGluSZZRZir+fZlpIhA18wkSVOUurwg==
dependencies:
"@babel/runtime" "^7.1.2"
core-js "^2.5.3"
@@ -2825,6 +2825,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
+commander@2:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
commander@2.17.x:
version "2.17.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
@@ -3381,11 +3386,35 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-d3-array@^1.2.0:
+d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0:
version "1.2.4"
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
+d3-axis@1:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.12.tgz#cdf20ba210cfbb43795af33756886fb3638daac9"
+ integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==
+
+d3-brush@1:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc"
+ integrity sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A==
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3-chord@1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.6.tgz#309157e3f2db2c752f0280fedd35f2067ccbb15f"
+ integrity sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==
+ dependencies:
+ d3-array "1"
+ d3-path "1"
+
d3-collection@1:
version "1.0.7"
resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
@@ -3396,21 +3425,74 @@ d3-color@1:
resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf"
integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==
+d3-contour@1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3"
+ integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==
+ dependencies:
+ d3-array "^1.1.1"
+
d3-dispatch@1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015"
integrity sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==
+d3-drag@1:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.5.tgz#2537f451acd39d31406677b7dc77c82f7d988f70"
+ integrity sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==
+ dependencies:
+ d3-dispatch "1"
+ d3-selection "1"
+
+d3-dsv@1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c"
+ integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==
+ dependencies:
+ commander "2"
+ iconv-lite "0.4"
+ rw "1"
+
d3-ease@1, d3-ease@~1.0.3:
version "1.0.5"
resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.5.tgz#8ce59276d81241b1b72042d6af2d40e76d936ffb"
integrity sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==
+d3-fetch@1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.1.2.tgz#957c8fbc6d4480599ba191b1b2518bf86b3e1be2"
+ integrity sha512-S2loaQCV/ZeyTyIF2oP8D1K9Z4QizUzW7cWeAOAS4U88qOt3Ucf6GsmgthuYSdyB2HyEm4CeGvkQxWsmInsIVA==
+ dependencies:
+ d3-dsv "1"
+
+d3-force@1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b"
+ integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==
+ dependencies:
+ d3-collection "1"
+ d3-dispatch "1"
+ d3-quadtree "1"
+ d3-timer "1"
+
d3-format@1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.1.tgz#c45f74b17c5a290c072a4ba7039dd19662cd5ce6"
integrity sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g==
+d3-geo@1:
+ version "1.11.9"
+ resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.9.tgz#77eaed14ba62fc2c0aef55cd2943849c866f7ae6"
+ integrity sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A==
+ dependencies:
+ d3-array "1"
+
+d3-hierarchy@1:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
+ integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==
+
d3-interpolate@1, d3-interpolate@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
@@ -3430,7 +3512,30 @@ d3-path@1:
resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.8.tgz#4a0606a794d104513ec4a8af43525f374b278719"
integrity sha512-J6EfUNwcMQ+aM5YPOB8ZbgAZu6wc82f/0WFxrxwV6Ll8wBwLaHLKCqQ5Imub02JriCVVdPjgI+6P3a4EWJCxAg==
-d3-scale@^2.1.0:
+d3-polygon@1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.6.tgz#0bf8cb8180a6dc107f518ddf7975e12abbfbd38e"
+ integrity sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==
+
+d3-quadtree@1:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135"
+ integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==
+
+d3-random@1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.2.tgz#2833be7c124360bf9e2d3fd4f33847cfe6cab291"
+ integrity sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==
+
+d3-scale-chromatic@1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98"
+ integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==
+ dependencies:
+ d3-color "1"
+ d3-interpolate "1"
+
+d3-scale@2, d3-scale@^2.1.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f"
integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==
@@ -3442,11 +3547,23 @@ d3-scale@^2.1.0:
d3-time "1"
d3-time-format "2"
+d3-selection@1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98"
+ integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA==
+
d3-selection@^1.0.2, d3-selection@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474"
integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==
+d3-shape@1:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
+ integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==
+ dependencies:
+ d3-path "1"
+
d3-shape@^1.2.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033"
@@ -3471,6 +3588,18 @@ d3-timer@1, d3-timer@~1.0.6:
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba"
integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==
+d3-transition@1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398"
+ integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==
+ dependencies:
+ d3-color "1"
+ d3-dispatch "1"
+ d3-ease "1"
+ d3-interpolate "1"
+ d3-selection "^1.1.0"
+ d3-timer "1"
+
d3-transition@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.2.0.tgz#f538c0e21b2aa1f05f3e965f8567e81284b3b2b8"
@@ -3483,6 +3612,59 @@ d3-transition@^1.0.1:
d3-selection "^1.1.0"
d3-timer "1"
+d3-voronoi@1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297"
+ integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==
+
+d3-zoom@1:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a"
+ integrity sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==
+ dependencies:
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-interpolate "1"
+ d3-selection "1"
+ d3-transition "1"
+
+d3@^5.14.2:
+ version "5.14.2"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-5.14.2.tgz#a3fb3af016d362aaf4dacbe618ae949c1744b8c4"
+ integrity sha512-Ccipa9XrYW5N0QkP6u0Qb8kU6WekIXBiDenmZm1zLvuq/9pBBhRCJLCICEOsH5Og4B0Xw02bhqGkK5VN/oPH0w==
+ dependencies:
+ d3-array "1"
+ d3-axis "1"
+ d3-brush "1"
+ d3-chord "1"
+ d3-collection "1"
+ d3-color "1"
+ d3-contour "1"
+ d3-dispatch "1"
+ d3-drag "1"
+ d3-dsv "1"
+ d3-ease "1"
+ d3-fetch "1"
+ d3-force "1"
+ d3-format "1"
+ d3-geo "1"
+ d3-hierarchy "1"
+ d3-interpolate "1"
+ d3-path "1"
+ d3-polygon "1"
+ d3-quadtree "1"
+ d3-random "1"
+ d3-scale "2"
+ d3-scale-chromatic "1"
+ d3-selection "1"
+ d3-shape "1"
+ d3-time "1"
+ d3-time-format "2"
+ d3-timer "1"
+ d3-transition "1"
+ d3-voronoi "1"
+ d3-zoom "1"
+
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
@@ -5495,7 +5677,7 @@ hyphenate-style-name@^1.0.0:
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48"
integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==
-iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -10308,7 +10490,7 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
-rw@^1.3.2:
+rw@1, rw@^1.3.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=