From 4b0bcb960004942b2af6647d249ac10b86cd3101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Benitte?= Date: Sun, 14 Apr 2019 11:56:26 +0900 Subject: [PATCH] feat(swarmplot): add support for voronoi overlay) --- .eslintrc.yml | 4 + .storybook/config.js | 2 + CONTRIBUTING.md | 29 +- conf/base.yaml | 589 +++++++++--------- package.json | 4 +- packages/axes/tests/axes.test.js | 2 - packages/bar/src/enhance.js | 4 +- packages/bar/src/props.js | 6 +- packages/bar/tests/Bar.test.js | 8 + packages/circle-packing/src/enhance.js | 4 +- packages/circle-packing/src/props.js | 6 +- packages/colors/src/index.js | 1 + packages/colors/src/inheritedColor.js | 80 +++ packages/colors/src/props.js | 14 +- packages/colors/tests/inheritedColor.test.js | 113 ++++ packages/core/src/hooks/index.js | 1 + packages/core/src/hooks/useValueFormatter.js | 31 + packages/core/src/tooltip/BasicTooltip.js | 10 +- packages/generators/src/bullet.js | 8 + packages/generators/src/chord.js | 8 + packages/generators/src/color.js | 8 + packages/generators/src/index.js | 9 + .../generators/src/parallelCoordinates.js | 8 + packages/generators/src/sankey.js | 8 + packages/generators/src/swarmplot.js | 59 ++ packages/pie/src/hooks.js | 67 ++ packages/pie/src/index.js | 1 + .../scatterplot/src/ScatterPlotTooltip.js | 2 +- packages/scatterplot/src/enhance.js | 6 +- packages/swarmplot/README.md | 4 +- packages/swarmplot/doc/swarmplot-canvas.png | Bin 0 -> 103819 bytes packages/swarmplot/doc/swarmplot.png | Bin 0 -> 63595 bytes packages/swarmplot/index.d.ts | 84 +++ packages/swarmplot/package.json | 5 +- .../swarmplot/src/AnimatedSwarmPlotNodes.js | 128 ++-- .../swarmplot/src/StaticSwarmPlotNodes.js | 60 ++ packages/swarmplot/src/SwarmPlot.js | 182 +++++- packages/swarmplot/src/SwarmPlotCanvas.js | 305 ++++++++- packages/swarmplot/src/SwarmPlotNode.js | 77 +++ packages/swarmplot/src/SwarmPlotTooltip.js | 18 +- packages/swarmplot/src/compute.js | 146 +++-- packages/swarmplot/src/hooks.js | 227 +++++-- packages/swarmplot/src/index.js | 2 + packages/swarmplot/src/props.js | 107 ++-- .../swarmplot/stories/SwarmPlot.stories.js | 43 ++ .../stories/SwarmPlotCanvas.stories.js | 40 ++ packages/swarmplot/stories/SwarmPlotLayers.js | 159 +++++ .../swarmplot/stories/SwarmPlotRenderNode.js | 137 ++++ packages/swarmplot/tests/.eslintrc.yml | 2 + packages/swarmplot/tests/compute.test.js | 146 +++++ packages/treemap/src/enhance.js | 4 +- packages/treemap/src/props.js | 4 +- packages/voronoi/src/Mesh.js | 246 ++++---- packages/voronoi/src/computeMesh.js | 18 +- packages/voronoi/src/hooks.js | 21 + packages/voronoi/src/index.js | 1 + packages/voronoi/src/meshCanvas.js | 9 + scripts/capture.js | 15 +- tsconfig.json | 4 +- website/gatsby-browser.js | 9 + website/gatsby-config.js | 4 +- .../src/assets/stories/SwarmPlotLayers.png | Bin 0 -> 133176 bytes .../assets/stories/SwarmPlotRenderNode.png | Bin 0 -> 146655 bytes website/src/components/ThemeSelector.js | 12 +- .../components/components/ActionsLoggerLog.js | 25 +- .../components/components/ComponentTabs.js | 6 +- .../components/ComponentTemplate.js | 10 +- website/src/components/components/Stories.js | 11 +- website/src/components/icons/SwarmPlotIcon.js | 21 +- website/src/data/components/bar/meta.yml | 28 +- website/src/data/components/bar/props.js | 4 +- website/src/data/components/bubble/meta.yml | 8 +- website/src/data/components/bubble/props.js | 4 +- website/src/data/components/bullet/meta.yml | 16 +- website/src/data/components/geo/mapper.js | 22 +- website/src/data/components/geo/props.js | 3 - website/src/data/components/heatmap/meta.yml | 8 +- website/src/data/components/line/meta.yml | 48 +- website/src/data/components/radar/meta.yml | 8 +- .../src/data/components/scatterplot/meta.yml | 36 +- .../data/components/swarmplot/generator.js | 29 +- .../src/data/components/swarmplot/mapper.js | 5 +- .../src/data/components/swarmplot/meta.yml | 36 +- .../src/data/components/swarmplot/props.js | 406 +++++++++--- .../src/data/components/treemap/generator.js | 4 +- website/src/pages/bar/api.js | 2 +- website/src/pages/bar/canvas.js | 3 +- website/src/pages/bar/index.js | 3 +- website/src/pages/bubble/canvas.js | 3 +- website/src/pages/bubble/html.js | 3 +- website/src/pages/bubble/index.js | 3 +- website/src/pages/bullet/index.js | 3 + website/src/pages/calendar/canvas.js | 1 + website/src/pages/calendar/index.js | 1 + website/src/pages/choropleth/canvas.js | 1 + website/src/pages/choropleth/index.js | 1 + website/src/pages/heatmap/canvas.js | 1 + website/src/pages/heatmap/index.js | 1 + website/src/pages/scatterplot/index.js | 4 +- website/src/pages/swarmplot/canvas.js | 123 ++-- website/src/pages/swarmplot/index.js | 116 ++-- website/src/pages/treemap/canvas.js | 12 +- website/src/pages/treemap/html.js | 4 +- website/src/pages/treemap/index.js | 4 +- website/src/pages/waffle/canvas.js | 1 + website/src/pages/waffle/html.js | 1 + website/src/pages/waffle/index.js | 1 + website/src/theming/nivo.js | 8 +- yarn.lock | 32 - 109 files changed, 3211 insertions(+), 1170 deletions(-) create mode 100644 packages/colors/src/inheritedColor.js create mode 100644 packages/colors/tests/inheritedColor.test.js create mode 100644 packages/core/src/hooks/useValueFormatter.js create mode 100644 packages/generators/src/swarmplot.js create mode 100644 packages/pie/src/hooks.js create mode 100644 packages/swarmplot/doc/swarmplot-canvas.png create mode 100644 packages/swarmplot/doc/swarmplot.png create mode 100644 packages/swarmplot/index.d.ts create mode 100644 packages/swarmplot/stories/SwarmPlot.stories.js create mode 100644 packages/swarmplot/stories/SwarmPlotCanvas.stories.js create mode 100644 packages/swarmplot/stories/SwarmPlotLayers.js create mode 100644 packages/swarmplot/stories/SwarmPlotRenderNode.js create mode 100644 packages/swarmplot/tests/.eslintrc.yml create mode 100644 packages/swarmplot/tests/compute.test.js create mode 100644 packages/voronoi/src/hooks.js create mode 100644 website/src/assets/stories/SwarmPlotLayers.png create mode 100644 website/src/assets/stories/SwarmPlotRenderNode.png diff --git a/.eslintrc.yml b/.eslintrc.yml index 8a02b8545..147d799db 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -17,3 +17,7 @@ globals: extends: - eslint:recommended - plugin:react/recommended + +settings: + react: + version: detect \ No newline at end of file diff --git a/.storybook/config.js b/.storybook/config.js index 497a0b3ac..94c7ce45a 100644 --- a/.storybook/config.js +++ b/.storybook/config.js @@ -63,6 +63,8 @@ function loadStories() { require('../packages/sunburst/stories/sunburst.stories') require('../packages/treemap/stories/treemap.stories') require('../packages/treemap/stories/treemapHtml.stories') + require('../packages/swarmplot/stories/SwarmPlot.stories') + // require('../packages/swarmplot/stories/SwarmPlotCanvas.stories') // require('../packages/voronoi/stories/voronoi.stories') require('../packages/waffle/stories/waffle.stories') require('../packages/waffle/stories/waffle-html.stories') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 95aea9e25..24c3944dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,12 +22,15 @@ In order to install all the required dependencies and to establish links between the various packages, please execute the following: ``` -# please note that it can take a while as the repository contains a lot of packages make init ``` +> please note that it will take a while as this project uses a lot of dependencies… + ## Development +### Storybook + The easiest way to work on Nivo, is to use our [storybook](https://storybook.js.org/). The storybook development mode can be started via: @@ -35,11 +38,29 @@ The storybook development mode can be started via: make storybook ``` -Once you have made changes to the packages, you will need to rebuild the respective package. -In this case, you have two options: +The storybook uses the src code of each package, thus you don't have to build +to see your changes. + +### Demo/Doc website + +You can also use the demo website while working on components, it might be +useful to see how it behaves with various controls, and might be required to +update the documentation if you change the public API of components. + +The packages are automatically linked to the website, so it doesn't use +the version from npm, however if you make some change to the source +of a package, you'll have to rebuild it to see the changes. + +To automate this process, you can start a watcher on the package you're working +on, for example if you want to make some change on the `@nivo/bar` package, +you should run `make package-dev-bar` and then start the website `make website`, +this way each change you make will trigger a build and will be (almost :)) +immedialty visible on the website. + +You can also build the packages without running a watcher, you have two options: 1. Rebuild all the packages via `make packages-build` or… - 2. Rebuild only a specific package via, e.g. for the package `bar`, `PACKAGE=bar make package-build-bar`. + 2. Rebuild only a specific package, for example `make package-build-bar` for `@nivo/bar` package ### Formatting diff --git a/conf/base.yaml b/conf/base.yaml index 518349096..5d5c554f1 100644 --- a/conf/base.yaml +++ b/conf/base.yaml @@ -1,7 +1,21 @@ capture: baseUrl: http://localhost:8000 pages: - # # capture illustrations for readme + ######################################################################### + # + # CHARTS + # capture illustrations for readme + # + ######################################################################### + + - path: /swarmplot + selector: '#chart' + output: ./packages/swarmplot/doc/swarmplot.png + - path: /swarmplot/canvas + selector: '#chart' + theme: dark + output: ./packages/swarmplot/doc/swarmplot-canvas.png + # - path: /geomap # selector: .chart-tabs__content # output: ./packages/geo/doc/geomap.png @@ -130,289 +144,294 @@ capture: # selector: .chart-tabs__content # output: ./packages/waffle/doc/waffle-canvas.png - # capture icons for website - - path: /internal/icons - selector: '#bar-lightNeutral' - output: ./website/src/assets/icons/bar-light-neutral.png - - path: /internal/icons - selector: '#bar-lightColored' - output: ./website/src/assets/icons/bar-light-colored.png - - path: /internal/icons - selector: '#bar-darkNeutral' - output: ./website/src/assets/icons/bar-dark-neutral.png - - path: /internal/icons - selector: '#bar-darkColored' - output: ./website/src/assets/icons/bar-dark-colored.png + ######################################################################### + # + # ICONS + # capture charts' icons + # + ######################################################################### + # - path: /internal/icons + # selector: '#bar-lightNeutral' + # output: ./website/src/assets/icons/bar-light-neutral.png + # - path: /internal/icons + # selector: '#bar-lightColored' + # output: ./website/src/assets/icons/bar-light-colored.png + # - path: /internal/icons + # selector: '#bar-darkNeutral' + # output: ./website/src/assets/icons/bar-dark-neutral.png + # - path: /internal/icons + # selector: '#bar-darkColored' + # output: ./website/src/assets/icons/bar-dark-colored.png - - path: /internal/icons - selector: '#bullet-lightNeutral' - output: ./website/src/assets/icons/bullet-light-neutral.png - - path: /internal/icons - selector: '#bullet-lightColored' - output: ./website/src/assets/icons/bullet-light-colored.png - - path: /internal/icons - selector: '#bullet-darkNeutral' - output: ./website/src/assets/icons/bullet-dark-neutral.png - - path: /internal/icons - selector: '#bullet-darkColored' - output: ./website/src/assets/icons/bullet-dark-colored.png - - - path: /internal/icons - selector: '#circle-packing-lightNeutral' - output: ./website/src/assets/icons/circle-packing-light-neutral.png - - path: /internal/icons - selector: '#circle-packing-lightColored' - output: ./website/src/assets/icons/circle-packing-light-colored.png - - path: /internal/icons - selector: '#circle-packing-darkNeutral' - output: ./website/src/assets/icons/circle-packing-dark-neutral.png - - path: /internal/icons - selector: '#circle-packing-darkColored' - output: ./website/src/assets/icons/circle-packing-dark-colored.png - - - path: /internal/icons - selector: '#choropleth-lightNeutral' - output: ./website/src/assets/icons/choropleth-light-neutral.png - - path: /internal/icons - selector: '#choropleth-lightColored' - output: ./website/src/assets/icons/choropleth-light-colored.png - - path: /internal/icons - selector: '#choropleth-darkNeutral' - output: ./website/src/assets/icons/choropleth-dark-neutral.png - - path: /internal/icons - selector: '#choropleth-darkColored' - output: ./website/src/assets/icons/choropleth-dark-colored.png + # - path: /internal/icons + # selector: '#bullet-lightNeutral' + # output: ./website/src/assets/icons/bullet-light-neutral.png + # - path: /internal/icons + # selector: '#bullet-lightColored' + # output: ./website/src/assets/icons/bullet-light-colored.png + # - path: /internal/icons + # selector: '#bullet-darkNeutral' + # output: ./website/src/assets/icons/bullet-dark-neutral.png + # - path: /internal/icons + # selector: '#bullet-darkColored' + # output: ./website/src/assets/icons/bullet-dark-colored.png + + # - path: /internal/icons + # selector: '#circle-packing-lightNeutral' + # output: ./website/src/assets/icons/circle-packing-light-neutral.png + # - path: /internal/icons + # selector: '#circle-packing-lightColored' + # output: ./website/src/assets/icons/circle-packing-light-colored.png + # - path: /internal/icons + # selector: '#circle-packing-darkNeutral' + # output: ./website/src/assets/icons/circle-packing-dark-neutral.png + # - path: /internal/icons + # selector: '#circle-packing-darkColored' + # output: ./website/src/assets/icons/circle-packing-dark-colored.png + + # - path: /internal/icons + # selector: '#choropleth-lightNeutral' + # output: ./website/src/assets/icons/choropleth-light-neutral.png + # - path: /internal/icons + # selector: '#choropleth-lightColored' + # output: ./website/src/assets/icons/choropleth-light-colored.png + # - path: /internal/icons + # selector: '#choropleth-darkNeutral' + # output: ./website/src/assets/icons/choropleth-dark-neutral.png + # - path: /internal/icons + # selector: '#choropleth-darkColored' + # output: ./website/src/assets/icons/choropleth-dark-colored.png - - path: /internal/icons - selector: '#heatmap-lightNeutral' - output: ./website/src/assets/icons/heatmap-light-neutral.png - - path: /internal/icons - selector: '#heatmap-lightColored' - output: ./website/src/assets/icons/heatmap-light-colored.png - - path: /internal/icons - selector: '#heatmap-darkNeutral' - output: ./website/src/assets/icons/heatmap-dark-neutral.png - - path: /internal/icons - selector: '#heatmap-darkColored' - output: ./website/src/assets/icons/heatmap-dark-colored.png - - - path: /internal/icons - selector: '#geomap-lightNeutral' - output: ./website/src/assets/icons/geomap-light-neutral.png - - path: /internal/icons - selector: '#geomap-lightColored' - output: ./website/src/assets/icons/geomap-light-colored.png - - path: /internal/icons - selector: '#geomap-darkNeutral' - output: ./website/src/assets/icons/geomap-dark-neutral.png - - path: /internal/icons - selector: '#geomap-darkColored' - output: ./website/src/assets/icons/geomap-dark-colored.png - - - path: /internal/icons - selector: '#line-lightNeutral' - output: ./website/src/assets/icons/line-light-neutral.png - - path: /internal/icons - selector: '#line-lightColored' - output: ./website/src/assets/icons/line-light-colored.png - - path: /internal/icons - selector: '#line-darkNeutral' - output: ./website/src/assets/icons/line-dark-neutral.png - - path: /internal/icons - selector: '#line-darkColored' - output: ./website/src/assets/icons/line-dark-colored.png - - - path: /internal/icons - selector: '#chord-lightNeutral' - output: ./website/src/assets/icons/chord-light-neutral.png - - path: /internal/icons - selector: '#chord-lightColored' - output: ./website/src/assets/icons/chord-light-colored.png - - path: /internal/icons - selector: '#chord-darkNeutral' - output: ./website/src/assets/icons/chord-dark-neutral.png - - path: /internal/icons - selector: '#chord-darkColored' - output: ./website/src/assets/icons/chord-dark-colored.png - - - path: /internal/icons - selector: '#parallel-coordinates-lightNeutral' - output: ./website/src/assets/icons/parallel-coordinates-light-neutral.png - - path: /internal/icons - selector: '#parallel-coordinates-lightColored' - output: ./website/src/assets/icons/parallel-coordinates-light-colored.png - - path: /internal/icons - selector: '#parallel-coordinates-darkNeutral' - output: ./website/src/assets/icons/parallel-coordinates-dark-neutral.png - - path: /internal/icons - selector: '#parallel-coordinates-darkColored' - output: ./website/src/assets/icons/parallel-coordinates-dark-colored.png - - - path: /internal/icons - selector: '#pie-lightNeutral' - output: ./website/src/assets/icons/pie-light-neutral.png - - path: /internal/icons - selector: '#pie-lightColored' - output: ./website/src/assets/icons/pie-light-colored.png - - path: /internal/icons - selector: '#pie-darkNeutral' - output: ./website/src/assets/icons/pie-dark-neutral.png - - path: /internal/icons - selector: '#pie-darkColored' - output: ./website/src/assets/icons/pie-dark-colored.png - - - path: /internal/icons - selector: '#waffle-lightNeutral' - output: ./website/src/assets/icons/waffle-light-neutral.png - - path: /internal/icons - selector: '#waffle-lightColored' - output: ./website/src/assets/icons/waffle-light-colored.png - - path: /internal/icons - selector: '#waffle-darkNeutral' - output: ./website/src/assets/icons/waffle-dark-neutral.png - - path: /internal/icons - selector: '#waffle-darkColored' - output: ./website/src/assets/icons/waffle-dark-colored.png - - - path: /internal/icons - selector: '#stream-lightNeutral' - output: ./website/src/assets/icons/stream-light-neutral.png - - path: /internal/icons - selector: '#stream-lightColored' - output: ./website/src/assets/icons/stream-light-colored.png - - path: /internal/icons - selector: '#stream-darkNeutral' - output: ./website/src/assets/icons/stream-dark-neutral.png - - path: /internal/icons - selector: '#stream-darkColored' - output: ./website/src/assets/icons/stream-dark-colored.png - - - path: /internal/icons - selector: '#scatterplot-lightNeutral' - output: ./website/src/assets/icons/scatterplot-light-neutral.png - - path: /internal/icons - selector: '#scatterplot-lightColored' - output: ./website/src/assets/icons/scatterplot-light-colored.png - - path: /internal/icons - selector: '#scatterplot-darkNeutral' - output: ./website/src/assets/icons/scatterplot-dark-neutral.png - - path: /internal/icons - selector: '#scatterplot-darkColored' - output: ./website/src/assets/icons/scatterplot-dark-colored.png - - - path: /internal/icons - selector: '#radar-lightNeutral' - output: ./website/src/assets/icons/radar-light-neutral.png - - path: /internal/icons - selector: '#radar-lightColored' - output: ./website/src/assets/icons/radar-light-colored.png - - path: /internal/icons - selector: '#radar-darkNeutral' - output: ./website/src/assets/icons/radar-dark-neutral.png - - path: /internal/icons - selector: '#radar-darkColored' - output: ./website/src/assets/icons/radar-dark-colored.png - - - path: /internal/icons - selector: '#calendar-lightNeutral' - output: ./website/src/assets/icons/calendar-light-neutral.png - - path: /internal/icons - selector: '#calendar-lightColored' - output: ./website/src/assets/icons/calendar-light-colored.png - - path: /internal/icons - selector: '#calendar-darkNeutral' - output: ./website/src/assets/icons/calendar-dark-neutral.png - - path: /internal/icons - selector: '#calendar-darkColored' - output: ./website/src/assets/icons/calendar-dark-colored.png - - - path: /internal/icons - selector: '#data-lightNeutral' - output: ./website/src/assets/icons/data-light-neutral.png - - path: /internal/icons - selector: '#data-lightColored' - output: ./website/src/assets/icons/data-light-colored.png - - path: /internal/icons - selector: '#data-darkNeutral' - output: ./website/src/assets/icons/data-dark-neutral.png - - path: /internal/icons - selector: '#data-darkColored' - output: ./website/src/assets/icons/data-dark-colored.png - - - path: /internal/icons - selector: '#code-lightNeutral' - output: ./website/src/assets/icons/code-light-neutral.png - - path: /internal/icons - selector: '#code-lightColored' - output: ./website/src/assets/icons/code-light-colored.png - - path: /internal/icons - selector: '#code-darkNeutral' - output: ./website/src/assets/icons/code-dark-neutral.png - - path: /internal/icons - selector: '#code-darkColored' - output: ./website/src/assets/icons/code-dark-colored.png - - - path: /internal/icons - selector: '#treemap-lightNeutral' - output: ./website/src/assets/icons/treemap-light-neutral.png - - path: /internal/icons - selector: '#treemap-lightColored' - output: ./website/src/assets/icons/treemap-light-colored.png - - path: /internal/icons - selector: '#treemap-darkNeutral' - output: ./website/src/assets/icons/treemap-dark-neutral.png - - path: /internal/icons - selector: '#treemap-darkColored' - output: ./website/src/assets/icons/treemap-dark-colored.png - - - path: /internal/icons - selector: '#sankey-lightNeutral' - output: ./website/src/assets/icons/sankey-light-neutral.png - - path: /internal/icons - selector: '#sankey-lightColored' - output: ./website/src/assets/icons/sankey-light-colored.png - - path: /internal/icons - selector: '#sankey-darkNeutral' - output: ./website/src/assets/icons/sankey-dark-neutral.png - - path: /internal/icons - selector: '#sankey-darkColored' - output: ./website/src/assets/icons/sankey-dark-colored.png - - - path: /internal/icons - selector: '#voronoi-lightNeutral' - output: ./website/src/assets/icons/voronoi-light-neutral.png - - path: /internal/icons - selector: '#voronoi-lightColored' - output: ./website/src/assets/icons/voronoi-light-colored.png - - path: /internal/icons - selector: '#voronoi-darkNeutral' - output: ./website/src/assets/icons/voronoi-dark-neutral.png - - path: /internal/icons - selector: '#voronoi-darkColored' - output: ./website/src/assets/icons/voronoi-dark-colored.png - - - path: /internal/icons - selector: '#sunburst-lightNeutral' - output: ./website/src/assets/icons/sunburst-light-neutral.png - - path: /internal/icons - selector: '#sunburst-lightColored' - output: ./website/src/assets/icons/sunburst-light-colored.png - - path: /internal/icons - selector: '#sunburst-darkNeutral' - output: ./website/src/assets/icons/sunburst-dark-neutral.png - - path: /internal/icons - selector: '#sunburst-darkColored' - output: ./website/src/assets/icons/sunburst-dark-colored.png - - - path: /internal/icons - selector: '#swarmplot-lightNeutral' - output: ./website/src/assets/icons/swarmplot-light-neutral.png - - path: /internal/icons - selector: '#swarmplot-lightColored' - output: ./website/src/assets/icons/swarmplot-light-colored.png - - path: /internal/icons - selector: '#swarmplot-darkNeutral' - output: ./website/src/assets/icons/swarmplot-dark-neutral.png - - path: /internal/icons - selector: '#swarmplot-darkColored' - output: ./website/src/assets/icons/swarmplot-dark-colored.png \ No newline at end of file + # - path: /internal/icons + # selector: '#heatmap-lightNeutral' + # output: ./website/src/assets/icons/heatmap-light-neutral.png + # - path: /internal/icons + # selector: '#heatmap-lightColored' + # output: ./website/src/assets/icons/heatmap-light-colored.png + # - path: /internal/icons + # selector: '#heatmap-darkNeutral' + # output: ./website/src/assets/icons/heatmap-dark-neutral.png + # - path: /internal/icons + # selector: '#heatmap-darkColored' + # output: ./website/src/assets/icons/heatmap-dark-colored.png + + # - path: /internal/icons + # selector: '#geomap-lightNeutral' + # output: ./website/src/assets/icons/geomap-light-neutral.png + # - path: /internal/icons + # selector: '#geomap-lightColored' + # output: ./website/src/assets/icons/geomap-light-colored.png + # - path: /internal/icons + # selector: '#geomap-darkNeutral' + # output: ./website/src/assets/icons/geomap-dark-neutral.png + # - path: /internal/icons + # selector: '#geomap-darkColored' + # output: ./website/src/assets/icons/geomap-dark-colored.png + + # - path: /internal/icons + # selector: '#line-lightNeutral' + # output: ./website/src/assets/icons/line-light-neutral.png + # - path: /internal/icons + # selector: '#line-lightColored' + # output: ./website/src/assets/icons/line-light-colored.png + # - path: /internal/icons + # selector: '#line-darkNeutral' + # output: ./website/src/assets/icons/line-dark-neutral.png + # - path: /internal/icons + # selector: '#line-darkColored' + # output: ./website/src/assets/icons/line-dark-colored.png + + # - path: /internal/icons + # selector: '#chord-lightNeutral' + # output: ./website/src/assets/icons/chord-light-neutral.png + # - path: /internal/icons + # selector: '#chord-lightColored' + # output: ./website/src/assets/icons/chord-light-colored.png + # - path: /internal/icons + # selector: '#chord-darkNeutral' + # output: ./website/src/assets/icons/chord-dark-neutral.png + # - path: /internal/icons + # selector: '#chord-darkColored' + # output: ./website/src/assets/icons/chord-dark-colored.png + + # - path: /internal/icons + # selector: '#parallel-coordinates-lightNeutral' + # output: ./website/src/assets/icons/parallel-coordinates-light-neutral.png + # - path: /internal/icons + # selector: '#parallel-coordinates-lightColored' + # output: ./website/src/assets/icons/parallel-coordinates-light-colored.png + # - path: /internal/icons + # selector: '#parallel-coordinates-darkNeutral' + # output: ./website/src/assets/icons/parallel-coordinates-dark-neutral.png + # - path: /internal/icons + # selector: '#parallel-coordinates-darkColored' + # output: ./website/src/assets/icons/parallel-coordinates-dark-colored.png + + # - path: /internal/icons + # selector: '#pie-lightNeutral' + # output: ./website/src/assets/icons/pie-light-neutral.png + # - path: /internal/icons + # selector: '#pie-lightColored' + # output: ./website/src/assets/icons/pie-light-colored.png + # - path: /internal/icons + # selector: '#pie-darkNeutral' + # output: ./website/src/assets/icons/pie-dark-neutral.png + # - path: /internal/icons + # selector: '#pie-darkColored' + # output: ./website/src/assets/icons/pie-dark-colored.png + + # - path: /internal/icons + # selector: '#waffle-lightNeutral' + # output: ./website/src/assets/icons/waffle-light-neutral.png + # - path: /internal/icons + # selector: '#waffle-lightColored' + # output: ./website/src/assets/icons/waffle-light-colored.png + # - path: /internal/icons + # selector: '#waffle-darkNeutral' + # output: ./website/src/assets/icons/waffle-dark-neutral.png + # - path: /internal/icons + # selector: '#waffle-darkColored' + # output: ./website/src/assets/icons/waffle-dark-colored.png + + # - path: /internal/icons + # selector: '#stream-lightNeutral' + # output: ./website/src/assets/icons/stream-light-neutral.png + # - path: /internal/icons + # selector: '#stream-lightColored' + # output: ./website/src/assets/icons/stream-light-colored.png + # - path: /internal/icons + # selector: '#stream-darkNeutral' + # output: ./website/src/assets/icons/stream-dark-neutral.png + # - path: /internal/icons + # selector: '#stream-darkColored' + # output: ./website/src/assets/icons/stream-dark-colored.png + + # - path: /internal/icons + # selector: '#scatterplot-lightNeutral' + # output: ./website/src/assets/icons/scatterplot-light-neutral.png + # - path: /internal/icons + # selector: '#scatterplot-lightColored' + # output: ./website/src/assets/icons/scatterplot-light-colored.png + # - path: /internal/icons + # selector: '#scatterplot-darkNeutral' + # output: ./website/src/assets/icons/scatterplot-dark-neutral.png + # - path: /internal/icons + # selector: '#scatterplot-darkColored' + # output: ./website/src/assets/icons/scatterplot-dark-colored.png + + # - path: /internal/icons + # selector: '#radar-lightNeutral' + # output: ./website/src/assets/icons/radar-light-neutral.png + # - path: /internal/icons + # selector: '#radar-lightColored' + # output: ./website/src/assets/icons/radar-light-colored.png + # - path: /internal/icons + # selector: '#radar-darkNeutral' + # output: ./website/src/assets/icons/radar-dark-neutral.png + # - path: /internal/icons + # selector: '#radar-darkColored' + # output: ./website/src/assets/icons/radar-dark-colored.png + + # - path: /internal/icons + # selector: '#calendar-lightNeutral' + # output: ./website/src/assets/icons/calendar-light-neutral.png + # - path: /internal/icons + # selector: '#calendar-lightColored' + # output: ./website/src/assets/icons/calendar-light-colored.png + # - path: /internal/icons + # selector: '#calendar-darkNeutral' + # output: ./website/src/assets/icons/calendar-dark-neutral.png + # - path: /internal/icons + # selector: '#calendar-darkColored' + # output: ./website/src/assets/icons/calendar-dark-colored.png + + # - path: /internal/icons + # selector: '#data-lightNeutral' + # output: ./website/src/assets/icons/data-light-neutral.png + # - path: /internal/icons + # selector: '#data-lightColored' + # output: ./website/src/assets/icons/data-light-colored.png + # - path: /internal/icons + # selector: '#data-darkNeutral' + # output: ./website/src/assets/icons/data-dark-neutral.png + # - path: /internal/icons + # selector: '#data-darkColored' + # output: ./website/src/assets/icons/data-dark-colored.png + + # - path: /internal/icons + # selector: '#code-lightNeutral' + # output: ./website/src/assets/icons/code-light-neutral.png + # - path: /internal/icons + # selector: '#code-lightColored' + # output: ./website/src/assets/icons/code-light-colored.png + # - path: /internal/icons + # selector: '#code-darkNeutral' + # output: ./website/src/assets/icons/code-dark-neutral.png + # - path: /internal/icons + # selector: '#code-darkColored' + # output: ./website/src/assets/icons/code-dark-colored.png + + # - path: /internal/icons + # selector: '#treemap-lightNeutral' + # output: ./website/src/assets/icons/treemap-light-neutral.png + # - path: /internal/icons + # selector: '#treemap-lightColored' + # output: ./website/src/assets/icons/treemap-light-colored.png + # - path: /internal/icons + # selector: '#treemap-darkNeutral' + # output: ./website/src/assets/icons/treemap-dark-neutral.png + # - path: /internal/icons + # selector: '#treemap-darkColored' + # output: ./website/src/assets/icons/treemap-dark-colored.png + + # - path: /internal/icons + # selector: '#sankey-lightNeutral' + # output: ./website/src/assets/icons/sankey-light-neutral.png + # - path: /internal/icons + # selector: '#sankey-lightColored' + # output: ./website/src/assets/icons/sankey-light-colored.png + # - path: /internal/icons + # selector: '#sankey-darkNeutral' + # output: ./website/src/assets/icons/sankey-dark-neutral.png + # - path: /internal/icons + # selector: '#sankey-darkColored' + # output: ./website/src/assets/icons/sankey-dark-colored.png + + # - path: /internal/icons + # selector: '#voronoi-lightNeutral' + # output: ./website/src/assets/icons/voronoi-light-neutral.png + # - path: /internal/icons + # selector: '#voronoi-lightColored' + # output: ./website/src/assets/icons/voronoi-light-colored.png + # - path: /internal/icons + # selector: '#voronoi-darkNeutral' + # output: ./website/src/assets/icons/voronoi-dark-neutral.png + # - path: /internal/icons + # selector: '#voronoi-darkColored' + # output: ./website/src/assets/icons/voronoi-dark-colored.png + + # - path: /internal/icons + # selector: '#sunburst-lightNeutral' + # output: ./website/src/assets/icons/sunburst-light-neutral.png + # - path: /internal/icons + # selector: '#sunburst-lightColored' + # output: ./website/src/assets/icons/sunburst-light-colored.png + # - path: /internal/icons + # selector: '#sunburst-darkNeutral' + # output: ./website/src/assets/icons/sunburst-dark-neutral.png + # - path: /internal/icons + # selector: '#sunburst-darkColored' + # output: ./website/src/assets/icons/sunburst-dark-colored.png + + # - path: /internal/icons + # selector: '#swarmplot-lightNeutral' + # output: ./website/src/assets/icons/swarmplot-light-neutral.png + # - path: /internal/icons + # selector: '#swarmplot-lightColored' + # output: ./website/src/assets/icons/swarmplot-light-colored.png + # - path: /internal/icons + # selector: '#swarmplot-darkNeutral' + # output: ./website/src/assets/icons/swarmplot-dark-neutral.png + # - path: /internal/icons + # selector: '#swarmplot-darkColored' + # output: ./website/src/assets/icons/swarmplot-dark-colored.png \ No newline at end of file diff --git a/package.json b/package.json index 3748ae9e7..34bb101d4 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "devDependencies": { "@babel/core": "^7.4.0", "@ekino/config": "^0.3.0", - "@nivo/babel-preset": "0.54.0", - "@nivo/generators": "0.54.0", + "@nivo/babel-preset": "0.55.0", + "@nivo/generators": "0.55.0", "@storybook/addon-actions": "^5.0.3", "@storybook/addon-info": "^5.0.3", "@storybook/addon-knobs": "^5.0.3", diff --git a/packages/axes/tests/axes.test.js b/packages/axes/tests/axes.test.js index 6fd70b475..bb020f920 100644 --- a/packages/axes/tests/axes.test.js +++ b/packages/axes/tests/axes.test.js @@ -20,8 +20,6 @@ describe('computeCartesianTicks()', () => { const bandScale = scaleBand() .domain(['I', 'J', 'K', 'L']) .rangeRound([0, 400]) - const width = 600 - const height = 400 describe('from linear scale', () => { it('should compute ticks for x axis', () => { diff --git a/packages/bar/src/enhance.js b/packages/bar/src/enhance.js index 6b0289e4d..8ee6a42a2 100644 --- a/packages/bar/src/enhance.js +++ b/packages/bar/src/enhance.js @@ -27,8 +27,8 @@ export default Component => withTheme(), withDimensions(), withMotion(), - withPropsOnChange(['colors', 'colorIdentity'], ({ colors, colorIdentity }) => ({ - getColor: getOrdinalColorScale(colors, colorIdentity), + withPropsOnChange(['colors', 'colorBy'], ({ colors, colorBy }) => ({ + getColor: getOrdinalColorScale(colors, colorBy), })), withPropsOnChange(['indexBy'], ({ indexBy }) => ({ getIndex: getAccessorFor(indexBy), diff --git a/packages/bar/src/props.js b/packages/bar/src/props.js index 8759fb561..90446b593 100644 --- a/packages/bar/src/props.js +++ b/packages/bar/src/props.js @@ -8,7 +8,7 @@ */ import PropTypes from 'prop-types' import { noop, defsPropTypes } from '@nivo/core' -import { ordinalColorsPropType, colorIdentityPropType } from '@nivo/colors' +import { ordinalColorsPropType, colorPropertyAccessorPropType } from '@nivo/colors' import { axisPropType } from '@nivo/axes' import { LegendPropShape } from '@nivo/legends' import BarItem from './BarItem' @@ -57,7 +57,7 @@ export const BarPropTypes = { getLabelLinkColor: PropTypes.func.isRequired, // computed colors: ordinalColorsPropType.isRequired, - colorIdentity: colorIdentityPropType.isRequired, + colorBy: colorPropertyAccessorPropType.isRequired, borderRadius: PropTypes.number.isRequired, getColor: PropTypes.func.isRequired, // computed ...defsPropTypes, @@ -114,7 +114,7 @@ export const BarDefaultProps = { labelTextColor: 'theme', colors: { scheme: 'nivo' }, - colorIdentity: 'id', + colorBy: 'id', defs: [], fill: [], borderRadius: 0, diff --git a/packages/bar/tests/Bar.test.js b/packages/bar/tests/Bar.test.js index 43631f7db..e373966a0 100644 --- a/packages/bar/tests/Bar.test.js +++ b/packages/bar/tests/Bar.test.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import React from 'react' import renderer from 'react-test-renderer' import { mount } from 'enzyme' diff --git a/packages/circle-packing/src/enhance.js b/packages/circle-packing/src/enhance.js index a1828e2b8..2f3092895 100644 --- a/packages/circle-packing/src/enhance.js +++ b/packages/circle-packing/src/enhance.js @@ -30,8 +30,8 @@ const commonEnhancers = [ withHierarchy(), withDimensions(), withTheme(), - withPropsOnChange(['colors', 'colorIdentity'], ({ colors, colorIdentity }) => ({ - getColor: getOrdinalColorScale(colors, colorIdentity), + withPropsOnChange(['colors', 'colorBy'], ({ colors, colorBy }) => ({ + getColor: getOrdinalColorScale(colors, colorBy), })), withPropsOnChange(['width', 'height', 'padding'], ({ width, height, padding }) => ({ pack: pack() diff --git a/packages/circle-packing/src/props.js b/packages/circle-packing/src/props.js index 342f43711..9987d6cd6 100644 --- a/packages/circle-packing/src/props.js +++ b/packages/circle-packing/src/props.js @@ -8,7 +8,7 @@ */ import PropTypes from 'prop-types' import { noop, defsPropTypes } from '@nivo/core' -import { ordinalColorsPropType, colorIdentityPropType } from '@nivo/colors' +import { ordinalColorsPropType, colorPropertyAccessorPropType } from '@nivo/colors' import BubbleNode from './BubbleNode' import BubbleHtmlNode from './BubbleHtmlNode' @@ -21,7 +21,7 @@ const commonPropTypes = { // theme managed by `withTheme()` HOC colors: ordinalColorsPropType.isRequired, - colorIdentity: colorIdentityPropType.isRequired, + colorBy: colorPropertyAccessorPropType.isRequired, leavesOnly: PropTypes.bool.isRequired, padding: PropTypes.number.isRequired, @@ -65,7 +65,7 @@ const commonDefaultProps = { padding: 1, colors: { scheme: 'nivo' }, - colorIdentity: 'depth', + colorBy: 'depth', borderWidth: 0, borderColor: 'inherit', diff --git a/packages/colors/src/index.js b/packages/colors/src/index.js index a23d47948..5ca16f79c 100644 --- a/packages/colors/src/index.js +++ b/packages/colors/src/index.js @@ -8,5 +8,6 @@ */ export * from './schemes' export * from './ordinalColorScale' +export * from './inheritedColor' export * from './props' export * from './motion' diff --git a/packages/colors/src/inheritedColor.js b/packages/colors/src/inheritedColor.js new file mode 100644 index 000000000..704f25a77 --- /dev/null +++ b/packages/colors/src/inheritedColor.js @@ -0,0 +1,80 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { useMemo } from 'react' +import get from 'lodash.get' +import isPlainObject from 'lodash.isplainobject' +import { rgb } from 'd3-color' + +export const getInheritedColorGenerator = (inheritedColor, theme) => { + // user provided function + if (typeof inheritedColor === 'function') return node => inheritedColor(node) + + if (isPlainObject(inheritedColor)) { + // use color from theme + if (inheritedColor.theme !== undefined) { + if (theme === undefined) { + throw new Error(`Unable to use color from theme as no theme was provided`) + } + + const themeColor = get(theme, inheritedColor.theme) + if (themeColor === undefined) { + throw new Error(`Color from theme is undefined at path: '${inheritedColor.theme}'`) + } + + return () => themeColor + } + + // use color from parent with optional color modifiers + if (inheritedColor.from !== undefined) { + const getColor = datum => get(datum, inheritedColor.from) + + if (Array.isArray(inheritedColor.modifiers)) { + const modifiers = [] + for (const modifier of inheritedColor.modifiers) { + const [modifierType, amount] = modifier + if (modifierType === 'brighter') { + modifiers.push(color => color.brighter(amount)) + } else if (modifierType === 'darker') { + modifiers.push(color => color.darker(amount)) + } else if (modifierType === 'opacity') { + modifiers.push(color => { + color.opacity = amount + + return color + }) + } else { + throw new Error( + `Invalid color modifier: '${modifierType}', must be one of: 'brighter', 'darker', 'opacity'` + ) + } + } + + if (modifiers.length === 0) return getColor + + return datum => + modifiers + .reduce((color, modify) => modify(color), rgb(getColor(datum))) + .toString() + } + + // no modifier + return getColor + } + + throw new Error( + `Invalid color spec, you should either specify 'theme' or 'from' when using a config object` + ) + } + + // use provided color statically + return () => inheritedColor +} + +export const useInheritedColor = (parentColor, theme) => + useMemo(() => getInheritedColorGenerator(parentColor, theme), [parentColor, theme]) diff --git a/packages/colors/src/props.js b/packages/colors/src/props.js index 2cca99d7f..7215bfa47 100644 --- a/packages/colors/src/props.js +++ b/packages/colors/src/props.js @@ -21,4 +21,16 @@ export const ordinalColorsPropType = PropTypes.oneOfType([ }), ]) -export const colorIdentityPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]) +export const colorPropertyAccessorPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]) + +export const inheritedColorPropType = PropTypes.oneOfType([ + PropTypes.string, + PropTypes.func, + PropTypes.shape({ + theme: PropTypes.string.isRequired, + }), + PropTypes.shape({ + from: PropTypes.string.isRequired, + modifiers: PropTypes.arrayOf(PropTypes.array), + }), +]) diff --git a/packages/colors/tests/inheritedColor.test.js b/packages/colors/tests/inheritedColor.test.js new file mode 100644 index 000000000..ae001e135 --- /dev/null +++ b/packages/colors/tests/inheritedColor.test.js @@ -0,0 +1,113 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { rgb } from 'd3-color' +import { getInheritedColorGenerator } from '../src' + +it(`should accept user defined function`, () => { + const userFunction = datum => datum.color + const getColor = getInheritedColorGenerator(userFunction) + + expect(getColor({ color: 'red' })).toBe('red') +}) + +it(`should throw if an object is given but doesn't match theme or inheritance`, () => { + expect(() => { + getInheritedColorGenerator({}) + }).toThrow( + `Invalid color spec, you should either specify 'theme' or 'from' when using a config object` + ) +}) + +describe(`from theme`, () => { + it(`should be able to use a theme property`, () => { + const theme = { thing: { color: 'green' } } + const getColor = getInheritedColorGenerator({ theme: 'thing.color' }, theme) + + expect(getColor()).toBe('green') + }) + + it(`should throw if no theme is provided`, () => { + expect(() => { + getInheritedColorGenerator({ theme: 'color' }) + }).toThrow('Unable to use color from theme as no theme was provided') + }) + + it(`should throw if theme property is undefined`, () => { + expect(() => { + getInheritedColorGenerator({ theme: 'color' }, {}) + }).toThrow(`Color from theme is undefined at path: 'color'`) + }) +}) + +describe(`from datum`, () => { + it(`should be able to use color from datum`, () => { + const getColor = getInheritedColorGenerator({ from: 'data.color' }) + + expect(getColor({ data: { color: 'purple' } })).toBe('purple') + }) + + it(`should be able to apply a brighter modifier on inherited color`, () => { + const getColor = getInheritedColorGenerator({ + from: 'color', + modifiers: [['brighter', 1]], + }) + + expect(getColor({ color: '#ff0099' })).toBe( + rgb('#ff0099') + .brighter(1) + .toString() + ) + }) + + it(`should be able to apply a darker modifier on inherited color`, () => { + const getColor = getInheritedColorGenerator({ + from: 'color', + modifiers: [['darker', 1]], + }) + + expect(getColor({ color: '#ff0099' })).toBe( + rgb('#ff0099') + .darker(1) + .toString() + ) + }) + + it(`should be able to apply an opacity modifier on inherited color`, () => { + const getColor = getInheritedColorGenerator({ + from: 'color', + modifiers: [['opacity', 0.5]], + }) + + const expectedColor = rgb('#ff0099') + expectedColor.opacity = 0.5 + expect(getColor({ color: '#ff0099' })).toBe(expectedColor.toString()) + }) + + it(`should be able to chain several modifiers on inherited color`, () => { + const getColor = getInheritedColorGenerator({ + from: 'color', + modifiers: [['darker', 2], ['opacity', 0.5]], + }) + + const expectedColor = rgb('#ff0099').darker(2) + expectedColor.opacity = 0.5 + expect(getColor({ color: '#ff0099' })).toBe(expectedColor.toString()) + }) + + it(`should throw if modifier type is invalid`, () => { + expect(() => { + getInheritedColorGenerator({ + from: 'color', + modifiers: [['invalid']], + }) + }).toThrow( + `Invalid color modifier: 'invalid', must be one of: 'brighter', 'darker', 'opacity'` + ) + }) +}) diff --git a/packages/core/src/hooks/index.js b/packages/core/src/hooks/index.js index 63c816cb5..00d727900 100644 --- a/packages/core/src/hooks/index.js +++ b/packages/core/src/hooks/index.js @@ -8,3 +8,4 @@ */ export * from './useDimensions' export * from './usePartialTheme' +export * from './useValueFormatter' diff --git a/packages/core/src/hooks/useValueFormatter.js b/packages/core/src/hooks/useValueFormatter.js new file mode 100644 index 000000000..53df1c5be --- /dev/null +++ b/packages/core/src/hooks/useValueFormatter.js @@ -0,0 +1,31 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { useMemo } from 'react' +import { format as d3Format } from 'd3-format' +import { timeFormat as d3TimeFormat } from 'd3-time-format' + +export const getValueFormatter = format => { + // user defined function + if (typeof format === 'function') return format + + if (typeof format === 'string') { + // time format specifier + if (format.indexOf('time:') === 0) { + return d3TimeFormat(format.slice('5')) + } + + // standard fromat specifier + return d3Format(format) + } + + // no formatting + return v => v +} + +export const useValueFormatter = format => useMemo(() => getValueFormatter(format), [format]) diff --git a/packages/core/src/tooltip/BasicTooltip.js b/packages/core/src/tooltip/BasicTooltip.js index 8621054c3..59f24334b 100644 --- a/packages/core/src/tooltip/BasicTooltip.js +++ b/packages/core/src/tooltip/BasicTooltip.js @@ -6,21 +6,17 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import React, { useMemo, memo } from 'react' +import React, { memo } from 'react' import PropTypes from 'prop-types' -import isFunction from 'lodash/isFunction' -import { format as d3Format } from 'd3-format' import Chip from './Chip' import { useTheme } from '../theming' +import { useValueFormatter } from '../hooks/useValueFormatter' const chipStyle = { marginRight: 7 } const BasicTooltip = memo(({ id, value: _value, format, enableChip, color, renderContent }) => { const theme = useTheme() - const formatValue = useMemo(() => { - if (!format || isFunction(format)) return format - return d3Format(format) - }, [format]) + const formatValue = useValueFormatter(format) let content if (typeof renderContent === 'function') { diff --git a/packages/generators/src/bullet.js b/packages/generators/src/bullet.js index 00aeee868..663204cd9 100644 --- a/packages/generators/src/bullet.js +++ b/packages/generators/src/bullet.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import range from 'lodash/range' import random from 'lodash/random' diff --git a/packages/generators/src/chord.js b/packages/generators/src/chord.js index f8e0adcc9..a544382d9 100644 --- a/packages/generators/src/chord.js +++ b/packages/generators/src/chord.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import range from 'lodash/range' import random from 'lodash/random' import { names } from './sets' diff --git a/packages/generators/src/color.js b/packages/generators/src/color.js index b2966d1cd..1843ce2cf 100644 --- a/packages/generators/src/color.js +++ b/packages/generators/src/color.js @@ -1 +1,9 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ export const randColor = () => `hsl(${Math.round(Math.random() * 360)}, 70%, 50%)` diff --git a/packages/generators/src/index.js b/packages/generators/src/index.js index ed121dbd3..20de8a22f 100644 --- a/packages/generators/src/index.js +++ b/packages/generators/src/index.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import range from 'lodash/range' import random from 'lodash/random' import shuffle from 'lodash/shuffle' @@ -256,3 +264,4 @@ export * from './bullet' export * from './chord' export * from './parallelCoordinates' export * from './sankey' +export * from './swarmplot' diff --git a/packages/generators/src/parallelCoordinates.js b/packages/generators/src/parallelCoordinates.js index 277cbf3f6..055918554 100644 --- a/packages/generators/src/parallelCoordinates.js +++ b/packages/generators/src/parallelCoordinates.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import random from 'lodash/random' import range from 'lodash/range' import shuffle from 'lodash/shuffle' diff --git a/packages/generators/src/sankey.js b/packages/generators/src/sankey.js index 0658037dd..77e46fd3e 100644 --- a/packages/generators/src/sankey.js +++ b/packages/generators/src/sankey.js @@ -1,3 +1,11 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ import range from 'lodash/range' import random from 'lodash/random' import shuffle from 'lodash/shuffle' diff --git a/packages/generators/src/swarmplot.js b/packages/generators/src/swarmplot.js new file mode 100644 index 000000000..2119c7afb --- /dev/null +++ b/packages/generators/src/swarmplot.js @@ -0,0 +1,59 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import range from 'lodash/range' +import random from 'lodash/random' +import shuffle from 'lodash/shuffle' + +const randomPrice = () => random(0, 500) +const randomVolume = () => random(4, 20) +const randomCategory = () => random(3, 17) + +export const generateSwarmPlotData = (groups, { min = 60, max = 100, categoryCount = 0 }) => ({ + groups, + data: groups.reduce( + (acc, group, groupIndex) => [ + ...acc, + ...range(random(min, max)) + .map(() => randomPrice()) + .map((price, index) => { + const datum = { + id: `${groupIndex}.${index}`, + group, + price, + volume: randomVolume(), + } + + if (categoryCount > 0) { + datum.categories = range(categoryCount).map(randomCategory) + } + + return datum + }), + ], + [] + ), +}) + +export const randomizeSwarmPlotData = previousData => ({ + groups: previousData.groups, + data: previousData.data.map(d => { + const datum = { + ...d, + group: shuffle(previousData.groups)[0], + price: randomPrice(), + volume: randomVolume(), + } + + if (d.categories !== undefined) { + datum.categories = range(3).map(randomCategory) + } + + return datum + }), +}) diff --git a/packages/pie/src/hooks.js b/packages/pie/src/hooks.js new file mode 100644 index 000000000..67f4e1cf0 --- /dev/null +++ b/packages/pie/src/hooks.js @@ -0,0 +1,67 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { useMemo } from 'react' +import get from 'lodash/get' +import { arc as d3Arc, pie as d3Pie } from 'd3-shape' +import { degreesToRadians, radiansToDegrees } from '@nivo/core' + +export const usePie = ({ + data, + radius, + value = v => v, + startAngle = 0, + endAngle = 360, + innerRadius = 0, + cornerRadius = 0, + sortByValue = false, + padAngle = 0, +}) => { + const arcGenerator = useMemo( + () => + d3Arc() + .outerRadius(radius) + .innerRadius(innerRadius) + .cornerRadius(cornerRadius), + [radius, innerRadius, cornerRadius] + ) + + const getValue = useMemo(() => (typeof value === 'function' ? value : d => get(d, value)), [ + value, + ]) + + const pie = useMemo(() => { + const computedPie = d3Pie() + .value(getValue) + .padAngle(degreesToRadians(padAngle)) + .startAngle(degreesToRadians(startAngle)) + .endAngle(degreesToRadians(endAngle)) + + if (sortByValue !== true) computedPie.sortValues(null) + + return computedPie + }, [getValue, padAngle, startAngle, endAngle, sortByValue]) + + const arcs = useMemo( + () => + pie(data).map(arc => { + const angle = arc.endAngle - (arc.endAngle - arc.startAngle) * 0.5 + + return { + ...arc, + startAngleDeg: radiansToDegrees(angle.startAngle), + endAngleDeg: radiansToDegrees(arc.endAngle), + angle, + angleDeg: radiansToDegrees(angle), + } + }), + [data, pie] + ) + + return { arcs, arcGenerator } +} diff --git a/packages/pie/src/index.js b/packages/pie/src/index.js index 72d376287..b1c283710 100644 --- a/packages/pie/src/index.js +++ b/packages/pie/src/index.js @@ -12,3 +12,4 @@ export { default as ResponsivePie } from './ResponsivePie' export { default as PieCanvas } from './PieCanvas' export { default as ResponsivePieCanvas } from './ResponsivePieCanvas' export * from './props' +export * from './hooks' diff --git a/packages/scatterplot/src/ScatterPlotTooltip.js b/packages/scatterplot/src/ScatterPlotTooltip.js index a01628d77..4a4e657fb 100644 --- a/packages/scatterplot/src/ScatterPlotTooltip.js +++ b/packages/scatterplot/src/ScatterPlotTooltip.js @@ -10,7 +10,7 @@ import React from 'react' import PropTypes from 'prop-types' import { BasicTooltip } from '@nivo/core' -const ScatterPlotTooltip = ({ point: { data }, color, format, tooltip, theme }) => ( +const ScatterPlotTooltip = ({ point: { data }, color, format, theme, tooltip }) => ( withPropsOnChange( ['points', 'width', 'height', 'debugMesh'], ({ points, width, height, debugMesh }) => { - const points2d = computeMeshPoints({ - points, - xAccessor: 'x', - yAccessor: 'y', - }).points + const points2d = computeMeshPoints({ points }).points return computeMesh({ points: points2d, width, height, debug: debugMesh }) } diff --git a/packages/swarmplot/README.md b/packages/swarmplot/README.md index cedf3ab9b..b246315a2 100644 --- a/packages/swarmplot/README.md +++ b/packages/swarmplot/README.md @@ -6,10 +6,10 @@ [documentation](http://nivo.rocks/swarmplot) -![SwarmPlot](./doc/swarmplot.png) +![SwarmPlot](https://raw.githubusercontent.com/plouc/nivo/master/packages/swarmplot/doc/swarmplot.png) ## SwarmPlotCanvas [documentation](http://nivo.rocks/swarmplot/canvas) -![SwarmPlotCanvas](./doc/swarmplot-canvas.png) +![SwarmPlotCanvas](https://raw.githubusercontent.com/plouc/nivo/master/packages/swarmplot/doc/swarmplot-canvas.png) diff --git a/packages/swarmplot/doc/swarmplot-canvas.png b/packages/swarmplot/doc/swarmplot-canvas.png new file mode 100644 index 0000000000000000000000000000000000000000..36fed0fd7f5571a96477a6958a7665b656c31b74 GIT binary patch literal 103819 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 literal 0 HcmV?d00001 diff --git a/packages/swarmplot/doc/swarmplot.png b/packages/swarmplot/doc/swarmplot.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6964ef29f7be2e5cf70a61a314f15f1bd3e829 GIT binary patch literal 63595 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 literal 0 HcmV?d00001 diff --git a/packages/swarmplot/index.d.ts b/packages/swarmplot/index.d.ts new file mode 100644 index 000000000..07db52183 --- /dev/null +++ b/packages/swarmplot/index.d.ts @@ -0,0 +1,84 @@ +import { Component } from 'react' +import { Box, MotionProps, Dimensions, Theme } from '@nivo/core' +import { OrdinalColorsInstruction } from '@nivo/colors' + +declare module '@nivo/swarmplot' { + export interface ComputedNode { + id: string + index: number + group: string + value: string + x: number + y: number + size: number + color: string + data: Datum + } + + type DatumAccessor = (datum: Datum) => T + + type ComputedNodeAccessor = (node: ComputedNode) => T + + export interface DynamicSizeSpec { + key: string + values: [number, number] + sizes: [number, number] + } + + export type SwarmPlotMouseHandler = ( + node: ComputedNode, + event: React.MouseEvent + ) => void + + interface CommonSwarmPlotProps { + data: Datum[] + + margin?: Box + + groups: string[] + groupBy?: string + identity?: string | DatumAccessor + value?: string | DatumAccessor + valueScale?: any + size?: number | DatumAccessor | DynamicSizeSpec + layout?: 'horizontal' | 'vertical' + gap?: number + + forceStrength?: number + simulationIterations?: number + + layers: any[] + + colors?: OrdinalColorsInstruction + theme?: Theme + borderWidth?: number | ComputedNodeAccessor + borderColor?: any + + enableGridX?: boolean + gridXValues?: number[] + enableGridY?: boolean + gridYValues?: number[] + + axisTop?: any + axisRight?: any + axisBottom?: any + axisLeft?: any + + isInteractive?: boolean + onMouseEnter?: SwarmPlotMouseHandler + onMouseMove?: SwarmPlotMouseHandler + onMouseLeave?: SwarmPlotMouseHandler + } + + export type SwarmPlotProps = CommonSwarmPlotProps & MotionProps + + export class SwarmPlot extends Component {} + export class ResponsiveSwarmPlot extends Component {} + + export type SwarmPlotCanvasProps = CommonSwarmPlotProps & { + pixelRatio?: number + } + + export class SwarmPlotCanvas extends Component {} + export class ResponsiveSwarmPlotCanvas extends Component {} +} diff --git a/packages/swarmplot/package.json b/packages/swarmplot/package.json index 2b5b8a630..059aaf5c9 100644 --- a/packages/swarmplot/package.json +++ b/packages/swarmplot/package.json @@ -29,12 +29,11 @@ "@nivo/core": "0.55.0", "@nivo/legends": "0.55.0", "@nivo/scales": "0.55.0", + "@nivo/voronoi": "0.55.0", "d3-force": "^2.0.1", - "d3-quadtree": "^1.0.6", "d3-scale": "^3.0.0", "lodash": "^4.17.11", - "react-motion": "^0.5.2", - "recompose": "^0.30.0" + "react-motion": "^0.5.2" }, "peerDependencies": { "prop-types": ">= 15.5.10 < 16.0.0", diff --git a/packages/swarmplot/src/AnimatedSwarmPlotNodes.js b/packages/swarmplot/src/AnimatedSwarmPlotNodes.js index c618b687f..c07debcfa 100644 --- a/packages/swarmplot/src/AnimatedSwarmPlotNodes.js +++ b/packages/swarmplot/src/AnimatedSwarmPlotNodes.js @@ -6,71 +6,111 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import React, { memo } from 'react' +import React, { memo, Fragment } from 'react' +import PropTypes from 'prop-types' import { TransitionMotion, spring } from 'react-motion' import { interpolateColor, getInterpolatedColor } from '@nivo/colors' -const willEnter = ({ style, ...rest }) => ({ +const willEnter = ({ style }) => ({ x: style.x.val, y: style.y.val, - scale: 0, + size: style.size.val, colorR: style.colorR.val, colorG: style.colorG.val, colorB: style.colorB.val, + scale: 0, }) const willLeave = springConfig => ({ style }) => ({ x: style.x, y: style.y, - scale: spring(0, springConfig), + size: style.size, colorR: style.colorR, colorG: style.colorG, colorB: style.colorB, + scale: spring(0, springConfig), }) -const AnimatedSwarmPlotNodes = memo(({ nodes, nodeSize, motionStiffness, motionDamping }) => { - const springConfig = { - stiffness: motionStiffness, - damping: motionDamping, - } +const AnimatedSwarmPlotNodes = memo( + ({ + nodes, + renderNode, + getBorderWidth, + getBorderColor, + motionStiffness, + motionDamping, + isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + }) => { + const springConfig = { + stiffness: motionStiffness, + damping: motionDamping, + } - return ( - ({ - key: node.uid, - data: node, - style: { - x: spring(node.x, springConfig), - y: spring(node.y, springConfig), - scale: spring(1, springConfig), - ...interpolateColor(node.color, springConfig), - }, - }))} - > - {interpolatedStyles => ( - - {interpolatedStyles.map(({ key, style, data: node }) => { - const color = getInterpolatedColor(style) + return ( + ({ + key: node.id, + data: node, + style: { + x: spring(node.x, springConfig), + y: spring(node.y, springConfig), + size: spring(node.size, springConfig), + ...interpolateColor(node.color, springConfig), + scale: spring(1, springConfig), + }, + }))} + > + {interpolatedStyles => ( + <> + {interpolatedStyles.map(({ key, style, data: node }) => { + const color = getInterpolatedColor(style) - return ( - - ) - })} - - )} - - ) -}) + return ( + + {renderNode({ + node, + x: style.x, + y: style.y, + size: style.size, + scale: style.scale, + color, + borderWidth: getBorderWidth(node), + borderColor: getBorderColor(node), + isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + })} + + ) + })} + + )} + + ) + } +) AnimatedSwarmPlotNodes.displayName = 'AnimatedSwarmPlotNodes' +AnimatedSwarmPlotNodes.propTypes = { + nodes: PropTypes.array.isRequired, + renderNode: PropTypes.func.isRequired, + getBorderWidth: PropTypes.func.isRequired, + getBorderColor: PropTypes.func.isRequired, + motionStiffness: PropTypes.number.isRequired, + motionDamping: PropTypes.number.isRequired, + isInteractive: PropTypes.bool.isRequired, + onMouseEnter: PropTypes.func, + onMouseMove: PropTypes.func, + onMouseLeave: PropTypes.func, + onClick: PropTypes.func, +} export default AnimatedSwarmPlotNodes diff --git a/packages/swarmplot/src/StaticSwarmPlotNodes.js b/packages/swarmplot/src/StaticSwarmPlotNodes.js index e69de29bb..cb5c67e19 100644 --- a/packages/swarmplot/src/StaticSwarmPlotNodes.js +++ b/packages/swarmplot/src/StaticSwarmPlotNodes.js @@ -0,0 +1,60 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React, { memo, Fragment } from 'react' +import PropTypes from 'prop-types' + +const StaticSwarmPlotNodes = memo( + ({ + nodes, + renderNode, + getBorderWidth, + getBorderColor, + isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + }) => { + return nodes.map(node => { + return ( + + {renderNode({ + node, + x: node.x, + y: node.y, + size: node.size, + color: node.color, + borderWidth: getBorderWidth(node), + borderColor: getBorderColor(node), + isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + })} + + ) + }) + } +) + +StaticSwarmPlotNodes.displayName = 'StaticSwarmPlotNodes' +StaticSwarmPlotNodes.propTypes = { + nodes: PropTypes.array.isRequired, + renderNode: PropTypes.func.isRequired, + getBorderWidth: PropTypes.func.isRequired, + getBorderColor: PropTypes.func.isRequired, + isInteractive: PropTypes.bool.isRequired, + onMouseEnter: PropTypes.func, + onMouseMove: PropTypes.func, + onMouseLeave: PropTypes.func, + onClick: PropTypes.func, +} + +export default StaticSwarmPlotNodes diff --git a/packages/swarmplot/src/SwarmPlot.js b/packages/swarmplot/src/SwarmPlot.js index 85df6d292..5e6f4ff18 100644 --- a/packages/swarmplot/src/SwarmPlot.js +++ b/packages/swarmplot/src/SwarmPlot.js @@ -6,38 +6,57 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import React, { memo } from 'react' -import { TransitionMotion, spring } from 'react-motion' -import { SvgWrapper, withContainer, useDimensions, useTheme, useTooltip, Grid } from '@nivo/core' -import { interpolateColor, getInterpolatedColor } from '@nivo/colors' -import { Axes } from '@nivo/axes' +import React, { memo, Fragment } from 'react' +import { SvgWrapper, withContainer, useDimensions, useTheme } from '@nivo/core' +import { useInheritedColor } from '@nivo/colors' +import { Axes, Grid } from '@nivo/axes' +import { Mesh } from '@nivo/voronoi' import { SwarmPlotPropTypes, SwarmPlotDefaultProps } from './props' -import { useSwarmPlot } from './hooks' +import { useSwarmPlot, useBorderWidth, useNodeMouseHandlers } from './hooks' import AnimatedSwarmPlotNodes from './AnimatedSwarmPlotNodes' +import StaticSwarmPlotNodes from './StaticSwarmPlotNodes' +import SwarmPlotNode from './SwarmPlotNode' const SwarmPlot = memo( ({ width, height, margin: partialMargin, - colors, data, + groups, + groupBy, + identity, + label, + value, + valueFormat, + valueScale, + size, + spacing, layout, + gap, forceStrength, simulationIterations, - scale, - gap, - nodeSize, - nodePadding, + layers, + renderNode, + colors, + colorBy, borderWidth, - + borderColor, enableGridX, + gridXValues, enableGridY, + gridYValues, axisTop, axisRight, axisBottom, axisLeft, - + isInteractive, + useMesh, + debugMesh, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, animate, motionStiffness, motionDamping, @@ -48,34 +67,48 @@ const SwarmPlot = memo( partialMargin ) const theme = useTheme() - const [showTooltip, hideTooltip] = useTooltip() const { nodes, xScale, yScale } = useSwarmPlot({ width: innerWidth, height: innerHeight, data, + groups, + groupBy, + identity, + label, + value, + valueFormat, + valueScale, + size, + spacing, layout, - scale, gap, - nodeSize, - nodePadding, colors, + colorBy, forceStrength, simulationIterations, }) - return ( - + const getBorderWidth = useBorderWidth(borderWidth) + const getBorderColor = useInheritedColor(borderColor, theme) + + const layerById = { + grid: ( + ), + axes: ( - {animate && ( - - )} + ), + mesh: null, + } + + const enableNodeInteractivity = isInteractive && !useMesh + const handlers = useNodeMouseHandlers({ + isEnabled: isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + }) + + if (animate) { + layerById.nodes = ( + + ) + } else { + layerById.nodes = ( + + ) + } + + if (isInteractive === true && useMesh === true) { + layerById.mesh = ( + + ) + } + + const layerContext = { + nodes, + xScale, + yScale, + innerWidth, + innerHeight, + outerWidth, + outerHeight, + margin, + getBorderColor, + getBorderWidth, + animate, + motionStiffness, + motionDamping, + } + + return ( + + {layers.map((layer, i) => { + if (layerById[layer] !== undefined) { + return layerById[layer] + } + if (typeof layer === 'function') { + return {layer(layerContext)} + } + + return null + })} ) } @@ -107,6 +222,9 @@ const SwarmPlot = memo( SwarmPlot.displayName = 'SwarmPlot' SwarmPlot.propTypes = SwarmPlotPropTypes -SwarmPlot.defaultProps = SwarmPlotDefaultProps +SwarmPlot.defaultProps = { + ...SwarmPlotDefaultProps, + renderNode: props => , // eslint-disable-line react/display-name +} export default withContainer(SwarmPlot) diff --git a/packages/swarmplot/src/SwarmPlotCanvas.js b/packages/swarmplot/src/SwarmPlotCanvas.js index ad4e17b57..abff2d2af 100644 --- a/packages/swarmplot/src/SwarmPlotCanvas.js +++ b/packages/swarmplot/src/SwarmPlotCanvas.js @@ -1 +1,304 @@ -export default () => null +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React, { memo, useRef, useState, useEffect, useCallback } from 'react' +import { + getRelativeCursor, + isCursorInRect, + withContainer, + useDimensions, + useTheme, + useTooltip, +} from '@nivo/core' +import { useInheritedColor } from '@nivo/colors' +import { renderAxesToCanvas, renderGridLinesToCanvas } from '@nivo/axes' +import { useVoronoiMesh, renderVoronoiToCanvas, renderVoronoiCellToCanvas } from '@nivo/voronoi' +import { SwarmPlotCanvasDefaultProps, SwarmPlotCanvasPropTypes } from './props' +import { useSwarmPlot, useBorderWidth } from './hooks' +import SwarmPlotTooltip from './SwarmPlotTooltip' + +export const renderCanvasNode = (ctx, { node, getBorderWidth, getBorderColor }) => { + const nodeBorderWidth = getBorderWidth(node) + if (nodeBorderWidth > 0) { + ctx.strokeStyle = getBorderColor(node) + ctx.lineWidth = nodeBorderWidth + } + + ctx.beginPath() + ctx.arc(node.x, node.y, node.size / 2, 0, 2 * Math.PI) + ctx.fillStyle = node.color + ctx.fill() + + if (nodeBorderWidth > 0) { + ctx.stroke() + } +} + +const SwarmPlotCanvas = memo( + ({ + pixelRatio, + width, + height, + margin: partialMargin, + data, + groups, + groupBy, + identity, + label, + value, + valueFormat, + valueScale, + size, + spacing, + layout, + gap, + forceStrength, + simulationIterations, + layers, + renderNode, + colors, + colorBy, + borderWidth, + borderColor, + enableGridX, + gridXValues, + enableGridY, + gridYValues, + axisTop, + axisRight, + axisBottom, + axisLeft, + isInteractive, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + debugMesh, + }) => { + const canvasEl = useRef(null) + const [currentNode, setCurrentNode] = useState(null) + const { margin, innerWidth, innerHeight, outerWidth, outerHeight } = useDimensions( + width, + height, + partialMargin + ) + const theme = useTheme() + const [showTooltip, hideTooltip] = useTooltip() + + const { nodes, xScale, yScale } = useSwarmPlot({ + width: innerWidth, + height: innerHeight, + data, + groups, + groupBy, + identity, + label, + value, + valueFormat, + valueScale, + size, + spacing, + layout, + gap, + colors, + colorBy, + forceStrength, + simulationIterations, + }) + + const getBorderWidth = useBorderWidth(borderWidth) + const getBorderColor = useInheritedColor(borderColor, theme) + + const { delaunay, voronoi } = useVoronoiMesh({ + points: nodes, + width: innerWidth, + height: innerHeight, + debug: debugMesh, + }) + + useEffect(() => { + canvasEl.current.width = outerWidth * pixelRatio + canvasEl.current.height = outerHeight * pixelRatio + + const ctx = canvasEl.current.getContext('2d') + + ctx.scale(pixelRatio, pixelRatio) + + ctx.fillStyle = theme.background + ctx.fillRect(0, 0, outerWidth, outerHeight) + ctx.translate(margin.left, margin.top) + + layers.forEach(layer => { + if (layer === 'grid' && theme.grid.line.strokeWidth > 0) { + ctx.lineWidth = theme.grid.line.strokeWidth + ctx.strokeStyle = theme.grid.line.stroke + + enableGridX && + renderGridLinesToCanvas(ctx, { + width: innerWidth, + height: innerHeight, + scale: xScale, + axis: 'x', + values: gridXValues, + }) + + enableGridY && + renderGridLinesToCanvas(ctx, { + width: innerWidth, + height: innerHeight, + scale: yScale, + axis: 'y', + values: gridYValues, + }) + } + + if (layer === 'axes') { + renderAxesToCanvas(ctx, { + xScale, + yScale, + width: innerWidth, + height: innerHeight, + top: axisTop, + right: axisRight, + bottom: axisBottom, + left: axisLeft, + theme, + }) + } + + if (layer === 'nodes') { + nodes.forEach(node => { + renderNode(ctx, { + node, + getBorderWidth, + getBorderColor, + }) + }) + } + + if (layer === 'mesh' && debugMesh === true) { + renderVoronoiToCanvas(ctx, voronoi) + if (currentNode) { + renderVoronoiCellToCanvas(ctx, voronoi, currentNode.index) + } + } + + if (typeof layer === 'function') { + layer(ctx, { + nodes, + innerWidth, + innerHeight, + outerWidth, + outerHeight, + margin, + xScale, + yScale, + }) + } + }) + }, [ + canvasEl, + innerWidth, + innerHeight, + outerWidth, + outerHeight, + margin, + pixelRatio, + theme, + layers, + nodes, + xScale, + yScale, + voronoi, + currentNode, + ]) + + const getNodeFromMouseEvent = useCallback( + event => { + const [x, y] = getRelativeCursor(canvasEl.current, event) + if (!isCursorInRect(margin.left, margin.top, innerWidth, innerHeight, x, y)) + return null + + const nodeIndex = delaunay.find(x - margin.left, y - margin.top) + return nodes[nodeIndex] + }, + [canvasEl, margin, innerWidth, innerHeight, delaunay, setCurrentNode] + ) + + const handleMouseHover = useCallback( + event => { + const node = getNodeFromMouseEvent(event) + setCurrentNode(node) + onMouseMove && onMouseMove(node, event) + if (node) { + showTooltip(, event) + if ((!currentNode || currentNode.id !== node.id) && onMouseEnter) { + onMouseEnter(node, event) + } + if (currentNode && currentNode.id !== node.id && onMouseLeave) { + onMouseLeave(currentNode, event) + } + } else { + currentNode && onMouseLeave && onMouseLeave(currentNode, event) + hideTooltip() + } + }, + [ + getNodeFromMouseEvent, + currentNode, + onMouseEnter, + onMouseLeave, + showTooltip, + hideTooltip, + ] + ) + + const handleMouseLeave = useCallback( + event => { + hideTooltip() + setCurrentNode(null) + onMouseLeave && onMouseLeave(currentNode, event) + }, + [hideTooltip, setCurrentNode, currentNode, onMouseLeave] + ) + + const handleClick = useCallback( + event => { + const node = getNodeFromMouseEvent(event) + node && onClick && onClick(node, event) + }, + [getNodeFromMouseEvent, onClick] + ) + + return ( + + ) + } +) + +SwarmPlotCanvas.displayName = 'SwarmPlotCanvas' +SwarmPlotCanvas.propTypes = SwarmPlotCanvasPropTypes +SwarmPlotCanvas.defaultProps = { + ...SwarmPlotCanvasDefaultProps, + renderNode: renderCanvasNode, +} + +export default withContainer(SwarmPlotCanvas) diff --git a/packages/swarmplot/src/SwarmPlotNode.js b/packages/swarmplot/src/SwarmPlotNode.js index e69de29bb..8e66e8433 100644 --- a/packages/swarmplot/src/SwarmPlotNode.js +++ b/packages/swarmplot/src/SwarmPlotNode.js @@ -0,0 +1,77 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React, { memo, useCallback } from 'react' +import PropTypes from 'prop-types' + +const SwarmPlotNode = memo( + ({ + node, + x, + y, + size, + scale, + color, + borderWidth, + borderColor, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, + }) => { + const handleMouseEnter = useCallback(event => onMouseEnter && onMouseEnter(node, event), [ + node, + onMouseEnter, + ]) + const handleMouseMove = useCallback(event => onMouseMove && onMouseEnter(node, event), [ + node, + onMouseMove, + ]) + const handleMouseLeave = useCallback(event => onMouseLeave && onMouseLeave(node, event), [ + node, + onMouseLeave, + ]) + const handleClick = useCallback(event => onClick && onClick(node, event), [node, onClick]) + + return ( + + ) + } +) + +SwarmPlotNode.displayName = 'SwarmPlotNode' +SwarmPlotNode.propTypes = { + node: PropTypes.object.isRequired, + x: PropTypes.number.isRequired, + y: PropTypes.number.isRequired, + size: PropTypes.number.isRequired, + scale: PropTypes.number.isRequired, + color: PropTypes.string.isRequired, + borderWidth: PropTypes.number.isRequired, + borderColor: PropTypes.string.isRequired, + isInteractive: PropTypes.bool.isRequired, + onMouseEnter: PropTypes.func, + onMouseMove: PropTypes.func, + onMouseLeave: PropTypes.func, + onClick: PropTypes.func, +} +SwarmPlotNode.defaultProps = { + scale: 1, +} + +export default SwarmPlotNode diff --git a/packages/swarmplot/src/SwarmPlotTooltip.js b/packages/swarmplot/src/SwarmPlotTooltip.js index b5f7baa0c..94001f049 100644 --- a/packages/swarmplot/src/SwarmPlotTooltip.js +++ b/packages/swarmplot/src/SwarmPlotTooltip.js @@ -10,23 +10,21 @@ import React from 'react' import PropTypes from 'prop-types' import { BasicTooltip } from '@nivo/core' -const SwarmPlotTooltip = ({ node, format, tooltip, theme }) => ( +const SwarmPlotTooltip = ({ node }) => ( ) SwarmPlotTooltip.propTypes = { - node: PropTypes.shape({}).isRequired, - format: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), - tooltip: PropTypes.func, - theme: PropTypes.object.isRequired, + node: PropTypes.shape({ + label: PropTypes.string.isRequired, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + color: PropTypes.string.isRequired, + }).isRequired, } export default SwarmPlotTooltip diff --git a/packages/swarmplot/src/compute.js b/packages/swarmplot/src/compute.js index 56a863d5b..4e0a981bd 100644 --- a/packages/swarmplot/src/compute.js +++ b/packages/swarmplot/src/compute.js @@ -6,93 +6,125 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import { scaleOrdinal } from 'd3-scale' +import get from 'lodash/get' +import isString from 'lodash/isString' +import isNumber from 'lodash/isNumber' +import isPlainObject from 'lodash/isPlainObject' +import { scaleOrdinal, scaleLinear } from 'd3-scale' import { forceSimulation, forceX, forceY, forceCollide } from 'd3-force' -import { generateSeriesAxis, computeScale } from '@nivo/scales' +import { computeScale } from '@nivo/scales' -export const computeSwarmPlotValueScale = ({ axis, scale, data, width, height }) => { - const values = generateSeriesAxis(data, axis, scale, { - getValue: d => d.value, - setValue: (d, v) => { - d.value = v - }, - }) +export const getSizeGenerator = size => { + if (typeof size === 'function') return size + if (isNumber(size)) return () => size + if (isPlainObject(size)) { + if (!isString(size.key)) { + throw new Error( + 'Size is invalid, key should be a string pointing to the property to use to determine node size' + ) + } + if (!Array.isArray(size.values) || size.values.length !== 2) { + throw new Error( + 'Size is invalid, values spec should be an array containing two values, min and max' + ) + } + if (!Array.isArray(size.sizes) || size.sizes.length !== 2) { + throw new Error( + 'Size is invalid, sizes spec should be an array containing two values, min and max' + ) + } - return computeScale({ ...scale, axis }, { [axis]: values }, width, height) + const sizeScale = scaleLinear() + .domain([size.values[0], size.values[1]]) + .range([size.sizes[0], size.sizes[1]]) + + return d => sizeScale(get(d, size.key)) + } + + throw new Error('Size is invalid, it should be either a function, a number or an object') +} + +export const computeValueScale = ({ width, height, axis, getValue, scale, data }) => { + const values = data.map(getValue) + const min = Math.min(...values) + const max = Math.max(...values) + + return computeScale({ ...scale, axis }, { [axis]: { min, max } }, width, height) } -export const computeSwarmPlotOrdinalScale = ({ axis, data, gap, width, height }) => { - const serieCount = data.length - let serieSize - if (data.length === 0) { - serieSize = axis === 'x' ? height : width - } else if (axis === 'x') { - serieSize = (height - gap * (serieCount - 1)) / serieCount +export const computeOrdinalScale = ({ width, height, axis, groups, gap }) => { + if (!Array.isArray(groups) || groups.length === 0) { + throw new Error(`'groups' should be an array containing at least one item`) + } + + const groupCount = groups.length + + let groupSize + if (axis === 'x') { + groupSize = (height - gap * (groupCount - 1)) / groupCount } else if (axis === 'y') { - serieSize = (width - gap * (serieCount - 1)) / serieCount + groupSize = (width - gap * (groupCount - 1)) / groupCount } - const range = data.map((d, i) => i * (serieSize + gap) + serieSize / 2) - const domain = data.map(d => d.id) + const range = groups.map((g, i) => i * (groupSize + gap) + groupSize / 2) - return scaleOrdinal(range).domain(domain) + return scaleOrdinal(range).domain(groups) } -export const computeSwarmPlotForces = ({ - axis, - valueScale, - ordinalScale, - nodeSize, - nodePadding, - forceStrength, -}) => { - const collisionRadius = (nodeSize + nodePadding / 2) / 2 - const collisionForce = forceCollide(collisionRadius) +export const computeForces = ({ axis, valueScale, ordinalScale, spacing, forceStrength }) => { + const collisionForce = forceCollide(d => d.size / 2 + spacing / 2) let xForce let yForce if (axis === 'x') { - xForce = forceX(d => valueScale(d.value)).strength(forceStrength) - yForce = forceY(d => ordinalScale(d.serieId)) + xForce = forceX(d => { + //console.log(d) + return valueScale(d.value) + }).strength(forceStrength) + yForce = forceY(d => ordinalScale(d.group)) } else if (axis === 'y') { - xForce = forceX(d => ordinalScale(d.serieId)) + xForce = forceX(d => ordinalScale(d.group)) yForce = forceY(d => valueScale(d.value)).strength(forceStrength) } return { x: xForce, y: yForce, collision: collisionForce } } -export const computeSwarmPlotNodes = ({ +export const computeNodes = ({ data, + getIdentity, layout, + getValue, valueScale, + getGroup, ordinalScale, + getSize, forces, simulationIterations, }) => { - const axis = layout === 'horizontal' ? 'x' : 'y' - const otherAxis = axis === 'x' ? 'y' : 'x' - - const nodes = data.reduce((acc, serie) => { - const serieNodes = serie.data.map(d => ({ - ...d, - uid: `${serie.id}.${d.id}`, - serieId: serie.id, - })) - const simulation = forceSimulation(serieNodes) - .force('x', forces.x) - .force('y', forces.y) - .force('collide', forces.collision) - .stop() - - simulation.tick(simulationIterations) - - return [...acc, ...simulation.nodes()] - }, []) + const config = { + horizontal: ['x', 'y'], + vertical: ['y', 'x'], + } + + const simulatedNodes = data.map(d => ({ + id: getIdentity(d), + group: getGroup(d), + value: getValue(d), + size: getSize(d), + data: { ...d }, + })) + const simulation = forceSimulation(simulatedNodes) + .force('x', forces.x) + .force('y', forces.y) + .force('collide', forces.collision) + .stop() + + simulation.tick(simulationIterations) return { - [`${axis}Scale`]: valueScale, - [`${otherAxis}Scale`]: ordinalScale, - nodes, + [`${config[layout][0]}Scale`]: valueScale, + [`${config[layout][1]}Scale`]: ordinalScale, + nodes: simulation.nodes(), } } diff --git a/packages/swarmplot/src/hooks.js b/packages/swarmplot/src/hooks.js index 89e53ebc7..33ed85c08 100644 --- a/packages/swarmplot/src/hooks.js +++ b/packages/swarmplot/src/hooks.js @@ -6,122 +6,229 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import { useMemo } from 'react' +import React, { useMemo, useCallback } from 'react' +import get from 'lodash/get' +import { useValueFormatter, useTooltip } from '@nivo/core' import { useOrdinalColorScale } from '@nivo/colors' import { - computeSwarmPlotValueScale, - computeSwarmPlotOrdinalScale, - computeSwarmPlotForces, - computeSwarmPlotNodes, + computeValueScale, + computeOrdinalScale, + computeForces, + computeNodes, + getSizeGenerator, } from './compute' +import SwarmPlotTooltip from './SwarmPlotTooltip' -export const useSwarmPlotValueScale = ({ axis, scale, data, width, height }) => { - return useMemo(() => computeSwarmPlotValueScale({ axis, scale, data, width, height }), [ - axis, - scale, - data, +export const useValueScale = ({ width, height, axis, getValue, scale, data }) => + useMemo( + () => + computeValueScale({ + width, + height, + axis, + getValue, + scale, + data, + }), + [width, height, axis, getValue, scale, data] + ) + +export const useOrdinalScale = ({ width, height, axis, groups, gap }) => + useMemo(() => computeOrdinalScale({ width, height, axis, groups, gap }), [ width, height, - ]) -} - -export const useSwarmPlotOrdinalScale = ({ axis, data, gap, width, height }) => { - return useMemo(() => computeSwarmPlotOrdinalScale({ axis, data, gap, width, height }), [ axis, - data, + groups, gap, - width, - height, ]) -} -export const useSwarmPlotForces = ({ - axis, - valueScale, - ordinalScale, - nodeSize, - nodePadding, - forceStrength, -}) => { - return useMemo( +export const useForces = ({ axis, valueScale, ordinalScale, getSize, spacing, forceStrength }) => + useMemo( () => - computeSwarmPlotForces({ + computeForces({ axis, valueScale, ordinalScale, - nodeSize, - nodePadding, + getSize, + spacing, forceStrength, }), - [axis, valueScale, ordinalScale, nodeSize, nodePadding, forceStrength] + [axis, valueScale, ordinalScale, getSize, spacing, forceStrength] ) + +const useSize = size => useMemo(() => getSizeGenerator(size), [size]) + +const getAccessor = instruction => { + if (typeof instruction === 'function') return instruction + return d => get(d, instruction) } export const useSwarmPlot = ({ - data, - layout, - colors, - scale, width, height, + data, + identity, + label, + groups, + groupBy, + value, + valueFormat, + valueScale: valueScaleConfig, + size, + spacing, + layout, gap, - nodeSize, - nodePadding, + colors, + colorBy, forceStrength, simulationIterations, }) => { const axis = layout === 'horizontal' ? 'x' : 'y' - const valueScale = useSwarmPlotValueScale({ - axis, - scale, - data, + const getIdentity = useMemo(() => getAccessor(identity), [identity]) + const getLabel = useMemo(() => getAccessor(label), [label]) + const getValue = useMemo(() => getAccessor(value), [value]) + const formatValue = useValueFormatter(valueFormat) + const getGroup = useMemo(() => getAccessor(groupBy), [groupBy]) + const getSize = useSize(size) + const getColor = useOrdinalColorScale(colors, colorBy) + + const valueScale = useValueScale({ width, height, - }) - const ordinalScale = useSwarmPlotOrdinalScale({ axis, + getValue, + scale: valueScaleConfig, data, - gap, + }) + + const ordinalScale = useOrdinalScale({ width, height, + axis, + groups, + gap, }) - const forces = useSwarmPlotForces({ + + const forces = useForces({ axis, valueScale, ordinalScale, - nodeSize, - nodePadding, + spacing, forceStrength, }) const { nodes, xScale, yScale } = useMemo( () => - computeSwarmPlotNodes({ + computeNodes({ data, + getIdentity, layout, + getValue, valueScale, + getGroup, ordinalScale, + getSize, forces, simulationIterations, }), - [data, layout, valueScale, ordinalScale, forces, simulationIterations] + [ + data, + getIdentity, + layout, + getValue, + valueScale, + getGroup, + ordinalScale, + getSize, + forces, + simulationIterations, + ] ) - const colorScale = useOrdinalColorScale(colors, 'serieId') - - const coloredNodes = useMemo(() => nodes.map(node => ({ ...node, color: colorScale(node) }))) + const augmentedNodes = useMemo( + () => + nodes.map(node => ({ + id: node.id, + index: node.index, + group: node.group, + label: getLabel(node), + value: node.value, + formattedValue: formatValue(node.value), + x: node.x, + y: node.y, + size: node.size, + color: getColor(node), + data: node.data, + })), + [nodes, getLabel, formatValue, getColor] + ) return { - nodes: coloredNodes, + nodes: augmentedNodes, xScale, yScale, - colorScale, + getColor, } } -/* -withPropsOnChange(['borderColor'], ({ borderColor }) => ({ - getBorderColor: getInheritedColorGenerator(borderColor), -})), -*/ +export const useBorderWidth = borderWidth => + useMemo(() => { + if (typeof borderWidth === 'function') return borderWidth + return () => borderWidth + }, [borderWidth]) + +export const useNodeMouseHandlers = ({ + isEnabled, + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, +}) => { + const [showTooltip, hideTooltip] = useTooltip() + const showNodeTooltip = useMemo( + () => (node, event) => showTooltip(, event), + [showTooltip] + ) + + const mouseEnterHandler = useCallback( + (node, event) => { + if (!isEnabled) return + showNodeTooltip(node, event) + onMouseEnter && onMouseEnter(node, event) + }, + [isEnabled, onMouseEnter] + ) + + const mouseMoveHandler = useCallback( + (node, event) => { + if (!isEnabled) return + showNodeTooltip(node, event) + onMouseMove && onMouseMove(node, event) + }, + [isEnabled, onMouseMove] + ) + + const mouseLeaveHandler = useCallback( + (node, event) => { + if (!isEnabled) return + hideTooltip() + onMouseLeave && onMouseLeave(node, event) + }, + [isEnabled, onMouseLeave] + ) + + const clickHandler = useCallback( + (node, event) => { + isEnabled && onClick && onClick(node, event) + }, + [isEnabled, onClick] + ) + + return { + onMouseEnter: mouseEnterHandler, + onMouseMove: mouseMoveHandler, + onMouseLeave: mouseLeaveHandler, + onClick: clickHandler, + } +} diff --git a/packages/swarmplot/src/index.js b/packages/swarmplot/src/index.js index ea900cc89..cbf4c34ff 100644 --- a/packages/swarmplot/src/index.js +++ b/packages/swarmplot/src/index.js @@ -10,5 +10,7 @@ export { default as SwarmPlot } from './SwarmPlot' export { default as ResponsiveSwarmPlot } from './ResponsiveSwarmPlot' export { default as SwarmPlotCanvas } from './SwarmPlotCanvas' export { default as ResponsiveSwarmPlotCanvas } from './ResponsiveSwarmPlotCanvas' +export { default as SwarmPlotTooltip } from './SwarmPlotTooltip' +export * from './compute' export * from './hooks' export * from './props' diff --git a/packages/swarmplot/src/props.js b/packages/swarmplot/src/props.js index aef9182bf..edf9394ae 100644 --- a/packages/swarmplot/src/props.js +++ b/packages/swarmplot/src/props.js @@ -8,56 +8,68 @@ */ import PropTypes from 'prop-types' import { axisPropType } from '@nivo/axes' -import { ordinalColorsPropType } from '@nivo/colors' +import { motionPropTypes } from '@nivo/core' +import { + ordinalColorsPropType, + inheritedColorPropType, + colorPropertyAccessorPropType, +} from '@nivo/colors' import { scalePropType } from '@nivo/scales' const commonPropTypes = { - data: PropTypes.arrayOf( + data: PropTypes.arrayOf(PropTypes.object).isRequired, + + groups: PropTypes.arrayOf(PropTypes.string).isRequired, + groupBy: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired, + identity: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired, + label: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired, + valueScale: scalePropType.isRequired, + size: PropTypes.oneOfType([ + PropTypes.number, PropTypes.shape({ - id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, - data: PropTypes.arrayOf( - PropTypes.shape({ - value: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.instanceOf(Date), - ]).isRequired, - }) - ).isRequired, - }) - ).isRequired, - - scale: scalePropType.isRequired, - + key: PropTypes.string.isRequired, + values: PropTypes.arrayOf(PropTypes.number).isRequired, + sizes: PropTypes.arrayOf(PropTypes.number).isRequired, + }), + PropTypes.func, + ]).isRequired, layout: PropTypes.oneOf(['horizontal', 'vertical']).isRequired, + gap: PropTypes.number.isRequired, + forceStrength: PropTypes.number.isRequired, simulationIterations: PropTypes.number.isRequired, - //layers: PropTypes.arrayOf( - // PropTypes.oneOfType([PropTypes.oneOf(['grid', 'axes', 'nodes']), PropTypes.func]) - //).isRequired, - // renderNode: PropTypes.func.isRequired, + layers: PropTypes.arrayOf( + PropTypes.oneOfType([PropTypes.oneOf(['grid', 'axes', 'nodes', 'mesh']), PropTypes.func]) + ).isRequired, + renderNode: PropTypes.func.isRequired, - gap: PropTypes.number.isRequired, - nodeSize: PropTypes.number.isRequired, - nodePadding: PropTypes.number.isRequired, colors: ordinalColorsPropType.isRequired, - borderWidth: PropTypes.number.isRequired, - borderColor: PropTypes.any.isRequired, + colorBy: colorPropertyAccessorPropType.isRequired, + borderWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.func]), + borderColor: inheritedColorPropType.isRequired, enableGridX: PropTypes.bool.isRequired, + gridXValues: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), enableGridY: PropTypes.bool.isRequired, + gridYValues: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])), + axisTop: axisPropType, axisRight: axisPropType, axisBottom: axisPropType, axisLeft: axisPropType, isInteractive: PropTypes.bool.isRequired, - onMouseEnter: PropTypes.func.isRequired, - onMouseMove: PropTypes.func.isRequired, - onMouseLeave: PropTypes.func.isRequired, - onClick: PropTypes.func.isRequired, + onMouseEnter: PropTypes.func, + onMouseMove: PropTypes.func, + onMouseLeave: PropTypes.func, + onClick: PropTypes.func, + useMesh: PropTypes.bool.isRequired, + debugMesh: PropTypes.bool.isRequired, tooltip: PropTypes.any, + + ...motionPropTypes, } export const SwarmPlotPropTypes = { @@ -70,35 +82,36 @@ export const SwarmPlotCanvasPropTypes = { } const commonDefaultProps = { - scale: { - type: 'linear', - min: 0, - max: 'auto', - }, + groupBy: 'group', + identity: 'id', + label: 'id', + value: 'value', + valueScale: { type: 'linear', min: 0, max: 'auto' }, + size: 6, + spacing: 2, + layout: 'vertical', + gap: 0, - layout: 'horizontal', - forceStrength: 4, - simulationIterations: 160, - layers: ['grid', 'axes', 'nodes'], + forceStrength: 1, + simulationIterations: 120, + + layers: ['grid', 'axes', 'nodes', 'mesh'], - gap: 0, - nodeSize: 6, - nodePadding: 2, colors: { scheme: 'nivo' }, + colorBy: 'group', borderWidth: 0, - borderColor: 'inherit:darker(.3)', + borderColor: 'none', enableGridX: true, enableGridY: true, axisTop: {}, + axisRight: {}, axisBottom: {}, axisLeft: {}, isInteractive: true, - onMouseEnter: () => {}, - onMouseLeave: () => {}, - onMouseMove: () => {}, - onClick: () => {}, + useMesh: false, + debugMesh: false, animate: true, motionStiffness: 90, diff --git a/packages/swarmplot/stories/SwarmPlot.stories.js b/packages/swarmplot/stories/SwarmPlot.stories.js new file mode 100644 index 000000000..9568dab67 --- /dev/null +++ b/packages/swarmplot/stories/SwarmPlot.stories.js @@ -0,0 +1,43 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React from 'react' +import { storiesOf } from '@storybook/react' +import { generateSwarmPlotData } from '@nivo/generators' +import { SwarmPlot } from '../src' +import SwarmPlotLayers from './SwarmPlotLayers' +import SwarmPlotRenderNode from './SwarmPlotRenderNode' + +const commonProps = { + width: 600, + height: 360, + margin: { + top: 40, + right: 40, + bottom: 40, + left: 40, + }, + groupBy: 'group', + identity: 'id', + value: 'price', + valueScale: { + type: 'linear', + min: 0, + max: 500, + }, + size: 10, + ...generateSwarmPlotData(['group A', 'group B', 'group C'], { min: 40, max: 60 }), +} + +const stories = storiesOf('SwarmPlot', module) + +stories.add('default', () => ) + +stories.add('extra layers', () => ) + +stories.add('custom node rendering', () => ) diff --git a/packages/swarmplot/stories/SwarmPlotCanvas.stories.js b/packages/swarmplot/stories/SwarmPlotCanvas.stories.js new file mode 100644 index 000000000..c3030dd72 --- /dev/null +++ b/packages/swarmplot/stories/SwarmPlotCanvas.stories.js @@ -0,0 +1,40 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React from 'react' +import { storiesOf } from '@storybook/react' +import { generateSwarmPlotData } from '@nivo/generators' +import { SwarmPlotCanvas } from '../src' + +const commonProps = { + width: 600, + height: 360, + margin: { + top: 40, + right: 40, + bottom: 40, + left: 40, + }, + groupBy: 'group', + identity: 'id', + value: 'price', + valueScale: { + type: 'linear', + min: 0, + max: 500, + }, + size: 10, + ...generateSwarmPlotData(['group A', 'group B', 'group C', 'group D', 'group E'], { + min: 40, + max: 60, + }), +} + +const stories = storiesOf('SwarmPlotCanvas', module) + +stories.add('default', () => ) diff --git a/packages/swarmplot/stories/SwarmPlotLayers.js b/packages/swarmplot/stories/SwarmPlotLayers.js new file mode 100644 index 000000000..c69f8a3e7 --- /dev/null +++ b/packages/swarmplot/stories/SwarmPlotLayers.js @@ -0,0 +1,159 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React, { useMemo, useState } from 'react' +import { generateSwarmPlotData } from '@nivo/generators' +import { PatternLines } from '../../core/src' +import { SwarmPlot } from '../src' + +const backgroundLayer = ({ xScale, innerHeight }) => ( + <> + + + + + + the sweet spot + + + the sweet spot + + +) + +const Annotations = ({ nodes, margin, innerWidth, currentIndex }) => { + const node = nodes[currentIndex] + const radius = node.size * 0.6 + const labelBefore = node.x > innerWidth / 2 + const labelX = labelBefore ? node.x - 140 : node.x + 140 + const linePath = ` + M${node.x},${node.y - radius} + L${node.x},${margin.top * -0.5} + L${labelX},${margin.top * -0.5} + ` + + return ( + + + + + + + Annotation + + + ) +} + +const SwarmPlotLayers = () => { + const data = useMemo(() => generateSwarmPlotData(['group'], { min: 60, max: 60 }), []) + const [currentIndex, setCurrentIndex] = useState(13) + + return ( + , + ]} + theme={{ background: 'rgb(199, 234, 229)' }} + colors={{ scheme: 'brown_blueGreen' }} + colorBy="id" + borderWidth={4} + borderColor="rgb(199, 234, 229)" + onClick={node => setCurrentIndex(node.index)} + enableGridY={false} + axisLeft={null} + axisRight={null} + layout="horizontal" + /> + ) +} + +export default SwarmPlotLayers diff --git a/packages/swarmplot/stories/SwarmPlotRenderNode.js b/packages/swarmplot/stories/SwarmPlotRenderNode.js new file mode 100644 index 000000000..cf6dce35f --- /dev/null +++ b/packages/swarmplot/stories/SwarmPlotRenderNode.js @@ -0,0 +1,137 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import React, { useMemo } from 'react' +import { generateSwarmPlotData } from '@nivo/generators' +import { useOrdinalColorScale } from '../../colors/src' +import { usePie } from '../../pie/src' +import { SwarmPlot } from '../src' + +const CustomNode = d => { + const getArcColor = useOrdinalColorScale({ scheme: 'purple_orange' }, v => v) + const { arcs, arcGenerator } = usePie({ + data: d.node.data.categories, + radius: d.size / 2, + innerRadius: (d.size / 2) * 0.7, + sortByValue: true, + }) + + return ( + + + + {arcs.map((arc, i) => { + return + })} + {d.size > 52 && ( + + {d.node.value} + + )} + + ) +} + +const shadowsLayer = ({ nodes }) => { + return nodes.map(node => ( + + )) +} + +const theme = { + background: 'rgb(216, 218, 235)', + axis: { + ticks: { + line: { + stroke: 'rgb(84, 39, 136)', + }, + text: { + fill: 'rgb(84, 39, 136)', + fontWeight: 600, + }, + }, + legend: { + text: { + fill: 'rgb(84, 39, 136)', + fontSize: 15, + }, + }, + }, + grid: { + line: { + stroke: 'rgb(128, 115, 172)', + strokeDasharray: '2 4', + strokeWidth: 2, + }, + }, +} + +const SwarmPlotRenderNode = () => { + const data = useMemo( + () => generateSwarmPlotData(['group'], { min: 32, max: 32, categoryCount: 9 }), + [] + ) + + return ( + } + layers={['grid', 'axes', shadowsLayer, 'nodes']} + layout="horizontal" + theme={theme} + /> + ) +} + +export default SwarmPlotRenderNode diff --git a/packages/swarmplot/tests/.eslintrc.yml b/packages/swarmplot/tests/.eslintrc.yml new file mode 100644 index 000000000..2f8de9aea --- /dev/null +++ b/packages/swarmplot/tests/.eslintrc.yml @@ -0,0 +1,2 @@ +env: + jest: true diff --git a/packages/swarmplot/tests/compute.test.js b/packages/swarmplot/tests/compute.test.js new file mode 100644 index 000000000..0b0326b51 --- /dev/null +++ b/packages/swarmplot/tests/compute.test.js @@ -0,0 +1,146 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { getSizeGenerator, computeValueScale, computeOrdinalScale } from '../src' + +describe(`getSizeGenerator`, () => { + it(`should accept a fixed value`, () => { + const generator = getSizeGenerator(10) + + expect(generator()).toBe(10) + }) + + it(`should accept a custom function`, () => { + const sizeFunction = () => 20 + const generator = getSizeGenerator(sizeFunction) + + expect(generator).toBe(sizeFunction) + expect(generator()).toBe(20) + }) + + describe('varying size using object spec', () => { + it(`should throw if key is undefined`, () => { + expect(() => { + getSizeGenerator({}) + }).toThrow( + 'Size is invalid, key should be a string pointing to the property to use to determine node size' + ) + }) + it(`should throw if key is not a string`, () => { + expect(() => { + getSizeGenerator({ key: 0 }) + }).toThrow( + 'Size is invalid, key should be a string pointing to the property to use to determine node size' + ) + }) + it(`should throw if values is not an array with two values`, () => { + expect(() => { + getSizeGenerator({ key: 'size' }) + }).toThrow( + 'Size is invalid, values spec should be an array containing two values, min and max' + ) + expect(() => { + getSizeGenerator({ key: 'size', values: 'string' }) + }).toThrow( + 'Size is invalid, values spec should be an array containing two values, min and max' + ) + expect(() => { + getSizeGenerator({ key: 'size', values: [0] }) + }).toThrow( + 'Size is invalid, values spec should be an array containing two values, min and max' + ) + }) + it(`should throw if sizes is not an array with two values`, () => { + expect(() => { + getSizeGenerator({ key: 'size', values: [0, 1] }) + }).toThrow( + 'Size is invalid, sizes spec should be an array containing two values, min and max' + ) + expect(() => { + getSizeGenerator({ key: 'size', values: [0, 1], sizes: 'string' }) + }).toThrow( + 'Size is invalid, sizes spec should be an array containing two values, min and max' + ) + expect(() => { + getSizeGenerator({ key: 'size', values: [0, 1], sizes: [0] }) + }).toThrow( + 'Size is invalid, sizes spec should be an array containing two values, min and max' + ) + }) + it(`should return a dynamic size function`, () => { + const generator = getSizeGenerator({ + key: 'value', + values: [0, 1], + sizes: [0, 10], + }) + expect(generator({ value: 0.5 })).toBe(5) + }) + }) + + it(`should throw if size config is invalid`, () => { + expect(() => { + getSizeGenerator('whatever') + }).toThrow('Size is invalid, it should be either a function, a number or an object') + }) +}) + +describe(`computeValueScale`, () => { + it(`should be able to compute a linear scale`, () => { + const data = [0, 2, 4, 8, 10] + const scale = computeValueScale({ + data, + width: 100, + height: 0, + axis: 'x', + getValue: d => d, + scale: { + type: 'linear', + min: 'auto', + max: 'auto', + }, + }) + + expect(scale.domain()).toEqual([0, 10]) + expect(scale.range()).toEqual([0, 100]) + expect(scale(5)).toBe(50) + }) +}) + +describe(`computeOrdinalScale`, () => { + const ordinalScaleArgs = { + width: 100, + height: 100, + axis: 'x', + groups: ['A', 'B', 'C', 'D'], + gap: 0, + } + it(`should throw if groups is not an array`, () => { + expect(() => { + computeOrdinalScale({ + ...ordinalScaleArgs, + groups: 'string', + }) + }).toThrow(`'groups' should be an array containing at least one item`) + }) + it(`should throw if groups doesn't contain at least one item`, () => { + expect(() => { + computeOrdinalScale({ + ...ordinalScaleArgs, + groups: [], + }) + }).toThrow(`'groups' should be an array containing at least one item`) + }) + it(`should compute a valid scale`, () => { + const scale = computeOrdinalScale(ordinalScaleArgs) + + expect(scale.domain()).toEqual(ordinalScaleArgs.groups) + expect(scale.range()).toEqual([12.5, 37.5, 62.5, 87.5]) + expect(scale('A')).toBe(12.5) + expect(scale('C')).toBe(62.5) + }) +}) diff --git a/packages/treemap/src/enhance.js b/packages/treemap/src/enhance.js index 1eeb5c6ab..4db9c08ea 100644 --- a/packages/treemap/src/enhance.js +++ b/packages/treemap/src/enhance.js @@ -37,8 +37,8 @@ const commonEnhancers = [ withDimensions(), withTheme(), withMotion(), - withPropsOnChange(['colors'], ({ colors }) => ({ - getColor: getOrdinalColorScale(colors, 'depth'), + withPropsOnChange(['colors', 'colorBy'], ({ colors, colorBy }) => ({ + getColor: getOrdinalColorScale(colors, colorBy), })), withPropsOnChange(['identity'], ({ identity }) => ({ getIdentity: getAccessorFor(identity), diff --git a/packages/treemap/src/props.js b/packages/treemap/src/props.js index d611af560..6affe7908 100644 --- a/packages/treemap/src/props.js +++ b/packages/treemap/src/props.js @@ -8,7 +8,7 @@ */ import PropTypes from 'prop-types' import { noop, treeMapTilePropType, defsPropTypes } from '@nivo/core' -import { ordinalColorsPropType } from '@nivo/colors' +import { ordinalColorsPropType, colorPropertyAccessorPropType } from '@nivo/colors' import TreeMapNode from './TreeMapNode' import TreeMapHtmlNode from './TreeMapHtmlNode' @@ -28,6 +28,7 @@ const commonPropTypes = { // styling // theme managed by `withTheme()` HOC colors: ordinalColorsPropType.isRequired, + colorBy: colorPropertyAccessorPropType.isRequired, leavesOnly: PropTypes.bool.isRequired, tile: treeMapTilePropType.isRequired, @@ -80,6 +81,7 @@ const commonDefaultProps = { leavesOnly: false, colors: { scheme: 'nivo' }, + colorIdentity: 'depth', enableLabel: true, label: 'id', diff --git a/packages/voronoi/src/Mesh.js b/packages/voronoi/src/Mesh.js index 098abf19e..1c085f4b0 100644 --- a/packages/voronoi/src/Mesh.js +++ b/packages/voronoi/src/Mesh.js @@ -6,143 +6,121 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import React, { Component } from 'react' +import React, { useRef, useState, useCallback, useMemo } from 'react' import PropTypes from 'prop-types' -import compose from 'recompose/compose' -import defaultProps from 'recompose/defaultProps' -import withPropsOnChange from 'recompose/withPropsOnChange' import { getRelativeCursor } from '@nivo/core' -import { computeMeshPoints, computeMesh } from './computeMesh' - -class Mesh extends Component { - static propTypes = { - width: PropTypes.number.isRequired, - height: PropTypes.number.isRequired, - points: PropTypes.array.isRequired, - xAccessor: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]) - .isRequired, - yAccessor: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]) - .isRequired, - onMouseEnter: PropTypes.func, - onMouseMove: PropTypes.func, - onMouseLeave: PropTypes.func, - onClick: PropTypes.func, - debug: PropTypes.bool.isRequired, - - delaunay: PropTypes.shape({ - find: PropTypes.func.isRequired, - }).isRequired, - voronoi: PropTypes.shape({ - renderCell: PropTypes.func.isRequired, - }), - voronoiPath: PropTypes.string, - } - - state = { - index: null, - } - - constructor(props) { - super(props) - this.setRectRef = element => { - this.rect = element - } - } - - handleMouseIn = (handler, event) => { - const { delaunay, points } = this.props - - const [x, y] = getRelativeCursor(this.rect, event) - const index = delaunay.find(x, y) - - if (handler !== undefined) { - handler(points[index], event) - } - - if (this.state.index !== index) { - this.setState({ index }) - } - } - - handleMouseEnter = event => { - this.handleMouseIn(this.props.onMouseEnter, event) - } - - handleMouseMove = event => { - this.handleMouseIn(this.props.onMouseMove, event) - } - - handleMouseLeave = event => { - const { onMouseLeave, points } = this.props - const { index } = this.state - - if (onMouseLeave !== undefined) { - onMouseLeave(points[index], event) - } - - this.setState({ index: null }) - } - - handleClick = event => { - const { onClick, points } = this.props - const { index } = this.state - - if (onClick === undefined || index === null) return - - onClick(points[index], event) - } - - render() { - const { width, height, voronoi, voronoiPath, debug } = this.props - const { index } = this.state - - return ( - - {debug && } - {index !== null && debug && ( - - )} - - - ) - } -} - -const enhance = compose( - defaultProps({ - xAccessor: 'x', - yAccessor: 'y', - debug: false, - }), - withPropsOnChange(['points', 'xAccessor', 'yAccessor'], ({ points, xAccessor, yAccessor }) => ({ - points2d: computeMeshPoints({ points, xAccessor, yAccessor }).points, - })), - withPropsOnChange( - ['points2d', 'width', 'height', 'debug'], - ({ points2d, width, height, debug }) => { - const mesh = computeMesh({ points: points2d, width, height, debug }) - - let voronoiPath - if (debug === true) { - voronoiPath = mesh.voronoi.render() +import { useVoronoiMesh } from './hooks' + +const Mesh = ({ + nodes, + width, + height, + x, + y, + debug, + + onMouseEnter, + onMouseMove, + onMouseLeave, + onClick, +}) => { + const elementRef = useRef(null) + const [currentIndex, setCurrentIndex] = useState(null) + + const { delaunay, voronoi } = useVoronoiMesh({ + points: nodes, + x, + y, + width, + height, + debug, + }) + const voronoiPath = useMemo(() => (debug ? voronoi.render() : undefined)) + + const getIndexAndNodeFromEvent = useCallback( + event => { + const [x, y] = getRelativeCursor(elementRef.current, event) + const index = delaunay.find(x, y) + + return [index, index !== undefined ? nodes[index] : null] + }, + [delaunay] + ) + const handleMouseEnter = useCallback( + event => { + const [index, node] = getIndexAndNodeFromEvent(event) + if (currentIndex !== index) setCurrentIndex(index) + node && onMouseEnter && onMouseEnter(node, event) + }, + [getIndexAndNodeFromEvent, setCurrentIndex] + ) + const handleMouseMove = useCallback( + event => { + const [index, node] = getIndexAndNodeFromEvent(event) + if (currentIndex !== index) setCurrentIndex(index) + node && onMouseMove && onMouseMove(node, event) + }, + [getIndexAndNodeFromEvent, setCurrentIndex] + ) + const handleMouseLeave = useCallback( + event => { + setCurrentIndex(null) + if (onMouseLeave) { + let previousNode + if (currentIndex !== undefined && currentIndex !== null) { + previousNode = nodes[currentIndex] + } + onMouseLeave(previousNode, event) } + }, + [setCurrentIndex] + ) + const handleClick = useCallback( + event => { + const [index, node] = getIndexAndNodeFromEvent(event) + if (currentIndex !== index) setCurrentIndex(index) + onClick && onClick(node, event) + }, + [getIndexAndNodeFromEvent, setCurrentIndex] + ) - return { - ...mesh, - voronoiPath, - } - } + return ( + + {debug && } + {currentIndex !== null && debug && ( + + )} + + ) -) +} + +Mesh.propTypes = { + width: PropTypes.number.isRequired, + height: PropTypes.number.isRequired, + nodes: PropTypes.array.isRequired, + x: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired, + y: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired, + onMouseEnter: PropTypes.func, + onMouseMove: PropTypes.func, + onMouseLeave: PropTypes.func, + onClick: PropTypes.func, + debug: PropTypes.bool.isRequired, +} +Mesh.defaultProps = { + x: 'x', + y: 'y', + debug: false, +} -export default enhance(Mesh) +export default Mesh diff --git a/packages/voronoi/src/computeMesh.js b/packages/voronoi/src/computeMesh.js index ae77082dd..670ab9933 100644 --- a/packages/voronoi/src/computeMesh.js +++ b/packages/voronoi/src/computeMesh.js @@ -2,13 +2,19 @@ import { Delaunay } from 'd3-delaunay' const getAccessor = directive => (typeof directive === 'function' ? directive : d => d[directive]) -export const computeMeshPoints = ({ points, xAccessor, yAccessor }) => { - const getX = getAccessor(xAccessor) - const getY = getAccessor(yAccessor) +/** + * The delaunay generator requires an array + * where each point is defined as an array + * of 2 elements: [x: number, y: number]. + * + * Points represent the raw input data + * and x/y represent accessors to x & y. + */ +export const computeMeshPoints = ({ points, x = 'x', y = 'y' }) => { + const getX = getAccessor(x) + const getY = getAccessor(y) - return { - points: points.map(p => [getX(p), getY(p)]), - } + return points.map(p => [getX(p), getY(p)]) } export const computeMesh = ({ points, width, height, debug }) => { diff --git a/packages/voronoi/src/hooks.js b/packages/voronoi/src/hooks.js new file mode 100644 index 000000000..44d961a44 --- /dev/null +++ b/packages/voronoi/src/hooks.js @@ -0,0 +1,21 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +import { useMemo } from 'react' +import { computeMeshPoints, computeMesh } from './computeMesh' + +export const useVoronoiMesh = ({ points, x, y, width, height, debug }) => { + const points2d = useMemo(() => computeMeshPoints({ points, x, y }), [points, x, y]) + + return useMemo(() => computeMesh({ points: points2d, width, height, debug }), [ + points2d, + width, + height, + debug, + ]) +} diff --git a/packages/voronoi/src/index.js b/packages/voronoi/src/index.js index d48c7236e..0f4a4890f 100644 --- a/packages/voronoi/src/index.js +++ b/packages/voronoi/src/index.js @@ -12,3 +12,4 @@ export { default as Mesh } from './Mesh' export * from './computeMesh' export * from './meshCanvas' export * from './props' +export * from './hooks' diff --git a/packages/voronoi/src/meshCanvas.js b/packages/voronoi/src/meshCanvas.js index 69d2d8fb0..5350100f7 100644 --- a/packages/voronoi/src/meshCanvas.js +++ b/packages/voronoi/src/meshCanvas.js @@ -1,3 +1,12 @@ +/* + * This file is part of the nivo project. + * + * Copyright 2016-present, Raphaël Benitte. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + export const renderVoronoiToCanvas = (ctx, voronoi) => { ctx.save() diff --git a/scripts/capture.js b/scripts/capture.js index c568ab63f..d8538ef25 100644 --- a/scripts/capture.js +++ b/scripts/capture.js @@ -2,13 +2,25 @@ const puppeteer = require('puppeteer') const chalk = require('chalk') const config = require('@ekino/config') -const capture = async (page, baseUrl, { path, selector, output }) => { +const capture = async (page, baseUrl, { path, selector, output, theme }) => { const url = `${baseUrl}${path}?capture=1` console.log(chalk`{yellow Capturing {white ${path}}} {dim (selector: ${selector})}`) + if (path.indexOf('/icons') !== -1) { + await page.setViewport({ width: 1400, height: 4000 }) + } else { + await page.setViewport({ width: 1400, height: 900 }) + } + await page.goto(url) + if (theme !== undefined) { + const themeSelector = `#${theme}Theme` + await page.waitFor(themeSelector) + await page.click(themeSelector) + } + await page.waitFor(selector) const element = await page.$(selector) if (element === null) { @@ -37,7 +49,6 @@ const captureAll = async config => { headless: true }) const page = await browser.newPage() - await page.setViewport({ width: 1400, height: 4000 }) for (let pageConfig of config.pages) { await capture(page, config.baseUrl, pageConfig) diff --git a/tsconfig.json b/tsconfig.json index 7fe007080..7b74480d5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,9 @@ "target": "es2017", "alwaysStrict": true, "sourceMap": true, - "moduleResolution": "node" + "jsx": "react", + "moduleResolution": "node", + "esModuleInterop": true }, "include": ["./packages/*/index.d.ts"] } diff --git a/website/gatsby-browser.js b/website/gatsby-browser.js index 9b2fe9d6a..523e35e72 100644 --- a/website/gatsby-browser.js +++ b/website/gatsby-browser.js @@ -15,4 +15,13 @@ export const wrapPageElement = ({ element }) => { {element} ) +} + +export const onServiceWorkerUpdateReady = () => { + const answer = window.confirm([ + `The documentation has been updated,`, + `would you like to reload to display the latest version?` + ].join('')) + + if (answer === true) window.location.reload() } \ No newline at end of file diff --git a/website/gatsby-config.js b/website/gatsby-config.js index c7fa12973..33af4ba86 100644 --- a/website/gatsby-config.js +++ b/website/gatsby-config.js @@ -39,8 +39,6 @@ module.exports = { icon: `src/assets/icons/nivo-icon.png`, // This path is relative to the root of the site. }, }, - // this (optional) plugin enables Progressive Web App + Offline functionality - // To learn more, visit: https://gatsby.dev/offline - // `gatsby-plugin-offline`, + `gatsby-plugin-offline`, ], } diff --git a/website/src/assets/stories/SwarmPlotLayers.png b/website/src/assets/stories/SwarmPlotLayers.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb8a750fde50ec271b6dd5e6d901deda9db7c1c GIT binary patch literal 133176 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�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 EADb^b%m4rY literal 0 HcmV?d00001 diff --git a/website/src/assets/stories/SwarmPlotRenderNode.png b/website/src/assets/stories/SwarmPlotRenderNode.png new file mode 100644 index 0000000000000000000000000000000000000000..e95762c1e7fba4a8b661cfff4b14ed57d761f002 GIT binary patch literal 146655 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
%(USW@ZD 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
  • _G6p#CoR;0(7)uN_$e7wvQq|q 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≠}0BZ9Ps;{HK62 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⁢XPoTx9Zrp3|`$|bR-*VVGz&0m<6N53xpK~*W4 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 E2bA;N^#A|> literal 0 HcmV?d00001 diff --git a/website/src/components/ThemeSelector.js b/website/src/components/ThemeSelector.js index 63eb7999f..c43ea3879 100644 --- a/website/src/components/ThemeSelector.js +++ b/website/src/components/ThemeSelector.js @@ -41,7 +41,11 @@ const ThemeSelector = () => { return ( - setTheme('light')}> + setTheme('light')} + > light { onChange={toggleTheme} colors={colors} /> - setTheme('dark')}> + setTheme('dark')} + > dark diff --git a/website/src/components/components/ActionsLoggerLog.js b/website/src/components/components/ActionsLoggerLog.js index 293dd7e68..91f8cb853 100644 --- a/website/src/components/components/ActionsLoggerLog.js +++ b/website/src/components/components/ActionsLoggerLog.js @@ -17,9 +17,13 @@ const ActionHeader = styled.div` background: ${({ theme }) => theme.colors.cardBackground}; border-bottom: 1px solid ${({ theme }) => theme.colors.borderLight}; display: grid; - grid-template-columns: 60px auto 60px; + grid-template-columns: 60px 8px auto 60px; align-items: center; cursor: pointer; + + &:hover { + bakcground: ${({ theme }) => theme.colors.cardAltBackground}; + } ` const ActionType = styled.span` @@ -27,6 +31,20 @@ const ActionType = styled.span` opacity: 0.5; ` +const Color = styled.span` + height: 100%; + display: flex; + align-items: center; + justify-content: center; +` + +const ColorChip = styled.span` + width: 8px; + height: 8px; + display: block; + border-radius: 6px; +` + const ActionLabel = styled.span` font-weight: 600; padding: 7px 12px; @@ -54,6 +72,11 @@ const ActionsLoggerLog = ({ action }) => { {action.type} + + {action.color && ( + + )} + {action.label} {isOpen ? '-' : '{ … }'} diff --git a/website/src/components/components/ComponentTabs.js b/website/src/components/components/ComponentTabs.js index f3f55ba17..db06ffe26 100644 --- a/website/src/components/components/ComponentTabs.js +++ b/website/src/components/components/ComponentTabs.js @@ -38,7 +38,7 @@ const ComponentTabs = ({ let content if (currentTab === 'chart') { - content = {children} + content = {children} } else if (currentTab === 'code') { content = ( @@ -217,6 +217,10 @@ const NodeCount = styled.span` border-right: 1px solid ${({ theme }) => theme.colors.border}; font-size: 13px; padding: 5px 11px; + + .isCapturing & { + display: none; + } ` const Code = styled.div` diff --git a/website/src/components/components/ComponentTemplate.js b/website/src/components/components/ComponentTemplate.js index 7bc18261f..33cae3777 100644 --- a/website/src/components/components/ComponentTemplate.js +++ b/website/src/components/components/ComponentTemplate.js @@ -44,7 +44,10 @@ const ComponentTemplate = ({ const [settings, setSettings] = useState(initialProperties) const [data, setData] = useState(hasData ? generateData() : null) - const diceRoll = useCallback(() => setData(hasData ? generateData() : null), [setData]) + const diceRoll = useCallback(() => setData(hasData ? generateData(data) : null), [ + data, + setData, + ]) const [actions, logAction] = useActionsLogger() @@ -107,10 +110,7 @@ ComponentTemplate.propTypes = { stories: PropTypes.arrayOf( PropTypes.shape({ label: PropTypes.string.isRequired, - link: PropTypes.shape({ - kind: PropTypes.string.isRequired, - story: PropTypes.string.isRequired, - }).isRequired, + link: PropTypes.string.isRequired, }) ), }).isRequired, diff --git a/website/src/components/components/Stories.js b/website/src/components/components/Stories.js index 307b337c9..b6117b02f 100644 --- a/website/src/components/components/Stories.js +++ b/website/src/components/components/Stories.js @@ -14,10 +14,8 @@ import VisitIcon from 'react-icons/lib/md/keyboard-arrow-right' import media from '../../theming/mediaQueries' import config from '../../data/config' -const buildStoryLink = ({ kind, story }) => - `${config.storybookUrl}?path=/story/${encodeURIComponent( - kind.toLowerCase() - )}--${encodeURIComponent(snakeCase(story))}` +const buildStoryLink = link => + `${config.storybookUrl}?path=/story/${encodeURIComponent(link.toLowerCase())}` const Wrapper = styled.div` position: fixed; @@ -134,10 +132,7 @@ Stories.propTypes = { stories: PropTypes.arrayOf( PropTypes.shape({ label: PropTypes.string.isRequired, - link: PropTypes.shape({ - kind: PropTypes.string.isRequired, - story: PropTypes.string.isRequired, - }).isRequired, + link: PropTypes.string.isRequired, }) ), } diff --git a/website/src/components/icons/SwarmPlotIcon.js b/website/src/components/icons/SwarmPlotIcon.js index 749e3ee36..8dcd9d350 100644 --- a/website/src/components/icons/SwarmPlotIcon.js +++ b/website/src/components/icons/SwarmPlotIcon.js @@ -49,22 +49,19 @@ const values = [ const chartProps = { width: ICON_SIZE, height: ICON_SIZE, - scale: { + valueScale: { type: 'linear', min: 1, max: 9, }, forceStrength: 6, simulationIterations: 400, - data: [ - { - id: 'A', - data: values.map((v, i) => ({ - id: i, - value: v, - })), - }, - ], + groups: ['A'], + data: values.map((v, i) => ({ + id: i, + group: 'A', + value: v, + })), margin: { top: 6, right: 6, @@ -78,8 +75,8 @@ const chartProps = { axisRight: null, axisBottom: null, axisLeft: null, - nodeSize: 10, - nodePadding: 1, + size: 10, + spacing: 1, isInteractive: false, animate: true, } diff --git a/website/src/data/components/bar/meta.yml b/website/src/data/components/bar/meta.yml index 29d163770..4e6221acd 100644 --- a/website/src/data/components/bar/meta.yml +++ b/website/src/data/components/bar/meta.yml @@ -13,33 +13,19 @@ Bar: - isomorphic stories: - label: Using markers - link: - kind: Bar - story: with marker + link: bar--with-marker - label: Stacked diverging bar chart - link: - kind: Bar - story: diverging stacked + link: bar--diverging-stacked - label: Grouped diverging bar chart - link: - kind: Bar - story: diverging grouped + link: bar--diverging-grouped - label: Custom bar element - link: - kind: Bar - story: custom bar item + link: bar--custom-bar-item - label: Formatting values - link: - kind: Bar - story: with formatted values + link: bar--with-formatted-values - label: Using custom tooltip - link: - kind: Bar - story: custom tooltip + link: bar--custom-tooltip - label: Custom axis ticks - link: - kind: Bar - story: custom axis ticks + link: bar--custom-axis-ticks description: | Bar chart which can display multiple data series, stacked or side by side. Also supports both vertical and horizontal layout, with negative values descending diff --git a/website/src/data/components/bar/props.js b/website/src/data/components/bar/props.js index 31d69fc8b..278d981f2 100644 --- a/website/src/data/components/bar/props.js +++ b/website/src/data/components/bar/props.js @@ -256,7 +256,7 @@ const props = [ group: 'Style', }, { - key: 'colorIdentity', + key: 'colorBy', scopes: '*', type: 'string | Function', help: 'Property used to determine node color.', @@ -268,7 +268,7 @@ const props = [ to the color generator. `, required: false, - defaultValue: defaults.colorIdentity, + defaultValue: defaults.colorBy, controlType: 'choices', group: 'Style', controlOptions: { diff --git a/website/src/data/components/bubble/meta.yml b/website/src/data/components/bubble/meta.yml index 136959fad..6ed3df492 100644 --- a/website/src/data/components/bubble/meta.yml +++ b/website/src/data/components/bubble/meta.yml @@ -16,13 +16,9 @@ Bubble: - isomorphic stories: - label: Using formatted values - link: - kind: Bubble - story: with formatted values + link: bubble--with-formatted-values - label: Using custom tooltip - link: - kind: Bubble - story: custom tooltip + link: bubble--custom-tooltip description: | Bubble chart using circle packing with zooming ability. You can fully customize it using `nodeComponent` property diff --git a/website/src/data/components/bubble/props.js b/website/src/data/components/bubble/props.js index 6eb267787..6ccacea18 100644 --- a/website/src/data/components/bubble/props.js +++ b/website/src/data/components/bubble/props.js @@ -158,7 +158,7 @@ const props = [ group: 'Style', }, { - key: 'colorIdentity', + key: 'colorBy', scopes: ['Bubble', 'BubbleHtml', 'BubbleCanvas'], type: 'string | Function', help: 'Property used to determine node color.', @@ -170,7 +170,7 @@ const props = [ to the color generator. `, required: false, - defaultValue: defaults.colorIdentity, + defaultValue: defaults.colorBy, controlType: 'choices', group: 'Style', controlOptions: { diff --git a/website/src/data/components/bullet/meta.yml b/website/src/data/components/bullet/meta.yml index a1fd3dd6c..7f81e8533 100644 --- a/website/src/data/components/bullet/meta.yml +++ b/website/src/data/components/bullet/meta.yml @@ -9,21 +9,13 @@ Bullet: - isomorphic stories: - label: custom range - link: - kind: Bullet - story: custom range + link: bullet--custom-range - label: custom measure - link: - kind: Bullet - story: custom measure + link: bullet--custom-measure - label: custom marker - link: - kind: Bullet - story: custom marker + link: bullet--custom-marker - label: custom title - link: - kind: Bullet - story: custom title + link: bullet--custom-title description: | Bullet chart supporting multiple ranges/measures/markers. diff --git a/website/src/data/components/geo/mapper.js b/website/src/data/components/geo/mapper.js index f9477bad2..32ea9dc1c 100644 --- a/website/src/data/components/geo/mapper.js +++ b/website/src/data/components/geo/mapper.js @@ -14,25 +14,29 @@ const TooltipWrapper = styled.div` display: grid; grid-template-columns: 1fr 1fr; grid-column-gap: 12px; + font-size: 13px; + background: ${({ theme }) => theme.colors.cardBackground}; + padding: 10px 20px; + color: ${({ color }) => color}; + border: 2px solid ${({ color }) => color}; + box-shadow: 9px 16px 0 rgba(0, 0, 0, 0.15); ` const TooltipKey = styled.span` font-weight: 600; ` const TooltipValue = styled.span`` -const CustomTooltip = node => { +const CustomTooltip = ({ feature }) => { return ( - + + Custom tooltip + id - {node.id} + {feature.id} value - {node.value} - index - {node.index} - indexValue - {node.indexValue} + {feature.value} color - {node.color} + {feature.color} ) } diff --git a/website/src/data/components/geo/props.js b/website/src/data/components/geo/props.js index 5d6c942d2..4d7b7a742 100644 --- a/website/src/data/components/geo/props.js +++ b/website/src/data/components/geo/props.js @@ -332,9 +332,6 @@ const props = [ A function allowing complete tooltip customisation, it must return a valid HTML element and will receive the node's data. - - You can also customize the tooltip style - using the \`theme.tooltip\` object. `, }, { diff --git a/website/src/data/components/heatmap/meta.yml b/website/src/data/components/heatmap/meta.yml index 4e5b0e433..216b86ba5 100644 --- a/website/src/data/components/heatmap/meta.yml +++ b/website/src/data/components/heatmap/meta.yml @@ -13,13 +13,9 @@ HeatMap: - isomorphic stories: - label: Custom cell component - link: - kind: heatmap - story: Custom cell component + link: heatmap--custom-cell-component - label: Custom tooltip - link: - kind: heatmap - story: Custom tooltip + link: heatmap-custom-tooltip description: | An heat map matrix, you can chose between various colors scales or pass yours, you also have the ability to change the cell shape diff --git a/website/src/data/components/line/meta.yml b/website/src/data/components/line/meta.yml index 4f63cecd6..34f8723c5 100644 --- a/website/src/data/components/line/meta.yml +++ b/website/src/data/components/line/meta.yml @@ -11,53 +11,29 @@ Line: - isomorphic stories: - label: stacked lines - link: - kind: Line - story: stacked lines + link: line--stacked-lines - label: linear x scale - link: - kind: Line - story: linear x scale + link: line--linear-x-scale - label: time x scale - link: - kind: Line - story: time x scale + link: line--time-x-scale - label: logarithmic y scale - link: - kind: Line - story: logarithmic y scale + link: line--logarithmic-y-scale - label: real time chart - link: - kind: Line - story: real time chart + link: line--real-time-chart - label: custom dot symbol - link: - kind: Line - story: custom dot symbol + link: line--custom-dot-symbol - label: adding markers - link: - kind: Line - story: adding markers + link: line--adding-markers - label: holes in data - link: - kind: Line - story: holes in data + link: line--holes-in-data - label: different serie lengths - link: - kind: Line - story: different serie lengths + link: line--different-serie-lengths - label: custom min/max y - link: - kind: Line - story: custom min/max y + link: line--custom-min-max-y - label: formatting axis values - link: - kind: Line - story: formatting axis values + link: line--formatting-axis-values - label: formatting tooltip values - link: - kind: Line - story: formatting tooltip values + link: line--formatting-tooltip-values description: | Line chart with stacking ability. diff --git a/website/src/data/components/radar/meta.yml b/website/src/data/components/radar/meta.yml index bdf2d4d71..4bd447886 100644 --- a/website/src/data/components/radar/meta.yml +++ b/website/src/data/components/radar/meta.yml @@ -12,13 +12,9 @@ Radar: - isomorphic stories: - label: Formatting tooltip value - link: - kind: Radar - story: with formatted values + link: radar--with-formatted-values - label: Custom label component - link: - kind: Radar - story: custom label component + link: radar--custom-label-component description: | Generates a radar chart from an array of data. Note that margin object does not take grid labels into account, diff --git a/website/src/data/components/scatterplot/meta.yml b/website/src/data/components/scatterplot/meta.yml index 7dc55fa69..292f39967 100644 --- a/website/src/data/components/scatterplot/meta.yml +++ b/website/src/data/components/scatterplot/meta.yml @@ -11,29 +11,17 @@ ScatterPlot: - isomorphic stories: - label: Using time scales - link: - kind: ScatterPlot - story: using time scales + link: scatterplot--using-time-scales - label: Using logarithmic scales - link: - kind: ScatterPlot - story: using logarithmic scales + link: scatterplot--using-logarithmic-scales - label: Varying symbol size - link: - kind: ScatterPlot - story: varying symbol size + link: scatterplot--varying-symbol-size - label: Custom tooltip - link: - kind: ScatterPlot - story: custom tooltip + link: scatterplot--custom-tooltip - label: Synchronizing charts - link: - kind: ScatterPlot - story: synchronizing charts + link: scatterplot--synchronizing-charts - label: Using mouse enter/leave - link: - kind: ScatterPlot - story: using mouse enter/leave + link: scatterplot--using-mouse-enter-leave description: | A scatter plot chart, which can display several data series. @@ -55,17 +43,11 @@ ScatterPlotCanvas: - canvas stories: - label: Using time scales - link: - kind: ScatterPlot - story: using time scales + link: scatterplot--using-time-scales - label: Varying symbol size - link: - kind: ScatterPlot - story: varying symbol size + link: scatterplot--varying-symbol-size - label: Custom tooltip - link: - kind: ScatterPlot - story: custom tooltip + link: scatterplot--custom-tooltip description: | A variation around the [ScatterPlot](self:/scatterplot) component. Well suited for large data sets as it does not impact DOM tree depth, diff --git a/website/src/data/components/swarmplot/generator.js b/website/src/data/components/swarmplot/generator.js index 5608197ad..54d1808b9 100644 --- a/website/src/data/components/swarmplot/generator.js +++ b/website/src/data/components/swarmplot/generator.js @@ -6,31 +6,18 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import range from 'lodash/range' -import random from 'lodash/random' +import { generateSwarmPlotData, randomizeSwarmPlotData } from '@nivo/generators' -const ids = ['serie A', 'serie B', 'serie C', 'serie D', 'serie E', 'serie F', 'serie G'] +const allGroups = ['group A', 'group B', 'group C', 'group D', 'group E', 'group F', 'group G'] -const generateDataSet = size => { - const values = range(size).map(() => random(0, 500)) - values.sort() +export const generateLightDataSet = previousData => { + if (previousData !== undefined) return randomizeSwarmPlotData(previousData) - return values.map((value, id) => ({ - id, - value, - })) + return generateSwarmPlotData(allGroups.slice(0, 3), { min: 50, max: 80 }) } -export const generateLightDataSet = () => { - return ids.slice(0, 3).map(id => ({ - id, - data: generateDataSet(60 + Math.round(Math.random() * 40)), - })) -} +export const generateHeavyDataSet = previousData => { + if (previousData !== undefined) return randomizeSwarmPlotData(previousData) -export const generateHeavyDataSet = () => { - return ids.map(id => ({ - id, - data: generateDataSet(180 + Math.round(Math.random() * 100)), - })) + return generateSwarmPlotData(allGroups, { min: 60, max: 100 }) } diff --git a/website/src/data/components/swarmplot/mapper.js b/website/src/data/components/swarmplot/mapper.js index f4867fe86..a9cac4290 100644 --- a/website/src/data/components/swarmplot/mapper.js +++ b/website/src/data/components/swarmplot/mapper.js @@ -6,14 +6,11 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -import { settingsMapper, mapAxis, mapInheritedColor } from '../../../lib/settings' +import { settingsMapper, mapAxis } from '../../../lib/settings' export default settingsMapper({ - /* axisTop: mapAxis('top'), axisRight: mapAxis('right'), axisBottom: mapAxis('bottom'), axisLeft: mapAxis('left'), - borderColor: mapInheritedColor, - */ }) diff --git a/website/src/data/components/swarmplot/meta.yml b/website/src/data/components/swarmplot/meta.yml index 8b6874b20..76d0e9cac 100644 --- a/website/src/data/components/swarmplot/meta.yml +++ b/website/src/data/components/swarmplot/meta.yml @@ -9,10 +9,32 @@ SwarmPlot: tags: - svg - isomorphic - stories: [] + stories: + - label: Custom node rendering + link: swarmplot--custom-node-rendering + - label: Adding extra layers + link: swarmplot--extra-layers description: | - A swarm plot component which can also be used to make beeswarm plot - when using a single data serie. + A swarm plot component which can also be used to make a beeswarm plot + when using a single group. + + This chart can display 2 data dimensions, a categorical one: **groups**, + and a quantitative one: **values**. + + You can optionally add a third quantitative dimension if you enable + **dynamic node size**, please have a look at the `size` property + for further information. + + You can also enable a voronoi mesh to capture user's + interactions, using the `useMesh` property. + + This example uses 3 dimensions, the grouping is done by the `group` + property while the value is determined by the `price` property, + node size is dynamic and depends on the `volume` property. + + Under the hood, this chart uses [d3-force](https://github.com/d3/d3-force) + with a simulation involving collisions and x/y forces, the quality of + the simulation can be adjusted, the strength of the *value* force too. The responsive alternative of this component is `ResponsiveSwarmPlot`. @@ -20,12 +42,18 @@ SwarmPlotCanvas: package: '@nivo/swarmplot' tags: - canvas - stories: [] description: | A variation around the [SwarmPlot](self:/swarmplot) component. Well suited for large data sets as it does not impact DOM tree depth, however you'll lose the isomorphic ability and transitions. + You can optionally enable a voronoi mesh to capture user's + interactions, using the `useMesh` property. + + Even if the canvas implementation is faster, please note that + if you have a lot of nodes **calculating the underlying simulation + will involve a lot of computing and will affect performance**. + The responsive alternative of this component is `ResponsiveSwarmPlotCanvas`. diff --git a/website/src/data/components/swarmplot/props.js b/website/src/data/components/swarmplot/props.js index 4338db449..523478d68 100644 --- a/website/src/data/components/swarmplot/props.js +++ b/website/src/data/components/swarmplot/props.js @@ -9,8 +9,8 @@ import { SwarmPlotDefaultProps } from '@nivo/swarmplot' import { motionProperties, - defsProperties, getPropertiesGroupsControls, + axesProperties, } from '../../../lib/componentProperties' const defaults = SwarmPlotDefaultProps @@ -20,60 +20,112 @@ const props = [ key: 'data', help: 'Chart data.', description: ` - The Chart data is an array of datum which must conform to this structure: - - \`\`\` - Array<{ - // Identifier of the serie - id: string | number - data: { - // Identifier of the datum - id: string | number - value: number - } - }> - \`\`\` + This Chart's doesn't have a predefined structure, + you must use a schema which match \`groupBy\`, + \`identity\` and \`value\` properties. `, type: 'object[]', group: 'Base', required: true, }, { - key: 'width', - scopes: ['api'], - help: 'Chart width.', + key: 'groups', + group: 'Base', + type: 'string[]', + required: true, + help: 'Available groups.', + }, + { + key: 'groupBy', + group: 'Base', + type: 'string | Function', + required: false, + help: + 'Propety used to group nodes, must return a group which is available in the groups property.', + defaultValue: defaults.groupBy, + }, + { + key: 'identity', + group: 'Base', + type: 'string | Function', + required: false, + help: `Property used to retrieve the node's unique identifier.`, description: ` - not required if using responsive alternative - of the component \`\`. + This property will determine the identifier of a datum + amongst the whole data set, thus, it's really important + that it's unique. + + It is especially important to have proper identifier + when enabling animations, as it will be used to determine + if a node is a new one or should transition from previous + to next state. `, - type: 'number', - required: true, + defaultValue: defaults.identity, }, { - key: 'height', - scopes: ['api'], - help: 'Chart height.', + key: 'label', + group: 'Base', + type: 'string | Function', + required: false, + help: `Control node label.`, + defaultValue: defaults.label, + }, + { + key: 'value', + group: 'Base', + type: 'string | Function', + required: false, + help: `Property used to retrieve the node's value.`, + defaultValue: defaults.value, + }, + { + key: 'valueFormat', + group: 'Base', + type: 'string | Function', + required: false, + help: `Optional value formatter.`, + }, + { + key: 'size', + group: 'Base', + type: 'number | object | Function', + required: false, + help: `How to compute node size, static or dynamic.`, description: ` - not required if using responsive alternative - of the component \`\`. + If you provide a **number**, all nodes will have the same + **fixed size**. + + You can also use an object to define a varying size, + it must conform to the following interface: + + \`\`\` + { + key: string + values: [min: number, max: number] + sizes: [min: number, max: number] + } + \`\`\` + + Then the size of each node will **depend on the value + of \`key\` and \`sizes\`**. + + If you use a **custom function**, it will receive the current + node and must **return a number**. `, - type: 'number', - required: true, + defaultValue: defaults.size, }, { - key: 'layout', - scopes: '*', - help: `Chart layout.`, - type: 'string', + key: 'spacing', + help: 'Spacing between nodes.', + type: 'number', required: false, - defaultValue: defaults.layout, - controlType: 'radio', + defaultValue: defaults.spacing, + controlType: 'range', group: 'Base', controlOptions: { - choices: [ - { label: 'horizontal', value: 'horizontal' }, - { label: 'vertical', value: 'vertical' }, - ], + unit: 'px', + min: 0, + max: 20, }, }, { @@ -89,12 +141,16 @@ const props = [ simulation will try to **align the nodes with their corresponding values** on the value axis, resulting in a narrower chart. + + Please note that increasing this value will sometimes + require to **increase the quality of the simulation** + via the \`simulationIterations\` property. `, type: 'number', required: false, defaultValue: defaults.forceStrength, controlType: 'range', - group: 'Base', + group: 'Simulation', controlOptions: { step: 0.2, min: 0.2, @@ -112,24 +168,10 @@ const props = [ required: false, defaultValue: defaults.simulationIterations, controlType: 'range', - group: 'Base', + group: 'Simulation', controlOptions: { - min: 100, - max: 300, - }, - }, - { - key: 'gap', - help: 'Gap between each serie.', - type: 'number', - required: false, - defaultValue: defaults.gap, - controlType: 'range', - group: 'Base', - controlOptions: { - unit: 'px', - min: 0, - max: 100, + min: 60, + max: 260, }, }, { @@ -140,52 +182,76 @@ const props = [ defaultValue: 'Depends on device', type: `number`, controlType: 'range', - group: 'Base', + group: 'Layout', controlOptions: { min: 1, max: 2, }, }, { - key: 'nodeSize', - help: 'Size of the nodes.', + key: 'width', + scopes: ['api'], + group: 'Layout', + help: 'Chart width.', + description: ` + not required if using responsive alternative + of the component \`\`. + `, type: 'number', + required: true, + }, + { + key: 'height', + scopes: ['api'], + group: 'Layout', + help: 'Chart height.', + description: ` + not required if using responsive alternative + of the component \`\`. + `, + type: 'number', + required: true, + }, + { + key: 'margin', + help: 'Chart margin.', + type: 'object', required: false, - defaultValue: defaults.nodeSize, - controlType: 'range', - group: 'Nodes', + controlType: 'margin', + group: 'Layout', + }, + { + key: 'layout', + scopes: '*', + help: `Chart layout.`, + type: 'string', + required: false, + defaultValue: defaults.layout, + controlType: 'radio', + group: 'Layout', controlOptions: { - unit: 'px', - min: 2, - max: 20, + choices: [ + { label: 'horizontal', value: 'horizontal' }, + { label: 'vertical', value: 'vertical' }, + ], }, }, { - key: 'nodePadding', - help: 'Padding between nodes.', + key: 'gap', + help: 'Gap between each serie.', type: 'number', required: false, - defaultValue: defaults.nodePadding, + defaultValue: defaults.gap, controlType: 'range', - group: 'Nodes', + group: 'Layout', controlOptions: { unit: 'px', min: 0, - max: 20, + max: 100, }, }, - { - key: 'margin', - scopes: '*', - help: 'Chart margin.', - type: 'object', - required: false, - controlType: 'margin', - group: 'Base', - }, { key: 'colors', - scopes: '*', help: 'Defines how to compute node color.', description: ` The colors property is used to determine the **ordinal color scale** @@ -201,8 +267,8 @@ const props = [ Please have a look at [the dedicated guide](self:/guides/colors) for available schemes. - If you wish to use **color bound to the data** you pass to the chart, - you can also use this form: + If you wish to use **color already defined on the data** + you passed to the chart, you can also use this form: \`\`\` colors={{ datum: 'color' }} @@ -222,20 +288,101 @@ const props = [ controlType: 'ordinalColors', group: 'Style', }, + { + key: 'colorBy', + group: 'Style', + help: 'Property or accessor function to be used with colors.', + description: ` + When using a color scheme or an array of colors, + you'll generate a color scale, this scale will + receive a value which will be translated to a color. + + This property define the way we get this value, + it can be either a \`string\` or a custom function. + + Please have a look at [the colors guide](self:/guides/colors) + for further information. + `, + type: `Function | string`, + required: false, + defaultValue: defaults.colorBy, + controlType: 'choices', + group: 'Style', + controlOptions: { + choices: ['group', 'id'].map(key => ({ + label: key, + value: key, + })), + }, + }, { key: 'borderWidth', - scopes: '*', help: 'Control node border width.', - type: 'number', + type: 'number | Function', required: false, defaultValue: defaults.borderWidth, controlType: 'lineWidth', group: 'Style', }, + { + key: 'layers', + group: 'Customization', + help: 'Defines the order of layers and add custom layers.', + description: ` + Defines the order of layers, available layers are: + \`grid\`, \`axes\`, \`nodes\`, \`mesh\`. + + You can also use this to insert extra layers + to the chart, the extra layer must be a function. + + The layer function which will receive the chart's + context & computed data and must return a valid SVG element + for the \`SwarmPlot\` component. + + When using the canvas implementation, the function + will receive the canvas 2d context as first argument + and the chart's context and computed data as second. + + Please make sure to use \`context.save()\` and + \`context.restore()\` if you make some global + modifications to the 2d context inside this function + to avoid side effects. + + You can see a live example of custom layers + [here](storybook:/swarmplot--extra-layers). + `, + required: false, + type: 'Array', + defaultValue: defaults.layers, + }, + { + key: 'renderNode', + group: 'Customization', + help: 'Override default node rendering.', + description: ` + This property can be used to completely + customize the way nodes are rendered. + + when using the SVG implementation, you should + return a valid SVG node. + + When using canvas, the rendering function will + receive the canvas 2d context as first argument. + + Please make sure to use \`context.save()\` and + \`context.restore()\` if you make some global + modifications to the 2d context inside this function + to avoid side effects. + + You can see a live example of custom node rendering + [here](storybook:/swarmplot--custom-node-rendering). + `, + required: false, + type: 'Function', + }, /* { key: 'borderColor', - scopes: '*', help: 'Method to compute border color.', type: 'string | Function', required: false, @@ -247,10 +394,41 @@ const props = [ }, }, */ - ...defsProperties(['SwarmPlot']), + { + key: 'enableGridX', + group: 'Grid & Axes', + help: 'Enable/disable x grid.', + type: 'boolean', + required: false, + defaultValue: defaults.enableGridX, + controlType: 'switch', + }, + { + key: 'gridXValues', + group: 'Grid & Axes', + help: 'Specify values to use for vertical grid lines.', + type: 'Array', + required: false, + }, + { + key: 'enableGridY', + group: 'Grid & Axes', + help: 'Enable/disable y grid.', + type: 'boolean', + required: false, + defaultValue: defaults.enableGridY, + controlType: 'switch', + }, + { + key: 'gridYValues', + group: 'Grid & Axes', + help: 'Specify values to use for horizontal grid lines.', + type: 'Array', + required: false, + }, + ...axesProperties, { key: 'isInteractive', - scopes: ['TreeMap', 'TreeMapHTML', 'TreeMapCanvas'], help: 'Enable/disable interactivity.', type: 'boolean', required: false, @@ -258,13 +436,63 @@ const props = [ controlType: 'switch', group: 'Interactivity', }, + { + key: 'useMesh', + help: 'Use a mesh to detect mouse interactions.', + type: 'boolean', + required: false, + defaultValue: defaults.useMesh, + controlType: 'switch', + group: 'Interactivity', + }, + { + key: 'debugMesh', + help: 'Display mesh used to detect mouse interactions (voronoi cells).', + type: 'boolean', + required: false, + defaultValue: defaults.debugMesh, + controlType: 'switch', + group: 'Interactivity', + }, + { + key: 'onMouseEnter', + group: 'Interactivity', + help: 'onMouseEnter handler.', + type: '(node, event) => void', + required: false, + }, + { + key: 'onMouseMove', + group: 'Interactivity', + help: 'onMouseMove handler.', + type: '(node, event) => void', + required: false, + }, + { + key: 'onMouseLeave', + group: 'Interactivity', + help: 'onMouseLeave handler.', + type: '(node, event) => void', + required: false, + }, { key: 'onClick', group: 'Interactivity', - scopes: ['TreeMap', 'TreeMapHTML', 'TreeMapCanvas'], - help: 'onClick handler, it receives clicked node data and style plus mouse event.', + help: 'onClick handler.', + type: '(node, event) => void', + required: false, + }, + { + key: 'tooltip', + group: 'Interactivity', type: 'Function', required: false, + help: 'Custom tooltip component.', + description: ` + A function allowing complete tooltip customisation, + it must return a valid HTML + element and will receive the node's data. + `, }, ...motionProperties(['SwarmPlot'], defaults), ] diff --git a/website/src/data/components/treemap/generator.js b/website/src/data/components/treemap/generator.js index deb29d303..f475a904f 100644 --- a/website/src/data/components/treemap/generator.js +++ b/website/src/data/components/treemap/generator.js @@ -16,13 +16,13 @@ const HEAVY_NODE_COUNT = 600 export const generateHeavyDataSet = () => { const children = range(HEAVY_NODE_COUNT).map(i => ({ - id: `node.${i}`, + name: `node.${i}`, value: random(10, 100000), })) return { root: { - id: 'root', + name: 'root', children, }, nodeCount: HEAVY_NODE_COUNT, diff --git a/website/src/pages/bar/api.js b/website/src/pages/bar/api.js index 66f0c19ca..47a801e64 100644 --- a/website/src/pages/bar/api.js +++ b/website/src/pages/bar/api.js @@ -42,7 +42,7 @@ const BarApi = () => { indexBy: 'country', colors: { scheme: 'nivo' }, - colorIdentity: 'id', + colorBy: 'id', borderRadius: 0, borderWidth: 0, borderColor: { diff --git a/website/src/pages/bar/canvas.js b/website/src/pages/bar/canvas.js index abbf908f5..d3454b196 100644 --- a/website/src/pages/bar/canvas.js +++ b/website/src/pages/bar/canvas.js @@ -41,7 +41,7 @@ const initialProperties = { reverse: false, colors: { scheme: 'red_blue' }, - colorIdentity: 'id', + colorBy: 'id', borderWidth: 0, borderColor: { type: 'inherit:darker', @@ -129,6 +129,7 @@ const BarCanvas = () => { logAction({ type: 'click', label: `[bar] ${node.id} - ${node.indexValue}: ${node.value}`, + color: node.color, data: node, }) } diff --git a/website/src/pages/bar/index.js b/website/src/pages/bar/index.js index 1beac888f..6e24f2058 100644 --- a/website/src/pages/bar/index.js +++ b/website/src/pages/bar/index.js @@ -39,7 +39,7 @@ const initialProperties = { reverse: false, colors: { scheme: 'nivo' }, - colorIdentity: 'id', + colorBy: 'id', defs: [ patternDotsDef('dots', { background: 'inherit', @@ -178,6 +178,7 @@ const Bar = () => { logAction({ type: 'click', label: `[bar] ${node.id} - ${node.indexValue}: ${node.value}`, + color: node.color, data: node, }) } diff --git a/website/src/pages/bubble/canvas.js b/website/src/pages/bubble/canvas.js index 428b8260a..493046265 100644 --- a/website/src/pages/bubble/canvas.js +++ b/website/src/pages/bubble/canvas.js @@ -42,7 +42,7 @@ const initialProperties = { value: 'value', colors: { scheme: 'yellow_orange_red' }, - colorIdentity: 'name', + colorBy: 'name', padding: 1, leavesOnly: true, @@ -95,6 +95,7 @@ const BubbleCanvas = () => { logAction({ type: 'click', label: `${node.id}: ${node.value}`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/bubble/html.js b/website/src/pages/bubble/html.js index 86ec06852..7eb624fee 100644 --- a/website/src/pages/bubble/html.js +++ b/website/src/pages/bubble/html.js @@ -24,7 +24,7 @@ const initialProperties = { identity: 'name', value: 'loc', colors: { scheme: 'paired' }, - colorIdentity: 'depth', + colorBy: 'depth', padding: 1, leavesOnly: false, @@ -76,6 +76,7 @@ const BubbleHtml = () => { logAction({ type: 'click', label: `${node.id}: ${node.value}`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/bubble/index.js b/website/src/pages/bubble/index.js index 0aa9fbc46..d3607dc4a 100644 --- a/website/src/pages/bubble/index.js +++ b/website/src/pages/bubble/index.js @@ -25,7 +25,7 @@ const initialProperties = { identity: 'name', value: 'loc', colors: { scheme: 'nivo' }, - colorIdentity: 'depth', + colorBy: 'depth', padding: 6, leavesOnly: false, @@ -87,6 +87,7 @@ const Bubble = () => { logAction({ type: 'click', label: `${node.id}: ${node.value}`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/bullet/index.js b/website/src/pages/bullet/index.js index c3ba809ec..3385a3506 100644 --- a/website/src/pages/bullet/index.js +++ b/website/src/pages/bullet/index.js @@ -71,6 +71,7 @@ const Bullet = () => { logAction({ type: 'click', label: `[range] ${range.id}: [${range.v0}, ${range.v1}]`, + color: range.color, data: range, }) }} @@ -78,6 +79,7 @@ const Bullet = () => { logAction({ type: 'click', label: `[measure] ${measure.id}: [${measure.v0}, ${measure.v1}]`, + color: measure.color, data: measure, }) }} @@ -85,6 +87,7 @@ const Bullet = () => { logAction({ type: 'click', label: `[marker] ${marker.id}: ${marker.value}`, + color: marker.color, data: marker, }) }} diff --git a/website/src/pages/calendar/canvas.js b/website/src/pages/calendar/canvas.js index 3a2258df4..e4ef198c8 100644 --- a/website/src/pages/calendar/canvas.js +++ b/website/src/pages/calendar/canvas.js @@ -102,6 +102,7 @@ const CalendarCanvas = () => { logAction({ type: 'click', label: `[day] ${day.day}: ${day.value}`, + color: day.color, data: day, }) }} diff --git a/website/src/pages/calendar/index.js b/website/src/pages/calendar/index.js index 143391d34..f2c3508e3 100644 --- a/website/src/pages/calendar/index.js +++ b/website/src/pages/calendar/index.js @@ -99,6 +99,7 @@ const Calendar = () => { logAction({ type: 'click', label: `[day] ${day.day}: ${day.value}`, + color: day.color, data: day, }) }} diff --git a/website/src/pages/choropleth/canvas.js b/website/src/pages/choropleth/canvas.js index 3bc082cfe..abb7133f2 100644 --- a/website/src/pages/choropleth/canvas.js +++ b/website/src/pages/choropleth/canvas.js @@ -101,6 +101,7 @@ const ChoroplethCanvas = () => { label: `${feature.label}: ${feature.formattedValue} (${ feature.id })`, + color: feature.color, data: { label: feature.label, value: feature.value, diff --git a/website/src/pages/choropleth/index.js b/website/src/pages/choropleth/index.js index 42991b71c..3562f7fa4 100644 --- a/website/src/pages/choropleth/index.js +++ b/website/src/pages/choropleth/index.js @@ -116,6 +116,7 @@ const Choropleth = () => { label: `${feature.label}: ${feature.formattedValue} (${ feature.id })`, + color: feature.color, data: omit(feature, 'geometry'), }) }} diff --git a/website/src/pages/heatmap/canvas.js b/website/src/pages/heatmap/canvas.js index e6fb81d54..6b3284485 100644 --- a/website/src/pages/heatmap/canvas.js +++ b/website/src/pages/heatmap/canvas.js @@ -135,6 +135,7 @@ const HeatMapCanvas = () => { logAction({ type: 'click', label: `[cell] ${cell.yKey}.${cell.xKey}: ${cell.value}`, + color: cell.color, data: cell, }) }} diff --git a/website/src/pages/heatmap/index.js b/website/src/pages/heatmap/index.js index 0948b020c..e3ca8f4b6 100644 --- a/website/src/pages/heatmap/index.js +++ b/website/src/pages/heatmap/index.js @@ -144,6 +144,7 @@ const HeatMap = () => { logAction({ type: 'click', label: `[cell] ${cell.yKey}.${cell.xKey}: ${cell.value}`, + color: cell.color, data: cell, }) }} diff --git a/website/src/pages/scatterplot/index.js b/website/src/pages/scatterplot/index.js index 522783193..35f73fe5c 100644 --- a/website/src/pages/scatterplot/index.js +++ b/website/src/pages/scatterplot/index.js @@ -87,8 +87,8 @@ const initialProperties = { motionDamping: 15, isInteractive: true, - useMesh: false, - debugMesh: false, + useMesh: true, + debugMesh: true, 'custom tooltip example': false, tooltip: null, diff --git a/website/src/pages/swarmplot/canvas.js b/website/src/pages/swarmplot/canvas.js index 86205dbd1..6a76c792d 100644 --- a/website/src/pages/swarmplot/canvas.js +++ b/website/src/pages/swarmplot/canvas.js @@ -14,99 +14,90 @@ import mapper from '../../data/components/scatterplot/mapper' import { groupsByScope } from '../../data/components/swarmplot/props' import { generateHeavyDataSet } from '../../data/components/swarmplot/generator' -const initialProperties = { - margin: { - top: 60, - right: 140, - bottom: 70, - left: 90, - }, - - xScale: { +const initialProperties = Object.freeze({ + pixelRatio: + typeof window !== 'undefined' && window.devicePixelRatio ? window.devicePixelRatio : 1, + groupBy: 'group', + identity: 'id', + value: 'price', + valueFormat: '$.2f', + valueScale: { type: 'linear', min: 0, - max: 'auto', + max: 500, }, - yScale: { - type: 'linear', - min: 0, - max: 'auto', + size: { + key: 'volume', + values: [4, 20], + sizes: [4, 12], }, + spacing: 1, + layout: SwarmPlotCanvasDefaultProps.layout, + gap: SwarmPlotCanvasDefaultProps.gap, - pixelRatio: - typeof window !== 'undefined' && window.devicePixelRatio ? window.devicePixelRatio : 1, - - colors: 'nivo', - colorBy: 'serie.id', - - symbolSize: 4, - symbolShape: 'circle', + forceStrength: 1, + simulationIterations: 60, + colors: { scheme: 'paired' }, + colorBy: 'group', + borderWidth: 0, + borderColor: { + from: 'color', + modifiers: [['darker', 0.6]], + }, + margin: { + top: 80, + right: 100, + bottom: 80, + left: 100, + }, + enableGridX: true, + enableGridY: true, axisTop: { - enable: false, + enable: true, orient: 'top', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', - legendOffset: 36, + legend: 'group if vertical, price if horizontal', + legendPosition: 'middle', + legendOffset: -46, }, axisRight: { - enable: false, + enable: true, orient: 'right', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', - legendOffset: 0, + legend: 'price if vertical, group if horizontal', + legendPosition: 'middle', + legendOffset: 76, }, axisBottom: { enable: true, orient: 'bottom', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: 'weight', + legend: 'group if vertical, price if horizontal', legendPosition: 'middle', - legendOffset: 36, - format: d => `${d} kg`, + legendOffset: 46, }, axisLeft: { enable: true, orient: 'left', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: 'size', + legend: 'price if vertical, group if horizontal', legendPosition: 'middle', - legendOffset: -40, - format: d => `${d} cm`, + legendOffset: -76, }, - enableGridX: true, - enableGridY: true, - - animate: true, - motionStiffness: 90, - motionDamping: 15, - isInteractive: true, useMesh: true, debugMesh: false, - - legends: [ - { - anchor: 'bottom-right', - direction: 'column', - translateX: 130, - itemWidth: 100, - itemHeight: 12, - itemsSpacing: 5, - symbolSize: 12, - symbolShape: 'circle', - }, - ], -} +}) const ScatterPlotCanvas = () => { return ( @@ -120,20 +111,28 @@ const ScatterPlotCanvas = () => { initialProperties={initialProperties} defaultProperties={SwarmPlotCanvasDefaultProps} propertiesMapper={mapper} + codePropertiesMapper={(properties, data) => ({ + groups: data.groups, + ...properties, + })} generateData={generateHeavyDataSet} + getTabData={data => data.data} + getDataSize={data => data.data.length} > {(properties, data, theme, logAction) => { return ( { logAction({ type: 'click', - label: `[point] serie: ${node.serie.id}, x: ${node.x}, y: ${ - node.y + label: `[node] id: ${node.id}, group: ${node.group}, value: ${ + node.value }`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/swarmplot/index.js b/website/src/pages/swarmplot/index.js index 370a3cf97..5fcbd8b55 100644 --- a/website/src/pages/swarmplot/index.js +++ b/website/src/pages/swarmplot/index.js @@ -14,98 +14,92 @@ import mapper from '../../data/components/swarmplot/mapper' import { groupsByScope } from '../../data/components/swarmplot/props' import { generateLightDataSet } from '../../data/components/swarmplot/generator' -const initialProperties = { - layout: 'horizontal', - forceStrength: 4, - simulationIterations: 160, - gap: SwarmPlotDefaultProps.gap, - colors: SwarmPlotDefaultProps.colors, - nodeSize: 14, - nodePadding: 4, - borderWidth: 1, - borderColor: { - type: 'inherit:darker', - gamma: 0.4, - }, - scale: { +const initialProperties = Object.freeze({ + groupBy: 'group', + identity: 'id', + value: 'price', + valueFormat: '$.2f', + valueScale: { type: 'linear', min: 0, max: 500, }, + size: { + key: 'volume', + values: [4, 20], + sizes: [6, 20], + }, + spacing: 2, + layout: SwarmPlotDefaultProps.layout, + gap: SwarmPlotDefaultProps.gap, + + forceStrength: 4, + simulationIterations: 100, + + colors: SwarmPlotDefaultProps.colors, + colorBy: 'group', + borderWidth: 0, + borderColor: { + from: 'color', + modifiers: [['darker', 0.6], ['opacity', 0.5]], + }, margin: { top: 80, - right: 80, + right: 100, bottom: 80, - left: 80, + left: 100, }, + enableGridX: true, + enableGridY: true, axisTop: { enable: true, orient: 'top', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', + legend: 'group if vertical, price if horizontal', legendPosition: 'middle', - legendOffset: 36, + legendOffset: -46, }, axisRight: { - enable: false, + enable: true, orient: 'right', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', + legend: 'price if vertical, group if horizontal', legendPosition: 'middle', - legendOffset: 0, + legendOffset: 76, }, axisBottom: { enable: true, orient: 'bottom', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', + legend: 'group if vertical, price if horizontal', legendPosition: 'middle', legendOffset: 46, }, axisLeft: { enable: true, orient: 'left', - tickSize: 5, + tickSize: 10, tickPadding: 5, tickRotation: 0, - legend: '', + legend: 'price if vertical, group if horizontal', legendPosition: 'middle', - legendOffset: -60, + legendOffset: -76, }, - legends: [ - { - anchor: 'bottom-right', - direction: 'column', - translateX: 100, - itemWidth: 80, - itemHeight: 20, - itemTextColor: '#999', - symbolSize: 12, - symbolShape: 'circle', - onClick: d => { - alert(JSON.stringify(d, null, ' ')) - }, - effects: [ - { - on: 'hover', - style: { - itemTextColor: '#000', - }, - }, - ], - }, - ], + isInteractive: true, + useMesh: false, + debugMesh: false, + animate: true, - motionStiffness: 150, - motionDamping: 18, -} + motionStiffness: 50, + motionDamping: 10, +}) const ScatterPlot = () => { return ( @@ -119,20 +113,28 @@ const ScatterPlot = () => { initialProperties={initialProperties} defaultProperties={SwarmPlotDefaultProps} propertiesMapper={mapper} + codePropertiesMapper={(properties, data) => ({ + groups: data.groups, + ...properties, + })} generateData={generateLightDataSet} + getTabData={data => data.data} + getDataSize={data => data.data.length} > {(properties, data, theme, logAction) => { return ( { logAction({ type: 'click', - label: `[point] serie: ${node.serie.id}, x: ${node.x}, y: ${ - node.y + label: `[node] id: ${node.id}, group: ${node.group}, value: ${ + node.value }`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/treemap/canvas.js b/website/src/pages/treemap/canvas.js index 7e93c4e42..b4434cbf0 100644 --- a/website/src/pages/treemap/canvas.js +++ b/website/src/pages/treemap/canvas.js @@ -16,8 +16,10 @@ import { groupsByScope } from '../../data/components/treemap/props' import { generateHeavyDataSet } from '../../data/components/treemap/generator' const initialProperties = { + identity: 'name', + value: 'value', tile: 'squarify', - leavesOnly: false, + leavesOnly: true, innerPadding: 2, outerPadding: 8, @@ -32,7 +34,7 @@ const initialProperties = { typeof window !== 'undefined' && window.devicePixelRatio ? window.devicePixelRatio : 1, enableLabel: true, - label: 'loc', + label: 'value', labelFormat: '.0s', labelSkipSize: 18, labelTextColor: { @@ -41,7 +43,8 @@ const initialProperties = { }, orientLabel: true, - colors: { scheme: 'nivo' }, + colors: { scheme: 'red_blue' }, + colorBy: 'name', borderWidth: 0, borderColor: { type: 'inherit:darker', @@ -75,7 +78,8 @@ const TreeMapCanvas = () => { onClick={node => { logAction({ type: 'click', - label: `[cell] ${node.id}: ${node.value}`, + label: `[node] ${node.id}: ${node.value}`, + color: node.color, data: omit(node, ['parent', 'children']), }) }} diff --git a/website/src/pages/treemap/html.js b/website/src/pages/treemap/html.js index c7d5c6cc4..6f92b296b 100644 --- a/website/src/pages/treemap/html.js +++ b/website/src/pages/treemap/html.js @@ -41,6 +41,7 @@ const initialProperties = { orientLabel: true, colors: { scheme: 'red_yellow_blue' }, + colorBy: 'depth', borderWidth: 0, borderColor: { type: 'inherit:darker', @@ -78,7 +79,8 @@ const TreeMapHtml = () => { onClick={node => { logAction({ type: 'click', - label: `[cell] ${node.id}: ${node.value}`, + label: `[node] ${node.id}: ${node.value}`, + color: node.color, data: omit(node, ['parent', 'children']), }) }} diff --git a/website/src/pages/treemap/index.js b/website/src/pages/treemap/index.js index dc5b95316..c05ae9b21 100644 --- a/website/src/pages/treemap/index.js +++ b/website/src/pages/treemap/index.js @@ -41,6 +41,7 @@ const initialProperties = { orientLabel: true, colors: { scheme: 'nivo' }, + colorBy: 'depth', borderWidth: 0, borderColor: { type: 'inherit:darker', @@ -78,7 +79,8 @@ const TreeMap = () => { onClick={node => { logAction({ type: 'click', - label: `[cell] ${node.id}: ${node.value}`, + label: `[node] ${node.id}: ${node.value}`, + color: node.color, data: omit(node, ['parent', 'children']), }) }} diff --git a/website/src/pages/waffle/canvas.js b/website/src/pages/waffle/canvas.js index 7ba633e6c..cf40514c8 100644 --- a/website/src/pages/waffle/canvas.js +++ b/website/src/pages/waffle/canvas.js @@ -156,6 +156,7 @@ const WaffleCanvas = () => { logAction({ type: 'click', label: `[cell] ${label}`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/waffle/html.js b/website/src/pages/waffle/html.js index 4bcad77c4..b061cf0e2 100644 --- a/website/src/pages/waffle/html.js +++ b/website/src/pages/waffle/html.js @@ -105,6 +105,7 @@ const WaffleHtml = () => { logAction({ type: 'click', label: `[cell] ${label}`, + color: node.color, data: node, }) }} diff --git a/website/src/pages/waffle/index.js b/website/src/pages/waffle/index.js index cdfb28fdf..3fd0dfd25 100644 --- a/website/src/pages/waffle/index.js +++ b/website/src/pages/waffle/index.js @@ -134,6 +134,7 @@ const Waffle = () => { logAction({ type: 'click', label: `[cell] ${label}`, + color: node.color, data: node, }) }} diff --git a/website/src/theming/nivo.js b/website/src/theming/nivo.js index d17ff2043..d5a686b36 100644 --- a/website/src/theming/nivo.js +++ b/website/src/theming/nivo.js @@ -28,8 +28,8 @@ export default { }, legend: { text: { - fill: '#889eae', - fontSize: 12, + fill: '#6f6f6f', + fontSize: 13, fontWeight: 500, }, }, @@ -71,8 +71,8 @@ export default { }, legend: { text: { - fill: '#8d9cab', - fontSize: 12, + fill: '#ccd7e2', + fontSize: 13, fontWeight: 500, }, }, diff --git a/yarn.lock b/yarn.lock index f5ec96232..5bbc81a00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -943,13 +943,6 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.3.1": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.3.tgz#79888e452034223ad9609187a0ad1fe0d2ad4bdc" - integrity sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA== - dependencies: - regenerator-runtime "^0.13.2" - "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" @@ -1974,24 +1967,6 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@nivo/babel-preset@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@nivo/babel-preset/-/babel-preset-0.54.0.tgz#d2a5abb9506454bc84b8616561663b86a1e0851c" - integrity sha512-iFFqN5bRdttfcfd8BGJJ4NY7hTpoqueapcZsKAKM0y2YY5fPG2CdBUqR9i7wM+uk5AtmX2OCF2hxgkI54hgFqg== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.4.0" - "@babel/preset-env" "^7.4.1" - babel-plugin-lodash "^3.3.4" - -"@nivo/generators@0.54.0": - version "0.54.0" - resolved "https://registry.yarnpkg.com/@nivo/generators/-/generators-0.54.0.tgz#6f4b6e6fdba3e90823b1ffc815952dbf0333343c" - integrity sha512-kK3t7JDguJVbzLq1N7uVOUJODLNw3AQcmU+lDKN3sps/7WXBfW9SNWKp4GIkNaQ42iwZR85/rUGofVjtYqQeEg== - dependencies: - d3-time "^1.0.10" - d3-time-format "^2.1.3" - lodash "^4.17.4" - "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" @@ -14822,13 +14797,6 @@ react-side-effect@^1.1.0: exenv "^1.2.1" shallowequal "^1.0.1" -react-spring@^8.0.19: - version "8.0.19" - resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-8.0.19.tgz#62f4f396b4b73fa402838200a1c80374338cb12e" - integrity sha512-DjrwjXqqVEitj6e6GqdW5dUp1BoVyeFQhEcXvPfoQxwyIVSJ9smNt8CNjSvoQqRujVllE7XKaJRWSZO/ewd1/A== - dependencies: - "@babel/runtime" "^7.3.1" - react-syntax-highlighter@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz#59103ff17a828a27ed7c8f035ae2558f09b6b78c"