diff --git a/package.json b/package.json index ed5b70c..c3e9f07 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.3.0", "private": true, "dependencies": { + "@nivo/line": "^0.61.1", "@postlight/use-search-params": "https://github.com/postlight/use-search-params.git", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", @@ -17,7 +18,8 @@ "react-emoji-render": "^1.2.2", "react-hamburger-menu": "^1.2.1", "react-router-dom": "^5.1.2", - "react-scripts": "3.4.1" + "react-scripts": "3.4.1", + "recharts": "^1.8.5" }, "scripts": { "start": "react-scripts start", diff --git a/src/App.css b/src/App.css index 7b7ebf4..843ab6c 100644 --- a/src/App.css +++ b/src/App.css @@ -3,8 +3,8 @@ body { font-size:1.5em; - line-height:2em; - font-family: 'IBM Plex Sans', sans-serif; + line-height:1.5em; + font-family: 'IBM Plex Serif', sans-serif; color:#444; } @@ -13,3 +13,28 @@ body { color:#222; } +button { + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:linear-gradient(to bottom, #ededed 5%, #dfdfdf 100%); + background-color:#ededed; + border-radius:6px; + border:1px solid #dcdcdc; + display:inline-block; + cursor:pointer; + color:#777777; + font-family:IBM Plex Sans; + font-size:1em; + font-weight:bold; + text-decoration:none; + text-shadow:0px 1px 0px #ffffff; + margin-right:4px; +} + +button:hover { + background:linear-gradient(to bottom, #dfdfdf 5%, #ededed 100%); + background-color:#dfdfdf; +} + +button:active { + position:relative; +} diff --git a/src/App.js b/src/App.js index 1219e1e..6f50ecf 100644 --- a/src/App.js +++ b/src/App.js @@ -37,11 +37,11 @@ const textVars = textFiles.reduce( function App(props) { let { page } = useParams(); - const [ast, astState] = textVars[page]; + const [ast, astState, ranges] = textVars[page]; return (
+
); } diff --git a/src/LineChart.js b/src/LineChart.js new file mode 100644 index 0000000..f341f5d --- /dev/null +++ b/src/LineChart.js @@ -0,0 +1,50 @@ +import React from "react"; +import { ResponsiveLine } from "@nivo/line"; + +function LineChart(props) { + return ( + + ); +} + +export default LineChart; diff --git a/src/Nav.css b/src/Nav.css index da03389..017052d 100644 --- a/src/Nav.css +++ b/src/Nav.css @@ -1,10 +1,11 @@ .burger { - margin-left:-10px; + margin:5px; position:fixed; + top:0; } #nav { - font-size:125%; + font-size:75%; right:0px; position:fixed; width:100%; @@ -26,12 +27,11 @@ div#nav.hamburger-true { transition:left 0.2s; } div#nav.hamburger-false { - visibility:none; } #inner-nav { - height:60%; + height:90%; overflow-y:scroll; } diff --git a/src/Nav.js b/src/Nav.js index 65a3c05..87c8cc0 100644 --- a/src/Nav.js +++ b/src/Nav.js @@ -28,10 +28,10 @@ function Nav(props) { setHamburgerOpen(hamburgerOpen ? false : true)} - width={80} - height={50} - strokeWidth={3} - rotate={45} + width={30} + height={20} + strokeWidth={4} + rotate={0} animationDuration={0.2} className="burger" color="slategray" diff --git a/src/Section.css b/src/Section.css index b68025a..13072cc 100644 --- a/src/Section.css +++ b/src/Section.css @@ -14,3 +14,21 @@ h1 { .negative { color:red; } + +div.spacer { + height:0.75em; +} + +.chart { + height:325px; + border:1px solid #ccc; + padding:0px 20px 120px 0.5em; + background:#fafafa; +} + +.chart h3 { + font-size:1.25em; + font-weight:200; +} + + diff --git a/src/Section.js b/src/Section.js index 7dab342..124a0a0 100644 --- a/src/Section.js +++ b/src/Section.js @@ -5,11 +5,12 @@ import React, { useMemo } from "react"; import Slider from "./Slider"; import Statement from "./Statement"; import Text from "./Text"; +import LineChart from "./LineChart"; import "./Section.css"; function Section(props) { - const { ast, astState } = props; + const { ast, astState, ranges } = props; const searchParams = useSearchParams("replace"); const state = useMemo(readFields, [astState, searchParams]); @@ -28,6 +29,58 @@ function Section(props) { function toComponents(o, i) { switch (o.type) { + case "chart": + const range = ranges[o.x].range; + const exp = ranges[o.y]; + let s = Object.assign(state); + + const inner_data = range.map((val, i) => { + s[o.x] = val; + Object.keys(ranges).forEach((x) => { + if (ranges[x].type === "expression") { + s[x] = ranges[x].eval(s); + } + }); + const y = exp.eval(s); + return { x: val, y: y }; + }); + const _minValue = inner_data[0].y; + const _maxValue = inner_data[inner_data.length - 1].y; + + const [minValue, maxValue] = [_minValue, _maxValue].sort( + (a, b) => a - b + ); + const data = [ + { + id: o.y, + data: inner_data, + }, + ]; + function c(x) { + return x.replace(/_/g, " ").toUpperCase(); + } + return ( +
+

