From 69246703c3cebe89072a2e025f68336254136512 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sat, 8 Aug 2020 09:06:29 +0100 Subject: [PATCH] First experiment with vega --- package.json | 3 +- src/components/DistBuilder.re | 46 +-- .../DistributionPlot/PercentilesChart.js | 49 +++ .../DistributionPlot/PercentilesChart.re | 30 ++ .../charts/DistributionPlot/Thing.re | 11 + .../DistributionPlot/spec-percentiles.json | 117 +++++++ .../charts/DistributionPlot/thingy.js | 11 + src/components/charts/Victory.re | 266 +++++++-------- yarn.lock | 305 +----------------- 9 files changed, 366 insertions(+), 472 deletions(-) create mode 100644 src/components/charts/DistributionPlot/PercentilesChart.js create mode 100644 src/components/charts/DistributionPlot/PercentilesChart.re create mode 100644 src/components/charts/DistributionPlot/Thing.re create mode 100644 src/components/charts/DistributionPlot/spec-percentiles.json create mode 100644 src/components/charts/DistributionPlot/thingy.js diff --git a/package.json b/package.json index 98530c6b..f466582c 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,8 @@ "reason-react": ">=0.7.0", "reschema": "1.3.0", "tailwindcss": "1.2.0", - "victory": "^30.3.1" + "vega": "5.11.1", + "vega-embed": "6.6.0" }, "devDependencies": { "@glennsl/bs-jest": "^0.5.1", diff --git a/src/components/DistBuilder.re b/src/components/DistBuilder.re index c3c51944..beebae51 100644 --- a/src/components/DistBuilder.re +++ b/src/components/DistBuilder.re @@ -189,9 +189,13 @@ module DemoDist = { Ok(`DistPlus(distPlus3)), ) => <> - - - + | (Error(r), _, _) => r |> R.ste | _ => "Failure " |> R.ste @@ -217,7 +221,7 @@ let make = () => { ~onSubmit=({state}) => {None}, ~initialState={ //guesstimatorString: "mm(normal(-10, 2), uniform(18, 25), lognormal({mean: 10, stdev: 8}), triangular(31,40,50))", - guesstimatorString: "mm(1, 2, 3, normal(2, 1))", // , triangular(30, 40, 60) + guesstimatorString: "foo(t) = mm(normal(5,t));foo", // , triangular(30, 40, 60) domainType: "Complete", xPoint: "50.0", xPoint2: "60.0", @@ -344,40 +348,6 @@ let make = () => { };
- Victory.( - - - - - )
demoDist
diff --git a/src/components/charts/DistributionPlot/PercentilesChart.js b/src/components/charts/DistributionPlot/PercentilesChart.js new file mode 100644 index 00000000..96b850f8 --- /dev/null +++ b/src/components/charts/DistributionPlot/PercentilesChart.js @@ -0,0 +1,49 @@ +import * as _ from 'lodash'; +import React from 'react'; +import * as vega from 'vega'; + +import spec from './spec-percentiles'; + +export class PercentilesChart extends React.PureComponent { + + constructor(props) { + super(props); + this.containerRef = React.createRef(); + this.view = null; + + this.spec = _.cloneDeep(spec); + this.spec.data[0].values = this.props.data; + } + + componentDidMount() { + this.view = new vega.View(vega.parse(this.spec), { + renderer: 'canvas', + container: this.containerRef.current, + hover: true + }); + this.view.addEventListener('mouseover', function (name, value) { + console.log("Got event back", name, value) + }); + return this.view.runAsync(); + } + + componentWillUnmount() { + if (this.view) { + this.view.finalize(); + } + } + + // https://gist.github.com/simonw/7e4b21d0f3cc1d17eaa314fb3f904843 + componentDidUpdate() { + console.log("Update", this.props); + var changeset = vega.changeset().remove(() => true).insert(this.props.data); + this.view.change("table", changeset).run() + } + + + render() { + return React.createElement("div", { + ref: this.containerRef, + }); + } +} \ No newline at end of file diff --git a/src/components/charts/DistributionPlot/PercentilesChart.re b/src/components/charts/DistributionPlot/PercentilesChart.re new file mode 100644 index 00000000..221198ff --- /dev/null +++ b/src/components/charts/DistributionPlot/PercentilesChart.re @@ -0,0 +1,30 @@ +[@bs.module "./PercentilesChart.js"] +external percentilesChart: ReasonReact.reactClass = "PercentilesChart"; + +module Internal = { + [@react.component] + let make = (~data, ~children=ReasonReact.null) => + ReasonReact.wrapJsForReason( + ~reactClass=percentilesChart, + ~props={"data": data}, + children, + ) + |> ReasonReact.element; +}; + +[@react.component] +let make = + (~dists: array((float, DistTypes.distPlus)), ~children=ReasonReact.null) => { + let data = + dists + |> E.A.fmap(((x, r)) => { + { + "x": x, + "p5": r |> DistPlus.T.Integral.yToX(0.05), + "p50": r |> DistPlus.T.Integral.yToX(0.5), + "p95": r |> DistPlus.T.Integral.yToX(0.95), + } + }); + Js.log3("Data", dists, data); + ; +}; diff --git a/src/components/charts/DistributionPlot/Thing.re b/src/components/charts/DistributionPlot/Thing.re new file mode 100644 index 00000000..410b875e --- /dev/null +++ b/src/components/charts/DistributionPlot/Thing.re @@ -0,0 +1,11 @@ + + [@bs.module "./thingy.js"] + external reactClass : ReasonReact.reactClass = "Input"; + + [@react.component] + let make = (~data=?, ~children=ReasonReact.null) => + ReasonReact.wrapJsForReason( + ~reactClass, + ~props={"data": Js.Undefined.fromOption(data)}, + children, + )|> ReasonReact.element; \ No newline at end of file diff --git a/src/components/charts/DistributionPlot/spec-percentiles.json b/src/components/charts/DistributionPlot/spec-percentiles.json new file mode 100644 index 00000000..ca397db3 --- /dev/null +++ b/src/components/charts/DistributionPlot/spec-percentiles.json @@ -0,0 +1,117 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "width": 900, + "height": 200, + "padding": 5, + "data": [ + { + "name": "facet", + "values": [ + { + "x": 1, + "p5": 2, + "p95": 3, + "p50": 2.5 + }, + { "x": 2,"p5": 3, "p95": 5, "p50": 4 }, + { + + "x":3, + "p5": 2, + "p95": 8, + "p50": 5 + } + ], + "format": { "type": "json", "parse": { "timestamp": "date" } } + }, + { + "name": "table", + "source": "facet", + "transform": [ + { + "type": "aggregate", + "groupby": ["x"], + "ops": ["mean", "mean", "mean"], + "fields": ["p5", "p95", "p50"], + "as": ["p5", "p95", "p50"] + } + ] + } + ], + "scales": [ + { + "name": "xscale", + "type": "linear", + "nice": true, + "domain": { "data": "facet", "field": "x"}, + "range": "width" + }, + { + "name": "yscale", + "type": "linear", + "range": "height", + "nice": true, + "zero": true, + "domain": { "data": "facet", "field": "p95" } + } + ], + "axes": [ + { + "orient": "bottom", + "scale": "xscale", + "grid": false, + "title": "X Value", + "encode": { + "grid": { "enter": { "stroke": { "value": "#ccc" } } }, + "ticks": { "enter": { "stroke": { "value": "#ccc" } } } + } + }, + { + "orient": "left", + "scale": "yscale", + "title": "Values and Percentiles", + "grid": false, + "domain": false, + "tickSize": 2, + "encode": { + "grid": { "enter": { "stroke": { "value": "#ccc" } } }, + "ticks": { "enter": { "stroke": { "value": "#ccc" } } } + } + } + ], + "marks": [ + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#C9D6E5" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p5" }, + "y2": { "scale": "yscale", "field": "p95" }, + "opacity": { "value": 0.75 } + }, + "hover": { "opacity": { "value": 0.5 } } + } + }, + { + "type": "line", + "from": { "data": "table" }, + "encode": { + "update": { + "interpolate": { "value": "monotone" }, + "stroke": { "value": "#4C78A8" }, + "strokeWidth": { "value": 2 }, + "opacity": { "value": 0.8 } + }, + "hover": { "opacity": { "value": 0.5 } }, + "enter": { + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p50" } + } + } + } + ] + } + \ No newline at end of file diff --git a/src/components/charts/DistributionPlot/thingy.js b/src/components/charts/DistributionPlot/thingy.js new file mode 100644 index 00000000..2aef7f10 --- /dev/null +++ b/src/components/charts/DistributionPlot/thingy.js @@ -0,0 +1,11 @@ +import React from "react"; + +export class Input extends React.Component { + constructor(props) { + super(props); + } + + render() { + return ( < div > < /div> ) + } + } \ No newline at end of file diff --git a/src/components/charts/Victory.re b/src/components/charts/Victory.re index b41de05c..20a92f8d 100644 --- a/src/components/charts/Victory.re +++ b/src/components/charts/Victory.re @@ -1,144 +1,144 @@ -type victoryData = { - . - "x": int, - "y": int, -}; +// type victoryData = { +// . +// "x": int, +// "y": int, +// }; -module VictoryTheme = { - type t; - [@bs.module "victory-core/es/victory-theme/material"] [@bs.val] - external material : t = "default"; - [@bs.module "victory-core/es/victory-theme/grayscale"] [@bs.val] - external grayscale : t = "default"; -}; +// module VictoryTheme = { +// type t; +// [@bs.module "victory-core/es/victory-theme/material"] [@bs.val] +// external material : t = "default"; +// [@bs.module "victory-core/es/victory-theme/grayscale"] [@bs.val] +// external grayscale : t = "default"; +// }; -module VictoryBar = { - [@bs.module "victory"] - external victoryBar : ReasonReact.reactClass = "VictoryBar"; - let make = (~data=?, children) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryBar, - ~props={"data": Js.Undefined.fromOption(data)}, - children, - ); -}; +// module VictoryBar = { +// [@bs.module "victory"] +// external victoryBar : ReasonReact.reactClass = "VictoryBar"; +// let make = (~data=?, children) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryBar, +// ~props={"data": Js.Undefined.fromOption(data)}, +// children, +// ); +// }; -module VictoryStack = { - [@bs.module "victory"] - external victoryStack : ReasonReact.reactClass = "VictoryStack"; - let make = (~colorScale=?, children) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryStack, - ~props={"colorScale": Js.Undefined.fromOption(colorScale)}, - children, - ); -}; +// module VictoryStack = { +// [@bs.module "victory"] +// external victoryStack : ReasonReact.reactClass = "VictoryStack"; +// let make = (~colorScale=?, children) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryStack, +// ~props={"colorScale": Js.Undefined.fromOption(colorScale)}, +// children, +// ); +// }; -module VictoryChart = { - [@bs.module "victory"] - external victoryChart : ReasonReact.reactClass = "VictoryChart"; - [@react.component] - let make = - ( - ~domainPadding=?, - ~theme: option(VictoryTheme.t)=?, - ~scale=?, - ~maxDomain=?, - ~minDomain=?, - ~padding=?, - ~height=?, - ~width=?, - ~children=ReasonReact.null - ) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryChart, - ~props={ - "domainPadding": Js.Undefined.fromOption(domainPadding), - "theme": Js.Undefined.fromOption(theme), - "scale": Js.Undefined.fromOption(scale), - "maxDomain": Js.Undefined.fromOption(maxDomain), - "minDomain": Js.Undefined.fromOption(minDomain), - "padding": Js.Undefined.fromOption(padding), - "height": Js.Undefined.fromOption(height), - "width": Js.Undefined.fromOption(width), - }, - children, - ) |> ReasonReact.element -}; +// module VictoryChart = { +// [@bs.module "victory"] +// external victoryChart : ReasonReact.reactClass = "VictoryChart"; +// [@react.component] +// let make = +// ( +// ~domainPadding=?, +// ~theme: option(VictoryTheme.t)=?, +// ~scale=?, +// ~maxDomain=?, +// ~minDomain=?, +// ~padding=?, +// ~height=?, +// ~width=?, +// ~children=ReasonReact.null +// ) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryChart, +// ~props={ +// "domainPadding": Js.Undefined.fromOption(domainPadding), +// "theme": Js.Undefined.fromOption(theme), +// "scale": Js.Undefined.fromOption(scale), +// "maxDomain": Js.Undefined.fromOption(maxDomain), +// "minDomain": Js.Undefined.fromOption(minDomain), +// "padding": Js.Undefined.fromOption(padding), +// "height": Js.Undefined.fromOption(height), +// "width": Js.Undefined.fromOption(width), +// }, +// children, +// ) |> ReasonReact.element +// }; -module VictoryLine = { - [@bs.module "victory"] - external victoryLine : ReasonReact.reactClass = "VictoryLine"; +// module VictoryLine = { +// [@bs.module "victory"] +// external victoryLine : ReasonReact.reactClass = "VictoryLine"; - [@react.component] - let make = (~data=?, ~style=?, ~children=ReasonReact.null) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryLine, - ~props={ - "data": Js.Undefined.fromOption(data), - "style": Js.Undefined.fromOption(style), - }, - children, - ) |> ReasonReact.element +// [@react.component] +// let make = (~data=?, ~style=?, ~children=ReasonReact.null) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryLine, +// ~props={ +// "data": Js.Undefined.fromOption(data), +// "style": Js.Undefined.fromOption(style), +// }, +// children, +// ) |> ReasonReact.element -}; +// }; -module VictoryAxis = { - [@bs.module "victory"] - external victoryAxis : ReasonReact.reactClass = "VictoryAxis"; +// module VictoryAxis = { +// [@bs.module "victory"] +// external victoryAxis : ReasonReact.reactClass = "VictoryAxis"; - [@react.component] - let make = - ( - ~tickValues=?, - ~height=?, - ~style=?, - ~scale=?, - ~tickFormat: option('a => string)=?, - ~dependentAxis: option(bool)=?, - ~children=ReasonReact.null, - ) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryAxis, - ~props={ - "height": Js.Undefined.fromOption(height), - "tickValues": Js.Undefined.fromOption(tickValues), - "tickFormat": Js.Undefined.fromOption(tickFormat), - "dependentAxis": Js.Undefined.fromOption(dependentAxis), - "style": Js.Undefined.fromOption(style), - "scale": Js.Undefined.fromOption(scale), - }, - children, - ) |> ReasonReact.element -}; +// [@react.component] +// let make = +// ( +// ~tickValues=?, +// ~height=?, +// ~style=?, +// ~scale=?, +// ~tickFormat: option('a => string)=?, +// ~dependentAxis: option(bool)=?, +// ~children=ReasonReact.null, +// ) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryAxis, +// ~props={ +// "height": Js.Undefined.fromOption(height), +// "tickValues": Js.Undefined.fromOption(tickValues), +// "tickFormat": Js.Undefined.fromOption(tickFormat), +// "dependentAxis": Js.Undefined.fromOption(dependentAxis), +// "style": Js.Undefined.fromOption(style), +// "scale": Js.Undefined.fromOption(scale), +// }, +// children, +// ) |> ReasonReact.element +// }; -module VictoryArea = { - [@bs.module "victory"] - external victoryArea : ReasonReact.reactClass = "VictoryArea"; - let make = - (~animate=?, ~data=?, ~interpolation="linear", ~style=?, children) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryArea, - ~props={ - "animate": Js.Undefined.fromOption(animate), - "data": Js.Undefined.fromOption(data), - "style": Js.Undefined.fromOption(style), - "interpolation": interpolation, - }, - children, - ); -}; -module VictoryScatter = { - [@bs.module "victory"] - external victoryScatter : ReasonReact.reactClass = "victoryScatter"; - let make = (~data=?, ~style=?, children) => - ReasonReact.wrapJsForReason( - ~reactClass=victoryScatter, - ~props={ - "data": Js.Undefined.fromOption(data), - "style": Js.Undefined.fromOption(style), - }, - children, - ); -}; \ No newline at end of file +// module VictoryArea = { +// [@bs.module "victory"] +// external victoryArea : ReasonReact.reactClass = "VictoryArea"; +// let make = +// (~animate=?, ~data=?, ~interpolation="linear", ~style=?, children) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryArea, +// ~props={ +// "animate": Js.Undefined.fromOption(animate), +// "data": Js.Undefined.fromOption(data), +// "style": Js.Undefined.fromOption(style), +// "interpolation": interpolation, +// }, +// children, +// ); +// }; +// module VictoryScatter = { +// [@bs.module "victory"] +// external victoryScatter : ReasonReact.reactClass = "victoryScatter"; +// let make = (~data=?, ~style=?, children) => +// ReasonReact.wrapJsForReason( +// ~reactClass=victoryScatter, +// ~props={ +// "data": Js.Undefined.fromOption(data), +// "style": Js.Undefined.fromOption(style), +// }, +// children, +// ); +// }; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a9892204..8cd916e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3382,7 +3382,7 @@ d3-dsv@1, d3-dsv@^1.2.0: iconv-lite "0.4" rw "1" -d3-ease@1, d3-ease@^1.0.0: +d3-ease@1: version "1.0.6" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== @@ -3440,7 +3440,7 @@ d3-hierarchy@1, d3-hierarchy@^1.1.9: resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== -d3-interpolate@1, d3-interpolate@^1.1.1, d3-interpolate@^1.2.0, d3-interpolate@^1.4.0: +d3-interpolate@1, d3-interpolate@^1.2.0, d3-interpolate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== @@ -3487,19 +3487,6 @@ d3-scale@2: d3-time "1" d3-time-format "2" -d3-scale@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" - integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== - dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-color "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" - d3-scale@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.1.tgz#da1684adce7261b4bc7a76fe193d887f0e909e69" @@ -3516,7 +3503,7 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== -d3-shape@1, d3-shape@^1.0.0, d3-shape@^1.2.0, d3-shape@^1.3.7: +d3-shape@1, d3-shape@^1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== @@ -3535,7 +3522,7 @@ d3-time@1, d3-time@^1.1.0: resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== -d3-timer@1, d3-timer@^1.0.0, d3-timer@^1.0.10: +d3-timer@1, d3-timer@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== @@ -3552,7 +3539,7 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" -d3-voronoi@1, d3-voronoi@^1.1.2: +d3-voronoi@1: version "1.1.4" resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== @@ -8390,11 +8377,6 @@ react-dom@>=16.8.1, react-dom@^16.8.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-fast-compare@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" - integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== - react-icons-kit@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/react-icons-kit/-/react-icons-kit-1.3.1.tgz#fbe56ce4379fc4391b4c6dfc1aa96e2b31e23623" @@ -10451,283 +10433,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -victory-area@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-30.6.1.tgz#03f19be259b1da78f9ab5f7c1297b9ef7eccacad" - integrity sha512-Ksu0dnS2Ssiiuv/OH/1XK/a3M2D7to20JUkzVSyvm3m1HvKyvRCK4fDuBI2mXFWaX5iT2gJmqtVj6R22b+NOtg== - dependencies: - d3-shape "^1.2.0" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-axis@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-30.6.1.tgz#d9eae9b31ec8b78ad9f99383b54ab03f3bf7a0b2" - integrity sha512-SJFdMDYOLG9EfPovskomeXvb4VOJnTF//DvXCIcw6Ysy6sMpkwvWfpJVKgh9JAzELirW8OSU775f5BcwZ+z1xg== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-bar@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-30.6.1.tgz#04793a0c83cc77d695f94a92358a14eec5f1d657" - integrity sha512-P9v6OAz9w71+cTvRuRm43jtXV9Ag41bGn2RXf7nUgp1M0GFvaFQGujSILdSVsE8zEdyQLmwUxJRSz+s5b6CeSQ== - dependencies: - d3-shape "^1.2.0" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-box-plot@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-box-plot/-/victory-box-plot-30.6.1.tgz#d82e726069d891dd0e54fed04bc75f112a212df4" - integrity sha512-2UVGOG+E4Nm0LLQyj3q13oAaE8vChAkrOZryTFFtDLZHVw5pUxDzZtWlgysna82tkJQA4vjlcq2h2lbZw9G1Rw== - dependencies: - d3-array "^1.2.0" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-brush-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-30.6.1.tgz#2db8c4f3d6e6facfafc69285e8cb6a2f94e2499e" - integrity sha512-V76eHU0Mn92DgOjnYJVHT+4skHkACBn2wQROd0E9ZFNqqyTa76U/ISD+4ihjNSqy0HfGdaHTjxcjL83E/EfONw== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-brush-line@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-brush-line/-/victory-brush-line-30.6.1.tgz#d0cf8c32f55674fda8c1fcd16d548ea4e1119361" - integrity sha512-wOeIIPm8BDNqqDJQFfHe6txJ8JPWNKzHeQ6WTiwntw/IN8oLk4cwnbbW5yhQQC6rOniRFZH5iqb5V+zdCLUCWg== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-candlestick@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-candlestick/-/victory-candlestick-30.6.1.tgz#14fa5220ce2ee766c721a71eff0ecab80528e6d1" - integrity sha512-cF0/jRU8LY14vBWHugU/5Ei1a+Lcc6u1k4o03m7ujKSsBffvVDnj4CN+nR9jwMMEMUeViBiVpY8HfhzFXVQ5KQ== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-chart@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-30.6.1.tgz#ee74341b6ec14ef7954161296e8f6e9f4e6c851f" - integrity sha512-JHP51QSJweuOQqMMqVim5u/vLKnvD3hjANpJdPPzthTrrmm1IPHAMLkUQ0m0tPiKsAf/5E49jDx4mDz7r6IK7w== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - react-fast-compare "^2.0.0" - victory-axis "^30.6.1" - victory-core "^30.6.1" - victory-polar-axis "^30.6.1" - victory-shared-events "^30.6.1" - -victory-core@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-30.6.1.tgz#edb3eb6f8d48dc9953273e7f77fafdedeadf1460" - integrity sha512-oP5gHIVnpcp6I8oHPLDlIHqaEJ3lWMQHjwOTKr/ICsbabdtWBd0D8AByrV0qaXm8vgUmvyBhQqH2UCXb1Zh+jA== - dependencies: - d3-ease "^1.0.0" - d3-interpolate "^1.1.1" - d3-scale "^1.0.0" - d3-shape "^1.2.0" - d3-timer "^1.0.0" - lodash "^4.17.5" - prop-types "^15.5.8" - react-fast-compare "^2.0.0" - -victory-create-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-30.6.1.tgz#f24f4f6269e11ef04a5f2d08831a347e5b01ccfc" - integrity sha512-Bm23Yk9xzdO8uCK99G+IFFclWx/vpDLea2vcW2MyHlTT2Iwa1HHW8UAYFfwr6858LYMaOa/Y9UV/YvP+twctoA== - dependencies: - lodash "^4.17.5" - victory-brush-container "^30.6.1" - victory-core "^30.6.1" - victory-cursor-container "^30.6.1" - victory-selection-container "^30.6.1" - victory-voronoi-container "^30.6.1" - victory-zoom-container "^30.6.1" - -victory-cursor-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-30.6.1.tgz#054ba4a9caf3b32a4b467d77a9c0b0410f54a06e" - integrity sha512-XjmLUdQWEiv8F+AwfpVvi3kETJz7OCWlpkypbiIJjLvYM8lUeT84boOftMfyw+HRjUAxPQFh1D7yBUvAqrwKiA== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-errorbar@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-errorbar/-/victory-errorbar-30.6.1.tgz#bee14bf0c0853ad841454ec060b290f7588dd7a2" - integrity sha512-SBowNqH5MBh1GoqA3UF5YVsFB0h0o60IkR5Yjhe/uaGhwyZVAu5X9+BE0CXRq0uDLhOX9GDvqDs59hAe0D3xiw== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-group@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-30.6.1.tgz#59a55858750a3f880860ebe64faf0b21575f3da4" - integrity sha512-fGt6/+GgsBqFiuzVdzQHRc2joYEDL9Bo2wE8rCH5HAUnj/oI6drKi8euooUpBOIhbOQeycCj7r6BXJvp8H9CfQ== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-legend@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-30.6.1.tgz#9f411b07915f058ed17b061e274c622b426e4c08" - integrity sha512-iadVJSaj+mhT9Crx2eYMF39qTyvn03B5p44OjeLqKcvb0MDElVDsXyYHTwsUgnE4i+YPOFz9+buMaw2UWXU0NA== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-line@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-30.6.1.tgz#ce43f4d68b0faea28025881580b6b3914b427950" - integrity sha512-JmL17SK4bLkhQEelDoj6QK9KLF8o5uW0aNNxdhSqluFxROLtuixUzvffEYlN0weHCkIR6f/o2PqbujLVtoxOOg== - dependencies: - d3-shape "^1.2.0" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-pie@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-30.6.1.tgz#f791286fb9e57b5e575ec51ea5b4275a4aa7d68d" - integrity sha512-03jIWh/+17j7FX21KSNWSglhb50DqJQ9Jy5+nVAEcTlhIiI3bffuDd9IvoCfXMMwDmoRvaRq1xtXSElq4jZYpw== - dependencies: - d3-shape "^1.0.0" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-polar-axis@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-30.6.1.tgz#a8b13e9210627abe70605bf7d8e11d34d66cf632" - integrity sha512-OQIAKURdTdmOk/rXr+DNeE9xoROEOqmAdanTYXdpeazbYiClSbhcbIypK0Z7qyGziIV8D8W4r4at/mAMA9AkXQ== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-scatter@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-30.6.1.tgz#96797fefff3d31ede944e95ac51682846705a1a8" - integrity sha512-UsIne7V/LruhkA5r+BqUa4MNuMGSgOgPyklOOyKur1jrYm83kE3t0T7ObiTrFBLsL7SqVnmxARXW66Lv2GWE+g== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-selection-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-30.6.1.tgz#627148c84ae43472682c9f135487035cbdadf6d4" - integrity sha512-ihv1aGOwu3IX/v94IRawMAlWRMlt/BogrU28FXhhVMdqXemPFkq3J9COq0khGhh+wuqtC1tu9Ni7uw4YA3fdZg== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-shared-events@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-30.6.1.tgz#788e6c45a752c521a3f067675b9b9196fcee552c" - integrity sha512-4zQ6gfkrQVNtx+bUv+kgNNtVX5Mr6T68Hs2xV4H0f3FrToyFrsXtANGFhAzgmi+00Mk06FVIAIY94tZW3Cej1Q== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-stack@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-30.6.1.tgz#873be79c492f0d7ed02ad03bd82e592d6f778ea8" - integrity sha512-WJk9FIe/GuqXaZsB+vZSTbgIyg53I6cwCtyMvh4Jj3iFWHuRmpVaT7vwJ46/I2WOKLvQWyd0EY380kby5PNUVg== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-tooltip@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-30.6.1.tgz#234e23954c9b4543cee22ac45f9b91325207fe42" - integrity sha512-Mezqycvoxms6ON6ftBKU8TpB8Ggsiy+1gJREeOt83TfvrIp8DKher33kj83ofD853rPcmRJeMNAz57I1mpXtHA== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-voronoi-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-30.6.1.tgz#58a16af999e0c6ff528905aec812c2fdd5b93dff" - integrity sha512-rHT7rgYLuetgi67CFyM8N3AgomzNi1/tjjUKC2SmD2qq8bBysVXlyzTh2Zx4aTLVX59XNNGAaLxPjUjkZWYY2g== - dependencies: - d3-voronoi "^1.1.2" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - victory-tooltip "^30.6.1" - -victory-voronoi@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-voronoi/-/victory-voronoi-30.6.1.tgz#d3de9db4997778f2f8acd0427bab14898e137b9e" - integrity sha512-bxzYmGROFYtpP3EmmcKwHMDAvpIVNYK+7LNOuYwu0z/IHBT//K2EplWAV90IYIvTdKVT75lgqiYsFOWY78L2yw== - dependencies: - d3-voronoi "^1.1.2" - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory-zoom-container@^30.6.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-30.6.1.tgz#41ee41e4168f311375508d2ed1b8581f2b437bb6" - integrity sha512-F/b2l6LJjkR1OF+ioU49yGDW0rJJusKqrOFtcSDbnyeSwKkQGkgJ0T+Nv/TN5jSBdC3Wb/kKtwqHRYCrxtt3Zg== - dependencies: - lodash "^4.17.5" - prop-types "^15.5.8" - victory-core "^30.6.1" - -victory@^30.3.1: - version "30.6.1" - resolved "https://registry.yarnpkg.com/victory/-/victory-30.6.1.tgz#607a0ca643bf4f4a32a08a4a4e1a84d601611159" - integrity sha512-VJAFvZz4s6qT3KhDKLv9qMKtSwLjbRZiuK917KrfomTLYcjMgrA1FckW/8nIn1URwNdkawe4YvgAE0wdtbDO3A== - dependencies: - victory-area "^30.6.1" - victory-axis "^30.6.1" - victory-bar "^30.6.1" - victory-box-plot "^30.6.1" - victory-brush-container "^30.6.1" - victory-brush-line "^30.6.1" - victory-candlestick "^30.6.1" - victory-chart "^30.6.1" - victory-core "^30.6.1" - victory-create-container "^30.6.1" - victory-cursor-container "^30.6.1" - victory-errorbar "^30.6.1" - victory-group "^30.6.1" - victory-legend "^30.6.1" - victory-line "^30.6.1" - victory-pie "^30.6.1" - victory-polar-axis "^30.6.1" - victory-scatter "^30.6.1" - victory-selection-container "^30.6.1" - victory-shared-events "^30.6.1" - victory-stack "^30.6.1" - victory-tooltip "^30.6.1" - victory-voronoi "^30.6.1" - victory-voronoi-container "^30.6.1" - victory-zoom-container "^30.6.1" - vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"