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=