From 8196b4814bb1fa15749ed3d199c3f87831611e66 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Sat, 8 Aug 2020 13:15:53 +0100 Subject: [PATCH] Simple percentiles chart --- package.json | 4 +- .../DistributionPlot/PercentilesChart.js | 84 +++++++----- .../DistributionPlot/PercentilesChart.re | 13 +- .../DistributionPlot/spec-percentiles.json | 102 ++++++++++---- yarn.lock | 126 +++++++++++++++++- 5 files changed, 261 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index f466582c..8f5fdc19 100644 --- a/package.json +++ b/package.json @@ -55,11 +55,13 @@ "react": "^16.8.0", "react-dom": "^16.8.0", "react-use": "^13.27.0", + "react-vega": "^7.4.1", "reason-react": ">=0.7.0", "reschema": "1.3.0", "tailwindcss": "1.2.0", "vega": "5.11.1", - "vega-embed": "6.6.0" + "vega-embed": "6.6.0", + "vega-lite": "^4.14.1" }, "devDependencies": { "@glennsl/bs-jest": "^0.5.1", diff --git a/src/components/charts/DistributionPlot/PercentilesChart.js b/src/components/charts/DistributionPlot/PercentilesChart.js index 96b850f8..88c040b4 100644 --- a/src/components/charts/DistributionPlot/PercentilesChart.js +++ b/src/components/charts/DistributionPlot/PercentilesChart.js @@ -1,49 +1,59 @@ import * as _ from 'lodash'; import React from 'react'; import * as vega from 'vega'; - +import { + createClassFromSpec +} from "react-vega"; import spec from './spec-percentiles'; -export class PercentilesChart extends React.PureComponent { +// export class PercentilesChart extends React.PureComponent { - constructor(props) { - super(props); - this.containerRef = React.createRef(); - this.view = null; +// constructor(props) { +// super(props); +// this.containerRef = React.createRef(); +// this.view = null; - this.spec = _.cloneDeep(spec); - this.spec.data[0].values = this.props.data; - } +// 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(); - } +// 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(); - } - } +// 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() - } +// // 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 +// render() { +// return React.createElement("div", { +// ref: this.containerRef, +// }); +// } +// } + +const PercentilesChart = createClassFromSpec({ + spec +}); + +export { + PercentilesChart +}; \ No newline at end of file diff --git a/src/components/charts/DistributionPlot/PercentilesChart.re b/src/components/charts/DistributionPlot/PercentilesChart.re index 221198ff..c5db91de 100644 --- a/src/components/charts/DistributionPlot/PercentilesChart.re +++ b/src/components/charts/DistributionPlot/PercentilesChart.re @@ -20,11 +20,22 @@ let make = |> E.A.fmap(((x, r)) => { { "x": x, + "p1": r |> DistPlus.T.Integral.yToX(0.01), "p5": r |> DistPlus.T.Integral.yToX(0.05), + "p10": r |> DistPlus.T.Integral.yToX(0.1), + "p20": r |> DistPlus.T.Integral.yToX(0.2), + "p30": r |> DistPlus.T.Integral.yToX(0.3), + "p40": r |> DistPlus.T.Integral.yToX(0.4), "p50": r |> DistPlus.T.Integral.yToX(0.5), + "p60": r |> DistPlus.T.Integral.yToX(0.6), + "p70": r |> DistPlus.T.Integral.yToX(0.7), + "p80": r |> DistPlus.T.Integral.yToX(0.8), + "p90": r |> DistPlus.T.Integral.yToX(0.9), "p95": r |> DistPlus.T.Integral.yToX(0.95), + "p99": r |> DistPlus.T.Integral.yToX(0.99), } }); Js.log3("Data", dists, data); - ; + let da = {"facet": data}; + ; }; diff --git a/src/components/charts/DistributionPlot/spec-percentiles.json b/src/components/charts/DistributionPlot/spec-percentiles.json index ca397db3..f243a2fa 100644 --- a/src/components/charts/DistributionPlot/spec-percentiles.json +++ b/src/components/charts/DistributionPlot/spec-percentiles.json @@ -7,20 +7,6 @@ { "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" } } }, @@ -31,9 +17,9 @@ { "type": "aggregate", "groupby": ["x"], - "ops": ["mean", "mean", "mean"], - "fields": ["p5", "p95", "p50"], - "as": ["p5", "p95", "p50"] + "ops": ["mean","mean","mean","mean","mean", "mean","mean","mean","mean","mean","mean","mean","mean"], + "fields": ["p1", "p5", "p10", "p20", "p30", "p40", "p50", "p60", "p70", "p80", "p90", "p95", "p99"], + "as": ["p1", "p5", "p10", "p20", "p30", "p40", "p50", "p60", "p70", "p80", "p90", "p95", "p99"] } ] } @@ -84,15 +70,84 @@ "type": "area", "from": { "data": "table" }, "encode": { - "enter": { "fill": { "value": "#C9D6E5" } }, + "enter": { "fill": { "value": "#4C78A8" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p1" }, + "y2": { "scale": "yscale", "field": "p99" }, + "opacity": { "value": 0.05 } + } + } + }, + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#4C78A8" } }, "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 } } + "opacity": { "value": 0.1 } + } + } + }, + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#4C78A8" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p10" }, + "y2": { "scale": "yscale", "field": "p90" }, + "opacity": { "value": 0.15 } + } + } + }, + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#4C78A8" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p20" }, + "y2": { "scale": "yscale", "field": "p80" }, + "opacity": { "value": 0.2 } + } + } + }, + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#4C78A8" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p30" }, + "y2": { "scale": "yscale", "field": "p70" }, + "opacity": { "value": 0.2 } + } + } + }, + { + "type": "area", + "from": { "data": "table" }, + "encode": { + "enter": { "fill": { "value": "#4C78A8" } }, + "update": { + "interpolate": { "value": "monotone" }, + "x": { "scale": "xscale", "field": "x" }, + "y": { "scale": "yscale", "field": "p40" }, + "y2": { "scale": "yscale", "field": "p60" }, + "opacity": { "value": 0.2 } + } } }, { @@ -103,10 +158,7 @@ "interpolate": { "value": "monotone" }, "stroke": { "value": "#4C78A8" }, "strokeWidth": { "value": 2 }, - "opacity": { "value": 0.8 } - }, - "hover": { "opacity": { "value": 0.5 } }, - "enter": { + "opacity": { "value": 0.8 }, "x": { "scale": "xscale", "field": "x" }, "y": { "scale": "yscale", "field": "p50" } } diff --git a/yarn.lock b/yarn.lock index 8cd916e8..eb9cd5ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1424,6 +1424,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/clone@~0.1.30": + version "0.1.30" + resolved "https://registry.yarnpkg.com/@types/clone/-/clone-0.1.30.tgz#e7365648c1b42136a59c7d5040637b3b5c83b614" + integrity sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ= + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -1434,6 +1439,11 @@ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@types/fast-json-stable-stringify@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#40363bb847cb86b2c2e1599f1398d11e8329c921" + integrity sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ== + "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" @@ -1545,6 +1555,14 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/react@^16.9.19": + version "16.9.44" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.44.tgz#da84b179c031aef67dc92c33bd3401f1da2fa3bc" + integrity sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/shallowequal@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/shallowequal/-/shallowequal-1.1.1.tgz#aad262bb3f2b1257d94c71d545268d592575c9b1" @@ -1928,6 +1946,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-flat-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz#1e3a4255be619dfbffbfd1d635c1cf357cd034e7" + integrity sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw== + array-tree-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" @@ -2793,7 +2816,7 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1, clone@^2.1.2: +clone@^2.1.1, clone@^2.1.2, clone@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -3302,6 +3325,11 @@ csstype@^2.2.0, csstype@^2.5.5, csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== +csstype@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.2.tgz#ee5ff8f208c8cd613b389f7b222c9801ca62b3f7" + integrity sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw== + d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" @@ -4290,6 +4318,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-deep-equal@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^2.2.2: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -4319,7 +4352,7 @@ fast-json-patch@^3.0.0-1: resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.0.0-1.tgz#4c68f2e7acfbab6d29d1719c44be51899c93dabb" integrity sha512-6pdFb07cknxvPzCeLsFHStEy+MysPJPgZQ9LbQ/2O67unQF93SNqfdSqnPPl71YMHX+AD8gbl7iuoGFzHEdDuw== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5927,7 +5960,7 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= -json-stringify-pretty-compact@^2.0.0: +json-stringify-pretty-compact@^2.0.0, json-stringify-pretty-compact@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ== @@ -8462,6 +8495,15 @@ react-use@^13.27.0: ts-easing "^0.2.0" tslib "^1.10.0" +react-vega@^7.4.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/react-vega/-/react-vega-7.4.1.tgz#b81ea5592f68b41b976bcf6948c0bfbefa8e9a2c" + integrity sha512-ROlB7cQscHVgwbspmEoeQ9uA1yAPykhaW6XSu+P8XZ7TlSe1pNS3gZvrdh4KIPbwS5mYo6TF0gferOhDH5sBlQ== + dependencies: + "@types/react" "^16.9.19" + fast-deep-equal "^3.1.1" + vega-embed "^6.5.1" + react@16.12.0: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" @@ -9839,6 +9881,11 @@ tslib@^1.10.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== +tslib@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -10134,6 +10181,18 @@ vega-embed@6.6.0: vega-themes "^2.8.3" vega-tooltip "^0.22.1" +vega-embed@^6.5.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/vega-embed/-/vega-embed-6.10.0.tgz#75b2947fb75ccecd0d506296ea2b5c1f9295208c" + integrity sha512-tz4iUvJSaLTbMTRnatihWAUBS6ovLG34FfP1AlBvkKRcJObQukHeJiDSrzY3aJpzORqsvNGG6Oq7b1Rd1wbz+g== + dependencies: + fast-json-patch "^3.0.0-1" + json-stringify-pretty-compact "^2.0.0" + semver "^7.3.2" + vega-schema-url-parser "^1.1.0" + vega-themes "^2.8.4" + vega-tooltip "^0.23.1" + vega-encode@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.6.0.tgz#20456f579da15074f585eae7cdc730ce132095bd" @@ -10157,6 +10216,13 @@ vega-expression@^2.6.4, vega-expression@~2.6.4: dependencies: vega-util "^1.13.2" +vega-expression@~2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-2.6.5.tgz#7bda7524b9223cbbf9034071695c7c2a9bd81971" + integrity sha512-3hJts0gKomu3ePXYeIb+VAw7yNKoHJ6VqSKsHHFPyoEGNdwmlgI5d9IBblelPCiMCHK4sMt7h1OTWB33cfxZGA== + dependencies: + vega-util "^1.14.0" + vega-force@~4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.0.4.tgz#b73cba2e169cc248c994c9d981c374eb06aff764" @@ -10208,6 +10274,24 @@ vega-hierarchy@~4.0.5: vega-dataflow "^5.5.1" vega-util "^1.13.2" +vega-lite@^4.14.1: + version "4.14.1" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-4.14.1.tgz#76e76ee43dfd598544db61c7bace5d4d34fe892c" + integrity sha512-aA4hoaGd7n50uQi9eogCACeaACULp5ohzqBA0eJ+1PTUv8ILy+QHRDe3hX9FCEaXcq0Dj3DDj/sxF4PL6JaD+w== + dependencies: + "@types/clone" "~0.1.30" + "@types/fast-json-stable-stringify" "^2.0.0" + array-flat-polyfill "^1.0.1" + clone "~2.1.2" + fast-deep-equal "~3.1.3" + fast-json-stable-stringify "~2.1.0" + json-stringify-pretty-compact "~2.0.0" + tslib "~2.0.0" + vega-event-selector "~2.0.3" + vega-expression "~2.6.5" + vega-util "~1.14.1" + yargs "~15.4.1" + vega-loader@^4.2.2, vega-loader@~4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.2.2.tgz#a9375f339c558dc1d083cabd2f8c29d8142b18f8" @@ -10306,6 +10390,11 @@ vega-themes@^2.8.3: resolved "https://registry.yarnpkg.com/vega-themes/-/vega-themes-2.8.3.tgz#3f42a9d29b7274bf963d9d4e1c30ac0d5841d4fa" integrity sha512-BzV/gC2ZAhnv20qpQVtyQW6CYXAGQKjArSdxky1UB1RnR5WMRzPsC+g8ak4k0txTwqhkvMAlDXUMaBgDMTOhQg== +vega-themes@^2.8.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/vega-themes/-/vega-themes-2.8.5.tgz#f53c96676a1f28872b2c0e924da5f211613ce3a7" + integrity sha512-DqNVHZyOtyxsgEy97wfQORw11gDCWR7SIRXyDlqmiwKTLu7Jm+PdOZdw7fNbg0jozywhsPnl0itOj3k9c74CPg== + vega-time@^1.1.0, vega-time@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-1.1.0.tgz#aedbffaf6d982c43e3b5e7014c9b2fc6bd74434c" @@ -10323,6 +10412,13 @@ vega-tooltip@^0.22.1: dependencies: vega-util "^1.13.1" +vega-tooltip@^0.23.1: + version "0.23.2" + resolved "https://registry.yarnpkg.com/vega-tooltip/-/vega-tooltip-0.23.2.tgz#f4e22c4ce967ce9f1de6518381a74f6fe5102a86" + integrity sha512-H7cIA1tZ26H+GJijTi1ZCBg5XWelWUv57ZNJB7No7VL6ZvV8ha7LJrFPvYQadqMP2bSdbbntKMP8oGtsKUFA7A== + dependencies: + vega-util "^1.14.1" + vega-transforms@~4.7.2: version "4.7.2" resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.7.2.tgz#29e3e0a7f662b756c563abc4eb06465aecdda940" @@ -10346,6 +10442,11 @@ vega-util@^1.13.1, vega-util@^1.13.2, vega-util@~1.13.2: resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.13.2.tgz#d9fe2378f0e780290e231d128d8c125407fb3559" integrity sha512-cN/VaO8CjPb3ELfQb+IVi5NGoQpYhWSUFfH7K2ibwagO8obZlUFa9ze8fYiexi2Txf78HFgWm9MXNdV6PROrkw== +vega-util@^1.14.0, vega-util@^1.14.1, vega-util@~1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.14.1.tgz#0fb614277764f98738ba0b80e5cdfbe663426183" + integrity sha512-pSKJ8OCkgfgHZDTljyj+gmGltgulceWbk1BV6LWrXqp6P3J8qPA/oZA8+a93YNApYxXZ3yzIVUDOo5O27xk0jw== + vega-view-transforms@~4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.4.tgz#e27049e0b6cab8271ac06e1e9c0ebcbbd901b1a0" @@ -10647,7 +10748,7 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.1: +yargs-parser@^18.1.1, yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -10714,6 +10815,23 @@ yargs@^15.0.2, yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" +yargs@~15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + zen-observable-ts@^0.8.21: version "0.8.21" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"