+ {c(o.y)} vs. {c(o.x)} +

+ numeral(x).format("-0,0")} + yFormat={(x) => { + console.log("Y", x); + return numeral(x).format("-0,0"); + }} + minValue={minValue} + maxValue={maxValue} + xLabel={c(o.x)} + yLabel={c(o.y)} + /> +
+ ); + case "paragraph": + return
; + case "text": return ; @@ -58,13 +111,32 @@ function Section(props) { state[o.variable] = n; return n; } + function newNum() { + const n = o.eval(); + state[o.variable] = n; + addField(o.variable, n); + console.log(o.variable, n, state[o.variable]); + } + const n = evaluate(o); const sign = n > 0 ? "positive" : "negative"; - return ( - - {format(n)} - - ); + + if (o.interactive) { + return ( + + ); + } else { + return ( + + {format(n)} + + ); + } default: return undefined; diff --git a/src/smarter-text.js b/src/smarter-text.js index 2b7869d..739f172 100644 --- a/src/smarter-text.js +++ b/src/smarter-text.js @@ -1,8 +1,11 @@ const P = require("parsimmon"); +const ExpressionParser = require("expr-eval").Parser; + +const Exp = new ExpressionParser(); +Exp.functions.text = function (txt) { + return "" + txt; +}; -// const nerdamer = require('nerdamer/all'); -var ExpressionParser = require("expr-eval").Parser; -var Exp = new ExpressionParser(); const numeral = require("numeral"); /* @@ -15,7 +18,7 @@ expr-eval. let text = "If you had {10:apples_owned} and you gave me {0-10:apples_given}, you would have {=apples_owned - apples_given:apples_left}."; -let ast = docParser.Doc.tryParse(text); +let ast = docParser.Doc.tryParse(Text); // Which would give you ast back as... [ @@ -55,10 +58,12 @@ function explainDecimal(d) { } // Same as above, but we don't know value yet + function makeExpression(parseResult, kind) { const [expression, variable] = parseResult; return { type: "expression", + interactive: kind === "interactive", format: kind, expression: expression, value: undefined, @@ -92,7 +97,15 @@ const docParser = P.createLanguage({ // that; it wants hierarchy. Without that, the parser fails and // says (most often) that it was expecting EOF. - Doc: (r) => P.alt(r.DecimalExpression, r.Statement, r.Text).many(), + Doc: (r) => + P.alt( + r.InteractiveExpression, + r.DecimalExpression, + r.ChartExpression, + r.Statement, + r.Paragraph, + r.Text + ).many(), Statement: (r) => P.alt(r.DollarStatement, r.PercentageStatement, r.DecimalStatement), @@ -122,10 +135,22 @@ const docParser = P.createLanguage({ makeExpression(x, "percentage") ), + PlainExpression: (r) => P.string("{=").then(r.MathPair).skip(P.string("}")), + DecimalExpression: (r) => r.PlainExpression.map((x) => makeExpression(x, "decimal")), - PlainExpression: (r) => P.string("{=").then(r.MathPair).skip(P.string("}")), + ChartExpression: (r) => + P.string("{#") + .then(r.ChartPair) + .skip(P.string("}")) + .map((x) => ({ type: "chart", y: x[0], x: x[1] })), + + InteractiveExpression: (r) => + P.string("{!=") + .then(r.MathPair) + .skip(P.string("}")) + .map((x) => makeExpression(x, "interactive")), Pair: (r) => P.seq(r.Range.skip(P.string(":")), r.Variable), @@ -133,12 +158,16 @@ const docParser = P.createLanguage({ Range: (r) => P.sepBy1(r.Decimal, P.string("-")).map(makeRange), + ChartPair: (r) => P.sepBy1(r.Variable, P.string(" by ")), + Variable: (r) => P.regexp(/[a-z_]+/), Math: (r) => P.regexp(/[^:]+/), Decimal: (r) => P.regexp(/[+-]?[0-9.]+/).map(explainDecimal), + Paragraph: (r) => P.newline.times(2).map((x) => ({ type: "paragraph" })), + Text: (r) => P.alt(P.any, P.whitespace).map((x) => ({ type: "text", value: x })), }); @@ -160,7 +189,10 @@ function parse(text) { }, []); let state = concatted.reduce(function (obj, value) { - if (value.type === "statement") { + if (value.type === "interactive") { + console.log("INTERACTIVE", value); + Object.assign(obj, { [value.variable]: value.value }); + } else if (value.type === "statement") { Object.assign(obj, { [value.variable]: value.value.value }); } else if (value.type === "expression") { Object.assign(obj, { [value.variable]: value.value }); @@ -168,12 +200,33 @@ function parse(text) { return obj; }, {}); + let ranges = concatted.reduce(function (obj, value) { + let vv = value.value; + + if (value.type === "statement") { + const ARRAY_SIZE = 10; + let arr = []; + const tick = (vv.max - vv.min) / ARRAY_SIZE; + for (let i = vv.min; i <= vv.max; i = i + tick) { + const j = Math.round(i); + arr.push(j); + } + arr.sort((a, b) => a - b); + vv["range"] = arr; + Object.assign(obj, { [value.variable]: vv }); + } else if (value.type === "expression") { + Object.assign(obj, { [value.variable]: value }); + } + return obj; + }, {}); + const mathed = concatted.filter((o) => o.type === "expression"); mathed.map((el) => { state[el.variable] = el.eval(state); return true; }); - return [concatted, state]; + + return [concatted, state, ranges]; } // var fs = require("fs"); diff --git a/src/texts/agency.txt b/src/texts/agency.txt new file mode 100644 index 0000000..2bc380f --- /dev/null +++ b/src/texts/agency.txt @@ -0,0 +1,14 @@ + +A week is {20-60:hours} hours and there are {26-52:weeks} working weeks in a year. + +You have a staff of {200:number_of_staff} and on average you pay them ${150:staff_rate}/hr. So you have {=number_of_staff * weeks * hours:staff_hours} hours available per year, for which you pay ${=staff_rate*staff_hours:staff_expense}. + +You can generate work from {20:number_of_clients} clients over a year. Your average client needs a team of {20:team_size} and pays ${150:client_rate} per hour per person. A typical project runs about {0-52:project_weeks} weeks. So they are asking for {=number_of_clients * team_size * project_weeks * hours:client_hours} hours of work per year ({=client_hours/hours/weeks:person_years} person-years), for ${=client_rate*client_hours:client_revenue}. +(At current staffing you can fulfill {=number_of_staff/person_years * 100:staffing_ratio}% of that.) This means that your profit is +${= +available_staff = if(person_years < number_of_staff, person_years, number_of_staff); +actual_client_revenue = available_staff * hours * weeks * client_rate; +actual_client_revenue - staff_expense +:profit}. + +{#profit by number_of_clients} diff --git a/src/texts/apples.txt b/src/texts/apples.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/texts/blog.txt b/src/texts/blog.txt index c02d9da..52c6c25 100644 --- a/src/texts/blog.txt +++ b/src/texts/blog.txt @@ -1,12 +1,11 @@ -You are a publisher on the Internet. +You are a publisher on the Internet. You generate {40:posts} posts per day, for a total of {=posts * 365:annual_posts} posts a year. It costs ${1000:post_cost} to make a post, which means you spend ${=annual_posts * post_cost:annual_expenses} per year on content. -You generate {40:posts} posts per day, for a total of {=posts * 365:annual_posts} posts a year. It costs ${1000:post_cost} to make a post, which means you spend ${=annual_posts * post_cost:annual_expenses} per year on content. +Each post gets an average of {50000:views_per_post} readers, and they go on to look at around {3:recirculation} other pages. That yields {=(recirculation + 1) * (views_per_post * posts) * 30:pageviews} page views every 30 days (and as many as {=views_per_post * posts * 30:uniques} unique readers, although let's be honest). Anyone who visits is {3:repeat}% likely to visit again next month. -Each post gets an average of {50000:readers} readers, and they go on to look at around {3:recirculation} other pages. That yields {=(recirculation + 1) * (readers * posts) * 30:pageviews} page views every 30 days (and as many as {=readers * posts * 30:uniques} unique readers, although let's be honest). Anyone who visits is {3:repeat}% likely to visit again next month. +At a ${0.01-5.00:cpm} CPM (cost per mille), and with {4:placements} ad placements per page, that means you can make ${=((pageviews + (pageviews * (repeat/100)))/1000) * placements * cpm:revenue}/month, or ${=revenue * 12:annual_revenue} a year. -At a ${0.01-5.00:cpm} CPM (cost per mille), and with {4:placements} ad placements per page, that means you can make +This means that your annual profit is ${=annual_revenue - annual_expenses:profit}. -${=((pageviews + (pageviews * (repeat/100)))/1000) * placements * cpm:revenue}/month, -or ${=revenue * 12:annual_revenue} a year. +{#profit by views_per_post} -This means that your annual profit is ${=annual_revenue - annual_expenses:profit}. +{#profit by placements} diff --git a/src/texts/freelancer.txt b/src/texts/freelancer.txt index 3cd7713..8c87385 100644 --- a/src/texts/freelancer.txt +++ b/src/texts/freelancer.txt @@ -1,15 +1,3 @@ -:green_book: You are a freelance writer. +:green_book: You are a freelance writer. You're able to charge ${0.01-3.00:rate} per word. :money_bag: You get {1-6:monthly_assignments} assignments a month, at an average length of {300-3000:words} words. This means that you make ${=rate * monthly_assignments * words:monthly} a month (assuming they pay), or ${=12*monthly:annual} a year, assuming this holds steady and everyone pays. :money_with_wings: Taxes at {20:average_tax}% will leave you with ${=annual * (1 - average_tax/100):after_taxes}. If you pay ${2000:rent} a month in rent and ${683:insurance} a month for insurance this leaves you with ${=after_taxes - (rent * 12) - (insurance * 12):annual_profit} for :children_crossing: everything :takeout_box: else :airplane: you :pill: need, or just for you.:+1: -You're able to charge ${0.01-3.00:rate} per word. - -:money_bag: You get {1-6:assignments} assignments a month, at an average length of {300-3000:words} words. - -This means that you make ${=rate * assignments * words:monthly} a month (assuming they pay), or ${=12*monthly:annual} a year, assuming this holds steady and everyone pays. - -:money_with_wings: Taxes at {20:average_tax}% will leave you with ${=annual * (1 - average_tax/100):after_taxes}. - -If you pay ${2000:rent} a month in rent and ${683:insurance} a month for insurance this leaves you with - -${=after_taxes - (rent * 12) - (insurance * 12):profit} - -for :children_crossing: everything :takeout_box: else :airplane: you :pill: need, or just for you.:+1: +{#annual_profit by monthly_assignments} diff --git a/src/texts/hankies.txt b/src/texts/hankies.txt index 65d2104..8100d98 100644 --- a/src/texts/hankies.txt +++ b/src/texts/hankies.txt @@ -2,4 +2,6 @@ If you buy boxes of {65:perbox} tissues and blow your :nose: {5:blows} times a day, in {5:years} years you'd use {=(blows*(365*years))/perbox:boxes} boxes. At ${1.50:costperbox} per box, that would cost you ${=costperbox * boxes:tissuespend}. :money_with_wings: -If you switched to a set of ${5-15:hankiespend} hankerchiefs :sneezing_face: you'd save ${= tissuespend - hankiespend :savings} and several trees. :deciduous_tree: :sunflower: :deciduous_tree: :tulip: :deciduous_tree: :rose: :deciduous_tree: \ No newline at end of file +If you switched to a set of ${5-15:hankiespend} hankerchiefs :sneezing_face: you'd save ${= tissuespend - hankiespend :savings} and several trees. :deciduous_tree: :sunflower: :deciduous_tree: :tulip: :deciduous_tree: :rose: :deciduous_tree: + +{#savings by blows} diff --git a/src/texts/pfwiki.txt b/src/texts/pfwiki.txt new file mode 100644 index 0000000..38b0e20 --- /dev/null +++ b/src/texts/pfwiki.txt @@ -0,0 +1,14 @@ +Probable Futures has a wiki. It has {10:theme_count} themes and each theme takes {80:theme_hours} hours to fully craft, research, and write. + +Each theme has {5:major_count} major entries and each minor theme takes {40:major_hours} hours to research and write. + +Each major theme links to {20:entry_count} entries, and each entry takes {6:entry_hours} hours to craft. + +This means we've got {=theme_count + (theme_count * major_count) + (theme_count * major_count * entry_count):nodes} individual content items. +Thus we have a total of {= +theme_count * theme_hours ++ (theme_count * major_count * major_hours) ++ (theme_count * major_count * entry_count * entry_hours) +:total_hours} total hours, or {=total_hours/40/4:months} months ({=months/12:total_years} years) of human effort. + +{#total_hours by theme_count} diff --git a/src/texts/pop.txt b/src/texts/pop.txt new file mode 100644 index 0000000..62c9721 --- /dev/null +++ b/src/texts/pop.txt @@ -0,0 +1,3 @@ +Population. The population in 1997 was {5.85:pop} billion. The rate of population growth is {-1.36-1.36:rate}%. In {100:years} years ({=1997+years:year}AD) human population will increase to {=pop * E^((rate/100)*years):future_pop} billion people. + +{#future_pop by years} diff --git a/src/texts/soda.txt b/src/texts/soda.txt index 2e3b921..a4ff65c 100644 --- a/src/texts/soda.txt +++ b/src/texts/soda.txt @@ -1,13 +1,15 @@ -:cup_with_straw: You drink {1-4:sodas_daily} Diet Cokes per day, at a cost of ${0.00-3.50:soda_cost} per Diet Coke. (${=sodas_daily * soda_cost * 365.25/12:monthly} a month). If you'd put that into a fund with a {6.00:rate}% annual rate, you'd have +:cup_with_straw: You drink {1-4:daily_sodas} Diet Cokes per day, at a cost of ${0.00-3.50:cost_per_soda} per Diet Coke. (${=daily_sodas * cost_per_soda * 365.25/12:monthly_costs} a month). If you'd put that into a fund with a {-6.00-6.00:fund_rate}% annual rate, you'd have ${= - t = 12; - period = 10 * t; - i = rate/100; - f() = (i>0.0000001); - interest = if(f(i),i,0.0000001); - adjusted = interest/t; - monthly * ((((1 + adjusted)^period) - 1) / adjusted) +t = 12; +period = 10 * t; +i = fund_rate/100; +f() = (i>0.0000001 or i < 0); +interest = if(f(i),i,0.0000001); +adjusted = interest/t; + +monthly_costs * ((((1 + adjusted)^period) - 1) / adjusted) + +:total_saved} in a decade. -:total} in a decade. diff --git a/src/texts/vc.txt b/src/texts/vc.txt index 6dc5944..5248e21 100644 --- a/src/texts/vc.txt +++ b/src/texts/vc.txt @@ -1,14 +1,13 @@ -You have a fund with ${20000000-1000000000:cash_out}. You make {0-200:investments} investments of ${=(cash_out / investments):individual_investment} each. - -{0-80:failure}% of those investments fail outright. {0-20:success}% achieve significant growth. That means that you lose your shirt on - +You have a fund with ${20-4000:cash_out} mm. You make {0-200:investments} investments of ${=(cash_out / investments):individual_investment} each. {!=round(random(100)):failure}% of those investments fail outright. {0-20:success}% achieve significant growth. That means that you lose your shirt on {=ceil(investments * (failure/100)):failures} companies, - don't lose money on {=ceil(investments * (100 - failure - success)/100):averages} investments - and achieve breakout growth on {=floor(investments * (success/100)):successes} investments. When you take an average of the successful ones you find that your investment in only those firms increased in value {1.0-200.0:multiple} times what you invested. :money_bag: That means you made ${=successes * multiple * individual_investment:cash_in}, and your exit multiple is {=cash_in/cash_out:exit_multiple}x. Good job! (As long as it was way above 1x, better if it's above 5x, otherwise bad job.) :+1: :+1: :+1: :flag-us: :flag-us: :flag-us: +XXX {=if(exit_multiple > 5, text("good"), text("bad")):job} + +{#failures by success} + diff --git a/yarn.lock b/yarn.lock index 09c0263..92e6bdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -988,7 +988,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== @@ -1244,6 +1244,113 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@nivo/annotations@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.61.0.tgz#f09fc99f018e0d0c39f01ed9447e1a2cc0c5e6df" + integrity sha512-i2JKYeMEPC+zwgN/p+hVRWUJ4aee+kE8BfMzCLt1/a+rsfT+v2v5kj12zx072teoaQt53lOi1GdV2lEYA6HJpg== + dependencies: + "@nivo/colors" "0.61.0" + "@nivo/core" "0.61.0" + lodash "^4.17.11" + react-motion "^0.5.2" + +"@nivo/axes@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.61.0.tgz#f22852b56f02d99867eb27fa3be349a75f749cbb" + integrity sha512-U0rHIYNnwt03dFFBz0aosfd5nFIRVD1Wff5DwVeM7PouBZM3AsLVWeLlUWLWOmg+BHftqhbOGTOoZN2SjU7bwA== + dependencies: + "@nivo/core" "0.61.0" + d3-format "^1.3.2" + d3-time "^1.0.11" + d3-time-format "^2.1.3" + lodash "^4.17.11" + react-motion "^0.5.2" + +"@nivo/colors@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.61.0.tgz#5af2a6d8b1d22c786950cc9fb07c216a80a541ff" + integrity sha512-yeb5YsQDoN7D5DbBIhHTnVn0bX+4ObNVGyJAepSn64zNPiskO3/o1FnQw70aIkN4O7BDXb/vVPrftq6wSwQtvQ== + dependencies: + d3-color "^1.2.3" + d3-scale "^3.0.0" + d3-scale-chromatic "^1.3.3" + lodash.get "^4.4.2" + lodash.isplainobject "^4.0.6" + react-motion "^0.5.2" + +"@nivo/core@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.61.0.tgz#66581a0e2dc4f8f802bd0f1515f1f2269b0595e0" + integrity sha512-7DGsTW12vfUvMIr9jl28KZaJMJqMMhEJi1lW1R2TPMTg+qSG01v6tqMtcEwUp4bdAdr3n57ytLWSgqKWXkwjvw== + dependencies: + "@nivo/tooltip" "0.61.0" + d3-color "^1.2.3" + d3-format "^1.3.2" + d3-hierarchy "^1.1.8" + d3-interpolate "^1.3.2" + d3-scale "^3.0.0" + d3-scale-chromatic "^1.3.3" + d3-shape "^1.3.5" + d3-time-format "^2.1.3" + lodash "^4.17.11" + react-measure "^2.2.4" + react-motion "^0.5.2" + recompose "^0.30.0" + +"@nivo/legends@0.61.1": + version "0.61.1" + resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.61.1.tgz#54ac123b25449e7663067b3e019c7d3a9429a6f9" + integrity sha512-bKVXffFwTKGySZRUf6sdVzWUb5jjGffuvRczs0giQCu8OUgeJIi0IOOyYhHtww+rTVGIKAi0xPGQTQnF4kpufA== + dependencies: + "@nivo/core" "0.61.0" + lodash "^4.17.11" + recompose "^0.30.0" + +"@nivo/line@^0.61.1": + version "0.61.1" + resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.61.1.tgz#7e857c4abababef3e019211deff9feb347cec788" + integrity sha512-PZFGgcj+IlDtZG6kTdBrGJ5cJvs1w5kaAI86IaH5AXJ0MQqVIZYWgbXdf5Vg6Hv2ouLmwNwONA/ORACKVkG+YA== + dependencies: + "@nivo/annotations" "0.61.0" + "@nivo/axes" "0.61.0" + "@nivo/colors" "0.61.0" + "@nivo/core" "0.61.0" + "@nivo/legends" "0.61.1" + "@nivo/scales" "0.61.0" + "@nivo/tooltip" "0.61.0" + "@nivo/voronoi" "0.61.0" + d3-shape "^1.3.5" + lodash "^4.17.11" + react-motion "^0.5.2" + +"@nivo/scales@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.61.0.tgz#48bcc94941271f1f23c353f1da1ee4da1af981ef" + integrity sha512-7MoxxecMDvpK9L0Py/drEQxG/4YAzo9KBvLzo3/KjInc1VEscpDkpVSSN5tmg1qbQE3WCrziec4JuH9q1V/Q7g== + dependencies: + d3-scale "^3.0.0" + d3-time-format "^2.1.3" + lodash "^4.17.11" + +"@nivo/tooltip@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.61.0.tgz#bf8b06a18f41fc9072e3f2d9591ebbb9b45c2a54" + integrity sha512-CqEJ4v1jSikZ3fmuSJVb1UYF8fuCo/c7JFB+LsNH9X01IERSufO3tSNBTzJ3JugCminQpbo6/R7oBhNwZFqSxw== + dependencies: + "@nivo/core" "0.61.0" + react-measure "^2.2.4" + react-motion "^0.5.2" + +"@nivo/voronoi@0.61.0": + version "0.61.0" + resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.61.0.tgz#977da00f7805d57f4d315116785503c611570ef5" + integrity sha512-VVB7BW8GX8Gq9kTf/L52HrCD//4PAT6RTeDwb4N8BpSNfyfmBXacU9U9RMK7HAJjxICzEuxam75/oTCjX6iVBg== + dependencies: + "@nivo/core" "0.61.0" + d3-delaunay "^5.1.1" + d3-scale "^3.0.0" + recompose "^0.30.0" + "@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" @@ -2046,7 +2153,7 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@~2.0.6: +asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -2307,6 +2414,11 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -2747,6 +2859,11 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3118,7 +3235,12 @@ core-js-pure@^3.0.0: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== -core-js@^2.4.0: +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.4.0, core-js@^2.6.10: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -3453,6 +3575,105 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +"d3-array@1.2.0 - 2": + version "2.4.0" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.4.0.tgz#87f8b9ad11088769c82b5ea846bcb1cc9393f242" + integrity sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw== + +d3-array@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1, d3-color@^1.2.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-delaunay@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.2.1.tgz#0c4b280eb00194986ac4a3df9c81d32bf216cb36" + integrity sha512-ZZdeJl6cKRyqYVFYK+/meXvWIrAvZsZTD7WSxl4OPXCmuXNgDyACAClAJHD63zL25TA+IJGURUNO7rFseNFCYw== + dependencies: + delaunator "4" + +d3-format@1, d3-format@^1.3.2: + version "1.4.4" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" + integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== + +d3-hierarchy@^1.1.8: + version "1.1.9" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" + integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== + +d3-interpolate@1, d3-interpolate@^1.2.0, d3-interpolate@^1.3.0, d3-interpolate@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-scale-chromatic@^1.3.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98" + integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg== + dependencies: + d3-color "1" + d3-interpolate "1" + +d3-scale@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" + integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-scale@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.1.tgz#da1684adce7261b4bc7a76fe193d887f0e909e69" + integrity sha512-huz5byJO/6MPpz6Q8d4lg7GgSpTjIZW/l+1MQkzKfu2u8P6hjaXaStOpmyrD6ymKoW87d2QVFCKvSjLwjzx/rA== + dependencies: + d3-array "1.2.0 - 2" + d3-format "1" + d3-interpolate "^1.2.0" + d3-time "1" + d3-time-format "2" + +d3-shape@^1.2.0, d3-shape@^1.3.5: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-time-format@2, d3-time-format@^2.1.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" + integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== + dependencies: + d3-time "1" + +d3-time@1, d3-time@^1.0.11: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -3508,6 +3729,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js-light@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.0.tgz#ca7faf504c799326df94b0ab920424fdfc125348" + integrity sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -3580,6 +3806,11 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +delaunator@4: + version "4.0.1" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957" + integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag== + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3697,6 +3928,13 @@ dom-converter@^0.2: dependencies: utila "~0.4" +dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -3851,6 +4089,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -4415,6 +4660,19 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbjs@^0.8.1: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -4735,6 +4993,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-node-dimensions@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz#fb7b4bb57060fb4247dd51c9d690dfbec56b0823" + integrity sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -4997,6 +5260,11 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^2.3.1: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== + hoist-non-react-statics@^3.1.0: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -5163,7 +5431,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5634,7 +5902,7 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -5707,6 +5975,14 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6506,11 +6782,26 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" @@ -6541,12 +6832,17 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5: +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@~4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -6623,6 +6919,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-expression-evaluator@^1.2.14: + version "1.2.22" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz#c14dcb3d8b4d150e5dcea9c68c8dad80309b0d5e" + integrity sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6973,6 +7274,14 @@ no-case@^3.0.3: lower-case "^2.0.1" tslib "^1.10.0" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" @@ -7594,6 +7903,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -8440,6 +8754,13 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + promise@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -8455,7 +8776,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.4" -prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -8572,7 +8893,7 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -raf@^3.4.1: +raf@^3.1.0, raf@^3.4.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== @@ -8695,6 +9016,40 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-i resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-measure@^2.2.4: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-measure/-/react-measure-2.3.0.tgz#75835d39abec9ae13517f35a819c160997a7a44e" + integrity sha512-dwAvmiOeblj5Dvpnk8Jm7Q8B4THF/f1l1HtKVi0XDecsG6LXwGvzV5R1H32kq3TW6RW64OAf5aoQxpIgLa4z8A== + dependencies: + "@babel/runtime" "^7.2.0" + get-node-dimensions "^1.2.1" + prop-types "^15.6.2" + resize-observer-polyfill "^1.5.0" + +react-motion@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" + integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== + dependencies: + performance-now "^0.2.0" + prop-types "^15.5.8" + raf "^3.1.0" + +react-resize-detector@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" + integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ== + dependencies: + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" + prop-types "^15.6.0" + resize-observer-polyfill "^1.5.0" + react-router-dom@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" @@ -8784,6 +9139,26 @@ react-scripts@3.4.1: optionalDependencies: fsevents "2.1.2" +react-smooth@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.5.tgz#94ae161d7951cdd893ccb7099d031d342cb762ad" + integrity sha512-eW057HT0lFgCKh8ilr0y2JaH2YbNcuEdFpxyg7Gf/qDKk9hqGMyXryZJ8iMGJEuKH0+wxS0ccSsBBB3W8yCn8w== + dependencies: + lodash "~4.17.4" + prop-types "^15.6.0" + raf "^3.4.0" + react-transition-group "^2.5.0" + +react-transition-group@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" + integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== + dependencies: + dom-helpers "^3.4.0" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + react@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" @@ -8872,6 +9247,42 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +recharts-scale@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.3.tgz#040b4f638ed687a530357292ecac880578384b59" + integrity sha512-t8p5sccG9Blm7c1JQK/ak9O8o95WGhNXD7TXg/BW5bYbVlr6eCeRBNpgyigD4p6pSSMehC5nSvBUPj6F68rbFA== + dependencies: + decimal.js-light "^2.4.1" + +recharts@^1.8.5: + version "1.8.5" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.8.5.tgz#ca94a3395550946334a802e35004ceb2583fdb12" + integrity sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg== + dependencies: + classnames "^2.2.5" + core-js "^2.6.10" + d3-interpolate "^1.3.0" + d3-scale "^2.1.0" + d3-shape "^1.2.0" + lodash "^4.17.5" + prop-types "^15.6.0" + react-resize-detector "^2.3.0" + react-smooth "^1.0.5" + recharts-scale "^0.4.2" + reduce-css-calc "^1.3.0" + +recompose@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" + integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== + dependencies: + "@babel/runtime" "^7.0.0" + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^2.3.1" + react-lifecycles-compat "^3.0.2" + symbol-observable "^1.0.4" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -8887,6 +9298,22 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-css-calc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== + dependencies: + balanced-match "^1.0.0" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -9065,6 +9492,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -9393,7 +9825,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -10022,6 +10454,11 @@ svgo@^1.0.0, svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -10294,6 +10731,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +ua-parser-js@^0.7.18: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -10690,7 +11132,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@^3.0.0: +whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==