From 7c4c9348f3b9d788ad05473709d150553246edbc Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Wed, 12 Aug 2020 23:31:12 +0200 Subject: [PATCH] initial commit --- .gitignore | 51 + .prettierrc.json | 6 + .vscode/launch.json | 12 + .vscode/settings.json | 3 + LICENSE.md | 21 + README.md | 76 + package.json | 13 + playground/package.json | 52 + playground/src/common/hotComponent.tsx | 49 + playground/src/common/utils.ts | 53 + playground/src/components/App.tsx | 35 + playground/src/components/DemoView.tsx | 25 + playground/src/components/EditorView.tsx | 25 + playground/src/components/JsonEditor.tsx | 107 + playground/src/components/MainView.tsx | 28 + .../components/PlaygroundDocumentEditor.tsx | 312 + playground/src/components/Select.tsx | 49 + playground/src/components/VSCodeBrigde.tsx | 59 + .../VisualizationWithEditorView.tsx | 159 + playground/src/components/modelCount.ts | 1 + playground/src/demo.editable.json | 55 + playground/src/index.tsx | 9 + playground/src/model/JsonDataSource.tsx | 123 + playground/src/model/Model.ts | 81 + playground/src/model/MonacoBridge.ts | 19 + playground/src/model/QueryController.ts | 38 + .../src/model/VisualizationDataSource.ts | 22 + playground/src/model/lzmaCompressor.ts | 36 + playground/src/model/types.d.ts | 9 + playground/src/style.scss | 70 + playground/src/visualizations.ts | 21 + playground/src/vscode-dark.scss | 344 + playground/src/vscode-light.scss | 307 + playground/tsconfig.json | 16 + playground/webpack.config.ts | 74 + simple-demo/package.json | 38 + simple-demo/src/index.tsx | 47 + simple-demo/src/style.scss | 7 + simple-demo/tsconfig.json | 16 + simple-demo/webpack.config.ts | 74 + tslint.json | 6 + visualization-bundle/README.md | 45 + visualization-bundle/package.json | 65 + visualization-bundle/src/consts.ts | 3 + visualization-bundle/src/index.ts | 1 + .../src/utils/LazyLoadable.tsx | 30 + visualization-bundle/src/utils/index.ts | 13 + .../ast-visualizer/AstVisualizer.tsx | 270 + .../src/visualizers/ast-visualizer/index.tsx | 126 + .../src/visualizers/ast-visualizer/style.scss | 23 + .../src/visualizers/ast-visualizer/types.d.ts | 13 + .../GraphvizDotVisualizer.tsx | 49 + .../graph/dot-graphviz-visualizer/index.tsx | 25 + .../graph/dot-graphviz-visualizer/types.d.ts | 9 + .../GraphvizGraphVisualizer.tsx | 36 + .../graph/graph-graphviz-visualizer/index.tsx | 20 + .../VisJsGraphViewer.tsx | 96 + .../graph/graph-visjs-visualizer/index.tsx | 27 + .../src/visualizers/graph/index.ts | 3 + .../src/visualizers/graph/sGraph.ts | 35 + .../grid-visualizer/GridVisualizer.tsx | 377 + .../src/visualizers/grid-visualizer/index.tsx | 70 + .../visualizers/grid-visualizer/style.scss | 14 + .../visualizers/image-visualizer/index.tsx | 70 + visualization-bundle/src/visualizers/index.ts | 11 + .../monaco-text-visualizer/MonacoEditor.tsx | 103 + .../monaco-text-visualizer/index.tsx | 40 + .../monaco-text-visualizer/style.scss | 22 + .../perspective-table-visualizer/index.tsx | 76 + .../plotly-visualizer/PlotlyViewer.tsx | 187 + .../visualizers/plotly-visualizer/index.tsx | 47 + .../simple-text-visualizer/index.tsx | 33 + .../simple-text-visualizer/style.scss | 6 + .../visualizers/source-visualizer/index.tsx | 24 + .../visualizers/source-visualizer/style.scss | 6 + .../visualizers/svg-visualizer/SvgViewer.tsx | 115 + .../src/visualizers/svg-visualizer/index.tsx | 25 + .../src/visualizers/svg-visualizer/style.scss | 5 + .../src/visualizers/tree-visualizer/Point.ts | 256 + .../tree-visualizer/SvgElements.tsx | 90 + .../src/visualizers/tree-visualizer/Views.tsx | 545 + .../src/visualizers/tree-visualizer/index.tsx | 121 + .../visualizers/tree-visualizer/style.scss | 162 + visualization-bundle/style.scss | 6 + visualization-bundle/tsconfig.json | 18 + visualization-core/README.md | 59 + visualization-core/architecture.drawio.svg | 442 + visualization-core/package.json | 45 + visualization-core/src/ReactVisualization.tsx | 56 + visualization-core/src/Theme.ts | 9 + visualization-core/src/VisualizationData.tsx | 16 + visualization-core/src/VisualizationView.tsx | 42 + visualization-core/src/Visualizer.tsx | 37 + visualization-core/src/VisualizerRegistry.ts | 82 + visualization-core/src/createVisualizer.tsx | 29 + visualization-core/src/index.tsx | 7 + visualization-core/tsconfig.json | 18 + yarn.lock | 8792 +++++++++++++++++ 98 files changed, 15500 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 package.json create mode 100644 playground/package.json create mode 100644 playground/src/common/hotComponent.tsx create mode 100644 playground/src/common/utils.ts create mode 100644 playground/src/components/App.tsx create mode 100644 playground/src/components/DemoView.tsx create mode 100644 playground/src/components/EditorView.tsx create mode 100644 playground/src/components/JsonEditor.tsx create mode 100644 playground/src/components/MainView.tsx create mode 100644 playground/src/components/PlaygroundDocumentEditor.tsx create mode 100644 playground/src/components/Select.tsx create mode 100644 playground/src/components/VSCodeBrigde.tsx create mode 100644 playground/src/components/VisualizationWithEditorView.tsx create mode 100644 playground/src/components/modelCount.ts create mode 100644 playground/src/demo.editable.json create mode 100644 playground/src/index.tsx create mode 100644 playground/src/model/JsonDataSource.tsx create mode 100644 playground/src/model/Model.ts create mode 100644 playground/src/model/MonacoBridge.ts create mode 100644 playground/src/model/QueryController.ts create mode 100644 playground/src/model/VisualizationDataSource.ts create mode 100644 playground/src/model/lzmaCompressor.ts create mode 100644 playground/src/model/types.d.ts create mode 100644 playground/src/style.scss create mode 100644 playground/src/visualizations.ts create mode 100644 playground/src/vscode-dark.scss create mode 100644 playground/src/vscode-light.scss create mode 100644 playground/tsconfig.json create mode 100644 playground/webpack.config.ts create mode 100644 simple-demo/package.json create mode 100644 simple-demo/src/index.tsx create mode 100644 simple-demo/src/style.scss create mode 100644 simple-demo/tsconfig.json create mode 100644 simple-demo/webpack.config.ts create mode 100644 tslint.json create mode 100644 visualization-bundle/README.md create mode 100644 visualization-bundle/package.json create mode 100644 visualization-bundle/src/consts.ts create mode 100644 visualization-bundle/src/index.ts create mode 100644 visualization-bundle/src/utils/LazyLoadable.tsx create mode 100644 visualization-bundle/src/utils/index.ts create mode 100644 visualization-bundle/src/visualizers/ast-visualizer/AstVisualizer.tsx create mode 100644 visualization-bundle/src/visualizers/ast-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/ast-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/ast-visualizer/types.d.ts create mode 100644 visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/GraphvizDotVisualizer.tsx create mode 100644 visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/types.d.ts create mode 100644 visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/GraphvizGraphVisualizer.tsx create mode 100644 visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/VisJsGraphViewer.tsx create mode 100644 visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/graph/index.ts create mode 100644 visualization-bundle/src/visualizers/graph/sGraph.ts create mode 100644 visualization-bundle/src/visualizers/grid-visualizer/GridVisualizer.tsx create mode 100644 visualization-bundle/src/visualizers/grid-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/grid-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/image-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/index.ts create mode 100644 visualization-bundle/src/visualizers/monaco-text-visualizer/MonacoEditor.tsx create mode 100644 visualization-bundle/src/visualizers/monaco-text-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/monaco-text-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/perspective-table-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/plotly-visualizer/PlotlyViewer.tsx create mode 100644 visualization-bundle/src/visualizers/plotly-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/simple-text-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/source-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/source-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/svg-visualizer/SvgViewer.tsx create mode 100644 visualization-bundle/src/visualizers/svg-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/svg-visualizer/style.scss create mode 100644 visualization-bundle/src/visualizers/tree-visualizer/Point.ts create mode 100644 visualization-bundle/src/visualizers/tree-visualizer/SvgElements.tsx create mode 100644 visualization-bundle/src/visualizers/tree-visualizer/Views.tsx create mode 100644 visualization-bundle/src/visualizers/tree-visualizer/index.tsx create mode 100644 visualization-bundle/src/visualizers/tree-visualizer/style.scss create mode 100644 visualization-bundle/style.scss create mode 100644 visualization-bundle/tsconfig.json create mode 100644 visualization-core/README.md create mode 100644 visualization-core/architecture.drawio.svg create mode 100644 visualization-core/package.json create mode 100644 visualization-core/src/ReactVisualization.tsx create mode 100644 visualization-core/src/Theme.ts create mode 100644 visualization-core/src/VisualizationData.tsx create mode 100644 visualization-core/src/VisualizationView.tsx create mode 100644 visualization-core/src/Visualizer.tsx create mode 100644 visualization-core/src/VisualizerRegistry.ts create mode 100644 visualization-core/src/createVisualizer.tsx create mode 100644 visualization-core/src/index.tsx create mode 100644 visualization-core/tsconfig.json create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9da92cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +dist +api + +dist/ + +.npmrc + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.js diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..a6650fd --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 4, + "semi": true, + "useTabs": true +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..7c4cdab --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}/playground" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4bc0450 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "tasksStatusbar.taskLabelFilter": "dev" +} diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..53da587 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Henning Dieterichs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..dbdd6ed --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# Visualization Framework + +## Installation + +You can use yarn to install the core library: + +``` +yarn add @hediet/visualization-core +``` + +If you want to use the existing visualizations, add the bundle library: + +``` +yarn add @hediet/visualization-bundle +``` + +## Usage + +Import `@hediet/visualization-bundle` to register all default visualizations: + +```tsx +// This registers all visualizations +import "@hediet/visualization-bundle"; +``` + +Don't forget to import the styles in your scss file: + +```scss +@import "~@hediet/visualization-bundle/style.scss"; +``` + +Use `globalVisualizationFactory` to visualize some data: + +```tsx +import { globalVisualizationFactory } from "@hediet/visualization-core"; + +const data = { + kind: { graph: true as true }, + nodes: [ + { id: "1", label: "1" }, + { id: "2", label: "2", color: "orange" }, + { id: "3", label: "3" }, + ], + edges: [ + { from: "1", to: "2", color: "red" }, + { from: "1", to: "3" }, + ], +}; + +const visualizations = globalVisualizationFactory.getVisualizations( + data, + /* preferred visualization id */ undefined +); +// `visualizations.bestVisualization` is the visualization that is best suited to visualize the data. +// `visualiztaions.allVisualizations` contains all other available visualizations than can visualize the data. +``` + +If you use react, you can use the `VisualizationView` component to render a visualization: + +```tsx +import { VisualizationView, Theme } from "@hediet/visualization-core"; + +// const visualizations = ... + +function App() { + if (!visualizations.bestVisualization) { + return null; + } + return ( + + ); +} +``` diff --git a/package.json b/package.json new file mode 100644 index 0000000..84ce935 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "workspaces": [ + "./visualization-core", + "./visualization-bundle", + "./simple-demo", + "./playground" + ], + "scripts": {}, + "devDependencies": { + "prettier": "^1.19.1" + } +} diff --git a/playground/package.json b/playground/package.json new file mode 100644 index 0000000..ce9ed48 --- /dev/null +++ b/playground/package.json @@ -0,0 +1,52 @@ +{ + "name": "playground", + "version": "0.0.1", + "license": "MIT", + "scripts": { + "dev": "webpack-dev-server --hot --port 8080", + "build": "webpack", + "pub": "gh-pages -d dist" + }, + "dependencies": { + "@blueprintjs/core": "^3.23.1", + "@hediet/std": "^0.6.0", + "@hediet/semantic-json": "^0.3.11", + "blueprintjs": "^0.0.8", + "classnames": "^2.2.6", + "mobx": "^5.15.4", + "mobx-react": "^6.1.8", + "monaco-editor": "^0.20.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "messagepack": "^1.1.10", + "base64-js": "^1.3.1", + "lzma": "^2.3.2", + "@hediet/monaco-editor-react": "^0.1.0" + }, + "devDependencies": { + "gh-pages": "^2.2.0", + "@types/html-webpack-plugin": "^3.2.2", + "@types/webpack": "^4.41.6", + "@types/classnames": "^2.2.9", + "@types/react": "^16.9.22", + "@types/react-dom": "^16.9.5", + "clean-webpack-plugin": "^3.0.0", + "css-loader": "^3.4.2", + "file-loader": "^5.1.0", + "fork-ts-checker-webpack-plugin": "^4.0.4", + "html-webpack-plugin": "^3.2.0", + "monaco-editor-webpack-plugin": "^1.9.0", + "raw-loader": "^4.0.0", + "sass-loader": "^8.0.2", + "style-loader": "^1.1.3", + "ts-loader": "^6.2.1", + "ts-node": "^8.6.2", + "typescript": "^3.8.2", + "webpack": "^4.41.6", + "webpack-cli": "^3.3.11", + "webpack-dev-server": "^3.10.3", + "@types/base64-js": "^1.3.0", + "source-map-loader": "^1.0.1", + "less-loader": "^6.2.0" + } +} diff --git a/playground/src/common/hotComponent.tsx b/playground/src/common/hotComponent.tsx new file mode 100644 index 0000000..520f54a --- /dev/null +++ b/playground/src/common/hotComponent.tsx @@ -0,0 +1,49 @@ +import Module = require("module"); +import { observer } from "mobx-react"; +import * as React from "react"; +import { observable, runInAction } from "mobx"; + +type ReactComponent

= + | React.ComponentClass

+ | React.FunctionComponent

; + +const allComponents = new Map(); + +export function hotComponent( + module: Module +): (Component: T) => T { + return (component: T): T => { + const key = JSON.stringify({ id: module.id, name: component.name }); + + let result = allComponents.get(key); + if (!result) { + result = observable({ component: component }); + allComponents.set(key, result); + } else { + setTimeout(() => { + runInAction(`Update Component ${component.name}`, () => { + result!.component = component; + }); + }, 0); + } + + const m = module as { + hot?: { + accept: (( + componentName: string, + callback: () => void + ) => void) & + ((callback: () => void) => void); + }; + }; + + if (m.hot) { + m.hot.accept(() => {}); + } + + return observer((props: any) => { + const C = result!.component; + return ; + }) as any; + }; +} diff --git a/playground/src/common/utils.ts b/playground/src/common/utils.ts new file mode 100644 index 0000000..a7d85ac --- /dev/null +++ b/playground/src/common/utils.ts @@ -0,0 +1,53 @@ +import { Disposable } from "@hediet/std/disposable"; +import { observable } from "mobx"; +import { wait } from "@hediet/std/timer"; + +export function ref( + obj: T, + key: TKey +): Ref { + return new Ref( + () => obj[key], + v => (obj[key] = v) + ); +} + +export interface IRef { + get: () => T; + set: (value: T) => void; +} + +export class Ref implements IRef { + constructor( + public readonly get: () => T, + public readonly set: (value: T) => void + ) {} + + public map(to: (t: T) => TNew, from: (tNew: TNew) => T): Ref { + return new Ref( + () => to(this.get()), + val => this.set(from(val)) + ); + } +} + +export class Animator { + public readonly dispose = Disposable.fn(); + + @observable public index: number = 0; + + constructor(private readonly times: number[]) { + if (times.length > 1) { + this.run(); + } + } + + private async run() { + let index = 0; + while (true) { + await wait(this.times[index]); + index = (index + 1) % this.times.length; + this.index = index; + } + } +} diff --git a/playground/src/components/App.tsx b/playground/src/components/App.tsx new file mode 100644 index 0000000..df3868d --- /dev/null +++ b/playground/src/components/App.tsx @@ -0,0 +1,35 @@ +import React = require("react"); +import { hotComponent } from "../common/hotComponent"; +import { Model } from "../model/Model"; +import { MainView } from "./MainView"; +import { observable, runInAction } from "mobx"; +import { observer } from "mobx-react"; +import "../visualizations"; +import { loadMonaco, getMonaco } from "@hediet/monaco-editor-react"; + +@hotComponent(module) +@observer +export class App extends React.Component { + @observable model: Model | undefined; + + constructor(props: {}) { + super(props); + this.init(); + } + + async init() { + if (!getMonaco()) { + await loadMonaco(); + } + runInAction(() => { + this.model = new Model(); + }); + } + + render() { + if (!this.model) { + return

Loading...
; + } + return ; + } +} diff --git a/playground/src/components/DemoView.tsx b/playground/src/components/DemoView.tsx new file mode 100644 index 0000000..5c3f2ef --- /dev/null +++ b/playground/src/components/DemoView.tsx @@ -0,0 +1,25 @@ +import { hotComponent } from "../common/hotComponent"; +import { observer } from "mobx-react"; +import React = require("react"); +import { PlaygroundDocumentEditor } from "./PlaygroundDocumentEditor"; +import { observable } from "mobx"; +import { Model } from "../model/Model"; + +const demoData = require("../demo.editable.json"); + +@hotComponent(module) +@observer +export class DemoView extends React.Component<{ model: Model }> { + render() { + return ( +
+

Visualization Playground

+ +
+ ); + } +} diff --git a/playground/src/components/EditorView.tsx b/playground/src/components/EditorView.tsx new file mode 100644 index 0000000..935c4fa --- /dev/null +++ b/playground/src/components/EditorView.tsx @@ -0,0 +1,25 @@ +import React = require("react"); +import { observer } from "mobx-react"; +import { hotComponent } from "../common/hotComponent"; +import { PlaygroundDocumentEditor } from "./PlaygroundDocumentEditor"; +import { VSCodeBrigde } from "./VSCodeBrigde"; +import { Model } from "../model/Model"; + +@hotComponent(module) +@observer +export class EditorView extends React.Component<{ model: Model }> { + private readonly vscodeBridge = new VSCodeBrigde(); + + render() { + return ( +
+

Visualization Playground Editor

+ +
+ ); + } +} diff --git a/playground/src/components/JsonEditor.tsx b/playground/src/components/JsonEditor.tsx new file mode 100644 index 0000000..2b3c333 --- /dev/null +++ b/playground/src/components/JsonEditor.tsx @@ -0,0 +1,107 @@ +import * as React from "react"; +import { observer, disposeOnUnmount } from "mobx-react"; +import { observable, autorun, reaction } from "mobx"; +import { IRef } from "../common/utils"; +import { Serializer, JsonSchemaGenerator } from "@hediet/semantic-json"; +import { MonacoEditor, getLoadedMonaco } from "@hediet/monaco-editor-react"; +import { modelCount } from "./modelCount"; + +@observer +export class JsonEditor extends React.Component<{ + jsonSrc: IRef; + serializer: Serializer; + height?: "dynamic" | "fill"; +}> { + private readonly editorModel = getLoadedMonaco().editor.createModel( + this.props.jsonSrc.get(), + "json", + getLoadedMonaco().Uri.parse( + `inmemory://inmemory/${modelCount.cur++}.main.json` + ) + ); + + constructor(props: any) { + super(props); + + const s = new JsonSchemaGenerator(); + + getLoadedMonaco().languages.json.jsonDefaults.setDiagnosticsOptions({ + validate: true, + schemas: [ + { + uri: "https://visualization.hediet.de/schema/v0.1", + fileMatch: [".main.json"], + schema: s.getJsonSchemaWithDefinitions( + this.props.serializer + ), + }, + ], + }); + } + + render() { + return ( + + ); + } + + private isUpdating = false; + + @disposeOnUnmount _updateModel = reaction( + () => this.props.jsonSrc.get(), + val => { + if (!this.isUpdating) { + this.editorModel.setValue(val); + } + } + ); + + componentDidMount() { + this.editorModel.onDidChangeContent(() => { + this.isUpdating = true; + this.props.jsonSrc.set(this.editorModel.getValue()); + this.isUpdating = false; + }); + } +} + +@observer +export class TypeScriptPreviewEditor extends React.Component<{ + src: string; +}> { + private readonly editorModel = getLoadedMonaco().editor.createModel( + this.props.src, + "typescript", + getLoadedMonaco().Uri.parse( + `inmemory://inmemory/${modelCount.cur++}.ts` + ) + ); + + constructor(props: any) { + super(props); + + const s = new JsonSchemaGenerator(); + + getLoadedMonaco().languages.typescript.typescriptDefaults.setCompilerOptions( + { + noLib: true, + } + ); + getLoadedMonaco().languages.typescript.typescriptDefaults.setDiagnosticsOptions( + { + noSemanticValidation: true, + } + ); + } + + render() { + return ; + } + + componentDidUpdate() { + this.editorModel.setValue(this.props.src); + } +} diff --git a/playground/src/components/MainView.tsx b/playground/src/components/MainView.tsx new file mode 100644 index 0000000..7bb8186 --- /dev/null +++ b/playground/src/components/MainView.tsx @@ -0,0 +1,28 @@ +import React = require("react"); +import { observer } from "mobx-react"; +import { hotComponent } from "../common/hotComponent"; +import { Model } from "../model/Model"; +import { DemoView } from "./DemoView"; +import { getQueryParam } from "../model/QueryController"; +import { EditorView } from "./EditorView"; +import { VisualizationWithEditorView } from "./VisualizationWithEditorView"; + +@hotComponent(module) +@observer +export class MainView extends React.Component<{ model: Model }> { + render() { + const { model } = this.props; + if (model.visualization) { + return ( + + ); + } + if (getQueryParam("editor") !== null) { + return ; + } + return ; + } +} diff --git a/playground/src/components/PlaygroundDocumentEditor.tsx b/playground/src/components/PlaygroundDocumentEditor.tsx new file mode 100644 index 0000000..e54bc74 --- /dev/null +++ b/playground/src/components/PlaygroundDocumentEditor.tsx @@ -0,0 +1,312 @@ +import { hotComponent } from "../common/hotComponent"; +import * as React from "react"; +import { Model, VisualizationModel } from "../model/Model"; +import { + VisualizationData, + VisualizationId, + Theme, + VisualizationFactory, + globalVisualizationFactory, + VisualizationView, + isVisualizationData, + Visualization, + asVisualizationId, +} from "@hediet/visualization-core"; +import { observer } from "mobx-react"; +import { EditableText, Checkbox, Button } from "@blueprintjs/core"; +import { JsonEditor, TypeScriptPreviewEditor } from "./JsonEditor"; +import { ref } from "../common/utils"; +import { computed, observable, runInAction, autorun } from "mobx"; +import { TypeScriptTypeGenerator } from "@hediet/semantic-json"; +import { QueryBinding } from "../model/QueryController"; +import { JsonDataSource } from "../model/JsonDataSource"; +import { Select } from "./Select"; + +@hotComponent(module) +@observer +export class PlaygroundDocumentEditor extends React.Component<{ + document: PlaygroundDocument; + model: Model; + editableCaptions: boolean; +}> { + @observable showLightTheme = false; + @observable showDarkTheme = true; + @observable showTypeScriptTypes = false; + + constructor(props: any) { + super(props); + + new QueryBinding( + "lightTheme", + ref(this, "showLightTheme").map( + val => (val ? ("1" as string) : undefined), + val => val !== undefined + ) + ); + new QueryBinding( + "darkTheme", + ref(this, "showDarkTheme").map( + val => (val ? ("1" as string) : undefined), + val => val !== undefined + ) + ); + new QueryBinding( + "tsTypes", + ref(this, "showTypeScriptTypes").map( + val => (val ? ("1" as string) : undefined), + val => val !== undefined + ) + ); + } + + render() { + const { document, model } = this.props; + return ( +
+
+ + (this.showLightTheme = e.currentTarget.checked) + } + /> + + (this.showDarkTheme = e.currentTarget.checked) + } + /> + + (this.showTypeScriptTypes = e.currentTarget.checked) + } + /> +
+
+ {document.visualizations.map((v, idx) => ( + + ))} +
+
+ ); + } +} + +export interface PlaygroundDocument { + visualizations: VisualizationInfo[]; +} + +export interface VisualizationInfo { + name: string; + dataSrc: string; + preferredVisualizationId: VisualizationId | undefined; +} + +type VisualizationDataResult = + | { + kind: "ok"; + value: VisualizationData; + } + | { kind: "error"; message: string }; + +function parseVisualizationData(json: string): VisualizationDataResult { + try { + const value = JSON.parse(json); + if (isVisualizationData(value)) { + return { kind: "ok", value }; + } + return { + kind: "error", + message: "Data is not welformed visualization data.", + }; + } catch (e) { + return { kind: "error", message: "" + e }; + } +} + +@observer +class VisualizationConfigView extends React.Component<{ + config: VisualizationInfo; + showLightTheme: boolean; + showDarkTheme: boolean; + showTypeScriptTypes: boolean; + model: Model; + editableCaptions: boolean; +}> { + @computed get data(): + | { + kind: "ok"; + visualization: Visualization; + typeScriptDeclarationSrc: string; + availableVisualizations: Visualization[]; + } + | { + kind: "error"; + message: string; + availableVisualizations: Visualization[]; + } { + const r = parseVisualizationData(this.props.config.dataSrc); + + if (r.kind === "error") { + return Object.assign({ availableVisualizations: [] }, r); + } + + const visualizations = globalVisualizationFactory.getVisualizations( + r.value, + this.props.config.preferredVisualizationId + ); + + if (visualizations.bestVisualization) { + const tsTypeGenerator = new TypeScriptTypeGenerator(); + const typeSrc = tsTypeGenerator.getType( + visualizations.bestVisualization.sourceVisualizer.serializer.asSerializer() + ); + const decl = tsTypeGenerator.getDefinitionSource(); + return { + kind: "ok", + visualization: visualizations.bestVisualization, + availableVisualizations: visualizations.allVisualizations, + typeScriptDeclarationSrc: `type ExpectedType = ${typeSrc};\n\n${decl}`, + }; + } + + return { + kind: "error", + message: "No Visualization Available", + availableVisualizations: visualizations.allVisualizations, + }; + } + + render() { + const { + config, + showDarkTheme, + showLightTheme, + showTypeScriptTypes, + editableCaptions, + } = this.props; + + const themes = new Array(); + if (showDarkTheme) { + themes.push(Theme.dark); + } + if (showLightTheme) { + themes.push(Theme.light); + } + + return ( +
+
+

+ (config.name = e)} + /> +

+
+ > + style={{ minWidth: 100 }} + options={this.data.availableVisualizations} + idSelector={v => v.id.toString()} + labelSelector={v => v.name} + selected={ + this.data.kind === "ok" + ? this.data.visualization + : undefined + } + onSelect={e => + runInAction(() => { + config.preferredVisualizationId = e.id; + }) + } + /> +
+ +
+
+ {themes.map((theme, idx) => ( +
+ {this.data.kind === "ok" ? ( + + ) : ( +
+ )} +
+ ))} +
+ +
+ {showTypeScriptTypes && ( +
+ +
+ )} +
+
+ ); + } +} diff --git a/playground/src/components/Select.tsx b/playground/src/components/Select.tsx new file mode 100644 index 0000000..6b16828 --- /dev/null +++ b/playground/src/components/Select.tsx @@ -0,0 +1,49 @@ +import * as React from "react"; +import { HTMLSelect } from "@blueprintjs/core"; + +export class Select extends React.Component<{ + options: T[]; + idSelector: (value: T) => string; + labelSelector: (value: T) => string; + selected: T | undefined; + onSelect: (selected: T) => void; + style: React.CSSProperties; +}> { + render() { + const { + idSelector, + labelSelector, + onSelect, + options, + selected, + style, + } = this.props; + const ops = options.map(o => ({ + value: idSelector(o), + label: labelSelector(o), + })); + let value: string; + if (selected === undefined) { + value = "undefined"; + ops.unshift({ value: "undefined", label: "(Nothing)" }); + } else { + value = idSelector(selected); + } + + return ( + { + const selected = options.find( + o => idSelector(o) === e.currentTarget.value + ); + if (selected) { + onSelect(selected); + } + }} + /> + ); + } +} diff --git a/playground/src/components/VSCodeBrigde.tsx b/playground/src/components/VSCodeBrigde.tsx new file mode 100644 index 0000000..3d76a14 --- /dev/null +++ b/playground/src/components/VSCodeBrigde.tsx @@ -0,0 +1,59 @@ +import { observable, autorun, runInAction, toJS, reaction } from "mobx"; +import { PlaygroundDocument } from "./PlaygroundDocumentEditor"; + +export class VSCodeBrigde { + @observable public currentDocument: PlaygroundDocument = { + visualizations: [], + }; + private ignoreChanges = false; + + constructor() { + window.addEventListener("message", e => { + const msg = e.data as MessageFromHost; + + if (msg.kind === "loadContent") { + this.ignoreChanges = true; + runInAction("Update data", () => { + this.currentDocument = msg.content as PlaygroundDocument; + }); + this.ignoreChanges = false; + } + }); + + reaction( + () => toJS(this.currentDocument), + newContent => { + if (this.ignoreChanges) { + return; + } + this.sendMessage({ + kind: "onChange", + newContent, + }); + } + ); + + this.sendMessage({ + kind: "onInit", + }); + } + + private sendMessage(m: MesssageToHost) { + window.parent.postMessage(m, "*"); + } +} + +type JsonValue = unknown; + +type MessageFromHost = { + kind: "loadContent"; + content: JsonValue; +}; + +type MesssageToHost = + | { kind: "onInit" } + | { kind: "log"; message: string } + | { + kind: "onChange"; + newContent: JsonValue; + }; diff --git a/playground/src/components/VisualizationWithEditorView.tsx b/playground/src/components/VisualizationWithEditorView.tsx new file mode 100644 index 0000000..fb3b4d4 --- /dev/null +++ b/playground/src/components/VisualizationWithEditorView.tsx @@ -0,0 +1,159 @@ +import * as React from "react"; +import { observer, disposeOnUnmount } from "mobx-react"; +import { Model, VisualizationModel } from "../model/Model"; +import classnames = require("classnames"); +import { + VisualizationView, + Theme, + Visualization, +} from "@hediet/visualization-core"; +import { Button, HTMLSelect, ButtonGroup } from "@blueprintjs/core"; +import { observable, computed, runInAction } from "mobx"; +import { QueryBinding } from "../model/QueryController"; +import { ref } from "../common/utils"; +import { Select } from "./Select"; + +@observer +export class VisualizationWithEditorView extends React.Component<{ + model: Model; + visualizationModel: VisualizationModel; +}> { + @observable showEditor = true; + @computed get theme(): Theme { + if (this.themeId === "dark") { + return Theme.dark; + } + return Theme.light; + } + + @observable themeId: string | undefined; + + private readonly themeQueryBinding = new QueryBinding( + "theme", + ref(this, "themeId") + ); + + render() { + const { visualizationModel, model } = this.props; + + return ( +
+
+ +
+ +
+ (this.themeId = e.currentTarget.value)} + /> +
+ + > + style={{ minWidth: 100 }} + options={ + ( + visualizationModel.visualizations || { + allVisualizations: [], + } + ).allVisualizations + } + idSelector={v => v.id.toString()} + labelSelector={v => v.name} + selected={ + visualizationModel.visualizations + ? visualizationModel.visualizations + .bestVisualization + : undefined + } + onSelect={e => + runInAction(() => { + visualizationModel.dataSource.setPreferredVisualizationId( + e.id + ); + }) + } + /> +
+
+ {this.showEditor && ( +
+ {visualizationModel.dataSource.editorView} +
+ )} +
+ {this.renderVisualization()} +
+
+
+ ); + } + + renderVisualization() { + const { visualizationModel: model } = this.props; + const visualizations = model.visualizations; + + if (!visualizations) { + return
No/Invalid Data
; + } + if (!visualizations.bestVisualization) { + return
Data cannot be visualized
; + } + return ( + + ); + } +} diff --git a/playground/src/components/modelCount.ts b/playground/src/components/modelCount.ts new file mode 100644 index 0000000..faae3aa --- /dev/null +++ b/playground/src/components/modelCount.ts @@ -0,0 +1 @@ +export const modelCount = { cur: 0 }; diff --git a/playground/src/demo.editable.json b/playground/src/demo.editable.json new file mode 100644 index 0000000..e1c9ae2 --- /dev/null +++ b/playground/src/demo.editable.json @@ -0,0 +1,55 @@ +{ + "visualizations": [ + { + "dataSrc": "{\r\n \"kind\": { \"text\": true },\r\n \"text\": \"class Test {\\n}\",\r\n \"fileName\": \"foo.ts\"\r\n}", + "name": "Simple Text Visualizer", + "preferredVisualizationId": "simple-text" + }, + { + "dataSrc": "{\r\n \"kind\": { \"text\": true },\r\n \"text\": \"class Test {\\n}\",\r\n \"fileName\": \"foo.ts\"\r\n}", + "name": "Monaco Text Visualizer", + "preferredVisualizationId": "monaco-text" + }, + { + "dataSrc": "{\r\n \"root\": {\r\n \"items\": [\r\n {\r\n \"text\": \"CompilationUnit\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 0,\r\n \"length\": 511\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"UsingDirective\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 0,\r\n \"length\": 13\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"StaticKeyword\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": IdentifierName\"\r\n },\r\n {\r\n \"text\": \"System\",\r\n \"emphasis\": \"style2\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 6,\r\n \"length\": 6\r\n },\r\n \"children\": []\r\n }\r\n ]\r\n },\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"UsingDirective\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 15,\r\n \"length\": 25\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"StaticKeyword\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": QualifiedName\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 21,\r\n \"length\": 18\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"Left\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": IdentifierName\"\r\n },\r\n {\r\n \"text\": \"System\",\r\n \"emphasis\": \"style2\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 21,\r\n \"length\": 6\r\n },\r\n \"children\": []\r\n },\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"Right\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": IdentifierName\"\r\n },\r\n {\r\n \"text\": \"Collections\",\r\n \"emphasis\": \"style2\"\r\n }\r\n ],\r\n \"isMarked\": true,\r\n \"data\": {\r\n \"position\": 28,\r\n \"length\": 11\r\n },\r\n \"children\": []\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"UsingDirective\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 42,\r\n \"length\": 18\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"StaticKeyword\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": QualifiedName\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 48,\r\n \"length\": 11\r\n },\r\n \"children\": [\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"Left\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": IdentifierName\"\r\n },\r\n {\r\n \"text\": \"System\",\r\n \"emphasis\": \"style2\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 48,\r\n \"length\": 6\r\n },\r\n \"children\": []\r\n },\r\n {\r\n \"items\": [\r\n {\r\n \"text\": \"Right\",\r\n \"emphasis\": \"style1\"\r\n },\r\n {\r\n \"text\": \": IdentifierName\"\r\n },\r\n {\r\n \"text\": \"Linq\",\r\n \"emphasis\": \"style2\"\r\n }\r\n ],\r\n \"isMarked\": false,\r\n \"data\": {\r\n \"position\": 55,\r\n \"length\": 4\r\n },\r\n \"children\": []\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n \"kind\": {\r\n \"tree\": true\r\n }\r\n}", + "name": "Tree Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\":{ \"plotly\": true },\r\n \"data\":[\r\n { \"y\": [1, 2, 4, 8, 16] },\r\n { \"y\": [14, 3, 0, 15, 10] }\r\n ]\r\n}", + "name": "Plotly Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\": { \"array\": true },\r\n \"text\": \"test\",\r\n \"columnLabels\": [\r\n {\r\n \"label\": \"test\"\r\n }\r\n ],\r\n \"rows\": [\r\n {\r\n \"label\": \"foo\",\r\n \"columns\": [\r\n {\r\n \"content\": \"a\",\r\n \"tag\": \"a\"\r\n },\r\n {\r\n \"content\": \"b\",\r\n \"tag\": \"b\"\r\n }\r\n ]\r\n }\r\n ]\r\n}", + "name": "Field Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\": { \"graph\": true },\r\n \"nodes\": [\r\n { \"id\": \"1\", \"label\": \"1\" },\r\n { \"id\": \"2\", \"label\": \"2\", \"color\": \"orange\" },\r\n { \"id\": \"3\", \"label\": \"3\" }\r\n ],\r\n \"edges\": [\r\n { \"from\": \"1\", \"to\": \"2\", \"color\": \"red\" },\r\n { \"from\": \"1\", \"to\": \"3\" }\r\n ]\r\n}", + "name": "VisJS Graph Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\": { \"graph\": true },\r\n \"nodes\": [\r\n { \"id\": \"1\", \"label\": \"1\" },\r\n { \"id\": \"2\", \"label\": \"2\", \"color\": \"orange\" },\r\n { \"id\": \"3\", \"label\": \"3\" }\r\n ],\r\n \"edges\": [\r\n { \"from\": \"1\", \"to\": \"2\", \"color\": \"red\" },\r\n { \"from\": \"1\", \"to\": \"3\" }\r\n ]\r\n}", + "name": "Graphviz Graph Visualizer", + "preferredVisualizationId": "graphviz-graph" + }, + { + "dataSrc": "{\r\n \"kind\": { \"dotGraph\": true },\r\n \"text\": \"\\ndigraph G {\\n subgraph cluster_0 {\\n style=filled;\\n color=lightgrey;\\n node [style=filled,color=white];\\n a0 -> a1 -> a2 -> a3;\\n label = \\\"process #1\\\";\\n }\\n \\n subgraph cluster_1 {\\n node [style=filled];\\n b0 -> b1 -> b2 -> b3;\\n label = \\\"process #2\\\";\\n color=blue\\n }\\n start -> a0;\\n start -> b0;\\n a1 -> b3;\\n b2 -> a3;\\n a3 -> a0;\\n a3 -> end;\\n b3 -> end;\\n \\n start [shape=Mdiamond];\\n end [shape=Msquare];\\n}\\n\"\r\n}", + "name": "Dot Graphviz Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\": { \"table\": true },\r\n \"rows\": [\r\n { \"userId\": 1, \"country\": \"us\", \"amount\": 2 },\r\n { \"userId\": 2, \"amount\": 1 },\r\n { \"userId\": 2, \"country\": \"de\", \"amount\": 1 },\r\n { \"userId\": 1, \"country\": \"us\" }\r\n ]\r\n}", + "name": "Grid Visualizer" + }, + { + "dataSrc": "{\r\n \"kind\": { \"svg\": true },\r\n \"text\": \"\\n\\n\\n\\tMy First Scalable Vector Graphic\\n\\tAn experimental SVG from SitePoint.com\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\tSVG\\n\\t\\n\"\r\n}", + "name": "SVG Visualizer" + }, + { + "dataSrc": "{\r\n \"base64Data\": \"iVBORw0KGgoAAAANSUhEUgAAAu0AAAINCAYAAACK+kHlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAACDoSURBVHhe7dzrr13lfeBx/0+WKvVtXid5M9K8sCJatdWooyodMR2NIiXUdCCQJk0bkkwmTFrVhZDQBpd7uTbm4AvB2BhsfME2GIO5JaTQJA0TJdGa/ezLOfv89m8f73P2OX7WWv4gfcLZz/Osy0N48d2Ldbxr8Fcz7VOf+hQAAFBRbPSBtVj/9Kc/3fzN1+5ojr10rnnznQ8BAIBr6MLrbzUPPPjgsMtDvI+C/YYbfq95/vjp5sDxCwAAQEXnLlwe9vlUuO8alvww2F+8CAAAtEAJ99Lpw2gv9X7bbV9unhlMAAAA7XHvvT8YPW0v/1PeYV858RoAANAi73/w87VoLx9WXnodAABokZlof3YwCAAAtMdMtB98+RIAANAiM9F+6OQbAABAi4h2AABoOdEOAAAtJ9oBAKDlRDsAQPDkkTPNN//+0eaWv763k8q9lz3YTzvF/SxCtAMABF/51v3NU4dONi9feLuTyr2XPdhPO8X9LGIm2g+fugwAcF0rT0NPvHql+dcXzndSufeyB/tpp7ifRex4tP/yl7/ctOw8AADXyq1/84/Ny+ffbn547EInlXsve7je9/OvxwaRPLB+bGR17IWrWF1bzjOwOj71ebxm9dzh2Mn4RNzPIkQ7AEAwjMKL7zYHXnytk8q9z0RuH/dz/OLYhbHJ52gQz4O/F5O1k8+r48fGJuda/ZxbPa78fbCuWJsfXyOOl58H4n4WcU2i/ROf+MTCRDsAUNsXv/ZPzalBWD370qVOKvde9rDsfu7a/3Rzwx/89+Y//ef/si3Kuco5s2ttZN5+nhkEfe71sdHnlfHPN3/p/6T3VZS5xw6dmjm2jF3tuMnaRcX9LEK0AwAEwyh87b3m4CAYu+iVwb1nkXvwpTc2pUT2b37zm21VzpldayOvJNH+yuvvNSuDvQ6deH0kfj5Rfh6E/1iJ7N/+9repMnfTrd9o/uXgydExg/M8ceT0IMq/fdXjnj56ft111r5wvD4yuJdicj/l3qf3swjRDgAQDKPwtc1HblucClE4idxDL1/elBKkv/71r7dVOWd2rY1kX0JG+3lj6OAca/OXh583iu+izH/+ljuaxw+dap587kzzF3+5cbAXZf6RlRNzrpsT7QAA22AYhaJ9GKS/+tWvtlU5Z3atjWxXtC8a4SXc/+L20Ssx2ZqJMv8nN+5tHjpwfM51c9sS7UdeeXNTSmRfTRbn85T12XVWrTzU3Hnnnal7V5L1LXHgse81+x47k84BAO0yjMIeRPu6/Wwx2j/++ONtVc6ZXWsjk2if3c/mov2HL5xvbrr1m8N7KE/9sxAvynyRzRWT/2Lwx5/9fPO333+0efK503Oum5tE+2Q/i+hotH+veeBoMtdKZ5oH7h59qRDtANANwygU7cMw/cUvfrGtyjmza21ku6K9WDnxWnPTF0fh/vHH/y+N8o2UY8qx//VPb2r2/eDx8Tvwr62ef/11c1WjPQvw4nqO9sf2r/8vAaIdALphGIWifRinP/vZz2aU8UXMOza71ka2M9qL8kuqN3/pW8N7+fnPf5HGeeY//uOXw2P+5MY/b+765yebxw+fGv5i6fS5i6vdl2hvldET9lGoT/+crQUA2uSLd/ygOX3px83hU291Urn3sodl91MC9cMPP5xRxrP105Y5Npq7n5OXR069uc6hU4PYL++Cj+eHP0/mx2Ply82tX/nO8H5++tMP00ifVtaUtZ/9Hzc39zz0w+apH50ZBPilwbnXX3tamcvm434W0etoj0+677zzoeaxbM3dB5oDk3fly8+D8fIO+mj90ebe6XPsPzo69uiBZl82nhLtANAlW43cex440Nzwh9v455oPzlXOmV1rI3MjN1m7kXIPH3zwwYwynq2ftsyx0dz9jAM8RvEi0X745JvDcP/S1/5+eE9ZqE8ra2783K3NvY880zz1/CjYyy+IivZ5For2cWiPA3wyPor49ceuhn2I7lG0l7mp0B+H+r67J0EfxudGuWgHgC7ZauSWyN7uv8o5s2ttZG7kJms3UkL1/fffn7FIeC9zbDR3P5MAD1G8aLQXf/XNu4f3dP78+Q2VNV+45WvN00fPNgdPvjE4VzlnxWh/7vRbm7JItG9Wdp1VkyfiUQn08ZrHJ0/Pp48bOts8WH4pdP8Lq2PDtYMAf3zdureaA4+XMP9e8+AL68dH6+eMp9csRtf9h8fPJnMAQNssE7nb/dcykbsd+3n33XdnLHJPyxwbzd3PJMBDFC8a7X95x77h/Rx/8UQa6tPKmrL21q9+Z9uifbKfRcxE+4/OXNmUSWhnwV5Mx/iisuusenb0pP3BY8nc0LHmHwcR/w9PnEvmrjQrT4yekj8x/vzEPw9i+7vPNCtTa7J1Wx0fOdc8+N359wQAtMsykfvqq69uq2Uidzv2c+XKlRllfBHzjs2utZG5+5kEeIjiRaL9tr/+u+G9nDx5Ko30TFlbjvlfX/72trweM9nPImai/fmzb2/KJLSzYC82mpsoa7Jzpw4+3Ayj/XgyNzSJ9leTuYHh8Q83T4w/r0b7ZH5sFOFr67Y6PvLqONrn3BMA0ColqM680eFoH9x72cP0fsrYkcHcZpRrX758eVuVc2bX2sgkctftZzB25JXB/MDkafSRV64Eo/ny83NlXfl5sO7Wvxr9Aurp02fSON9IOaYce/Pt3xr8s35zeL7JuaevMVR+Hn4e3Esx/hz3s4iZaH/h3Dubsl3Rnp07NYzu7zcPvZjMDR1v/mkc7dn8wSe+Pzj+4ebJ8ecn7y/RvtIcnFqTrdvq+MirzUPjaJ+dAwDapgRVH6J9ej9bjfZLly5tq3LO7FobmUTuuv1sIdoPvnSpueUrdw7v4dygz7IoL8p8kc0V5dgy/+e3/e/mmROvbTnaJ/tZxEy0Hzv/7qZsV7Rn504dHkX7wyeSubGnJiE+M3e+eXgQz3fe/+Lq2Ly1B58cRfhTS46PjK5715PnkzkAoG1KUPUh2qf3s9Vov3jx4rYq58yutZFJ5K7bzxai/ZYvj4I9C/GJMv/Hf/r55r/9z1sWWnvTrd9oDp98Y0vRPtnPImai/fiF9zZlEu0byUJ9WlmTnTt1+JFRtL+UzE28tNLcVX45dRDjh6bGn35gMHbnI83TcSysKw4NI3z92q2Mj1wYR/uFZA4AaJsSVFuN9nPnzm2rcs7sWhuZRPv0frYa7VmsLqOcM7vWRiaRu24/W4j2q+2nzJdg//bd9zf3PX6k+cItdyx0zA+PnttStE/2s4iZaH/x4vvbKgb8PNmxqedG0f7Iy8ncOhebR+4pkT7lnmebw2HdMNqT8cNPjSN8yfGR0b3c9dTFZA4AaJsSVFuJ9vLHM2bhvYwb/uDG9FobmUT79H62Eu07tZ/sWhuZRO66/WxztE8H+2OHTzaHTr7RPHHkdPOFW79+1eP+5dkTW4r2yX4WMRPtJ1778bbKAj2THQsAUMNt48g9PAiszfju/QeGUVpCbjv83h/+2fCc2bU2Ur5wlD1M76eMzUbtxu65/5lt3085Z3atjZT/L6b3M4n2H515e+i5scnnaDR3pbnlK/83va/is392c/Od7z00CPVXBl8U3hyuL546cnb4Ckx2THHj524bHpNdd55JtE/2s4iZaH/p9Z8AAFzXSiCeu/xBGlxdUO697KHv+3n+3Ltj74ycHTk6+Ll4/uxgbuDoYM3EoZOXmyefO908+uyJkZWRxw+dbA4cO988d/rKzDnL0/NnBnNPDNbE45567szwj5Qsa4+Waw2Vn6fuZzI+voe4n0XMRPvLlz4AALiu3f71+8aR+04nlXsve+j7fl549b2reHfsvebo2GQufr7a+Dzr1p4bmx5LxP0sYibaT77xUwCA61oJqvNv/dsgsN7vpHLvZQ9938+x8+/P8eOxbG7k+GC+yOZGwjkujI3Hjw/GimMXpn4em54bmpor4n4WMRPtpy7/GwDAde1L39jfXHj7o+bFiz/ppHLvZQ9938/xEsxDPwkm41PzFwd/H3hx8HOxOjc4/9Dk2PG69cdPm6zN5nLxmnE/i5iJ9lfe/BAA4Lr29b97tDly4rXm0ns/76Ry72UP9tNOcT+LmIn2029+BABwXXv+9DvNHX/76PBpaBeVey97sJ92ivtZxEy0n3nr3wEAgBaZjfYrgwkAAKA1ZqL97JWfAQAALbIa7Z/85CcXjvaPPvoIAADYBllvR6XTS6+LdgAAqCDr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejjoX7fv374dU9u8LAEDbZb0ddTLaL1++DOuIdgCgq7LejkQ7vSDaAYCuyno7Eu30gmgHALoq6+1ItNMLoh0A6KqstyPRTi+IdgCgq7LejkQ7vSDaAYCuyno7Eu30gmgHALoq6+1ItNMLoh0A6KqstyPRTi+IdgCgq7LejkQ7vSDaAYCuyno7Eu30gmgHALoq6+1ItNMLoh0A6KqstyPRTi+IdgCgq7LejkQ7vSDaAYCuyno7Eu30gmgHALoq6+1ItNMLoh0A6KqstyPRTi+IdgCgq7LejkQ7vSDaAYCuyno7Eu1LWNm7u9m1a0+zL5nj2hLtAEBXZb0difYlXC/RXva5e+9KOtcWoh0A6KqstyPRvoSdifZ9zZ5du5o9+xYd30krzd7duwZ73CXaAQB2SNbbkWhfwo5E+8reZncW5/PGd8i+PaNYnxDtAAA7I+vtSLQvob/RPnrCPgr16Z+zte0g2gGArsp6OxLtS1iL9rXXSEZ2N3tXpteO5/fsmxqbHY9Pt4cGc/PGp881u2b2y8Rwze69zcr4C8Bk7cZBLtoBAHZS1tuRaF/CKNpL+K6P9Mn42lPxxaJ9aNNP2kfvug9jfGp8FPHr72s17KfX7tsT7jUS7QAAOynr7Ui0L2E2ztesPtUeft65aF9/nWmz585Cfv69rZ8X7QAAOyPr7Ui0L2Gjd9rXz+1UtI+ess8L6nh/8wJ/fvgXoh0AYCdlvR2J9iW0PdpHr76IdgCANst6OxLtS/CkvT1EOwDQVVlvR6J9CaMoju+IF7Mxnofx+JdItxztGwX3ovcg2gEAasp6OxLtSxhF+yB4w9P2YQTHJ/Azf0rLOKpjtM99ej5nfBzzMbqzexDtAADtk/V2JNqXsPr6ySScV4VgX7d+bd2efbNPw4fGgT80PTdvfPoLwMQm4ly0AwDUk/V2JNrpBdEOAHRV1tuRaKcXRDsA0FVZb0einV4Q7QBAV2W9HYl2ekG0AwBdlfV2JNrpBdEOAHRV1tuRaKcXRDsA0FVZb0einV4Q7QBAV2W9HYl2ekG0AwBdlfV2JNrpBdEOAHRV1tuRaKcXRDsA0FVZb0einV4Q7QBAV2W9HYl2ekG0AwBdlfV2JNrpBdEOAHRV1tuRaKcXRDsA0FVZb0einV4Q7QBAV2W9HYl2ekG0AwBdlfV2JNrpBdEOAHRV1ttRJ6MdMtm/LwAAbZf1dtS5aAcAgD7JejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HXUu2nd97iyksn9fAADaLuvtqJPR/uLbHzdv//uvYZVoBwC6KuvtqJPRnkUb1zfRDgB0VdbbkWinF0Q7ANBVWW9Hop1eEO0AQFdlvR2JdnpBtAMAXZX1diTa6QXRDgB0VdbbkWinF0Q7ANBVWW9Hop1eEO0AQFdlvR2JdnpBtAMAXZX1diTa6QXRDgB0VdbbkWinF0Q7ANBVWW9Hop1eEO0AQFdlvR2JdnpBtAMAXZX1diTa6QXRDgB0VdbbkWinF0Q7ANBVWW9Hop1eEO0AQFdlvR2JdnpBtAMAXZX1diTa6QXRDgB0VdbbkWhfwuHbf7fZteuPmruTOa4t0Q4AdFXW25FoX0Kfo320t11rfuerzeFkXVuIdgCgq7LejkT7EnYm2h9uPjOI5M/ct+j49pvd19nm5t9pd7iLdgCgq7LejkT7EnYk2k98tdmdxfm88R1w+L6HZ+P8Gl5/K0Q7ANBVWW9Hon0JfY323OhJ/+7b2/PPf5poBwC6KuvtSLQvYS3ax6+PDKJ25Hebm09Mrx3P//7DU2Oz43f//vQ5xgZz88anzzW7ZvbLxHBNecVl/AVgsnahEPekHQBgR2S9HYn2JYyivYTv+kifjK8F7mLRPrTpJ+2jJ+DxffNRxK+/r9Wwn1573x+Fe83tyH9V2EaiHQDoqqy3I9G+hNk4X7P6VHv4eeeiff11ps2eOwv5+fc2ZRz2bX01phDtAEBXZb0difYlbPT0ef3cTkX7xu+Zx/ubF/jzw38S+u0O9kK0AwBdlfV2JNqX0PZoHz0h32q0j1+7mXky306iHQDoqqy3I9G+hP4+ac/fk28z0Q4AdFXW25FoX8IoirMn0bMxvuHT7C1H+/wQX/weZseHn+d8GWkr0Q4AdFXW25FoX8Io2mcDN43emT+lZRzVMdrnPj2fMz6O+Rjj2T0sFu0bP71vK9EOAHRV1tuRaF/C6usnk3BelT+lXov8kc/cN+e1mXHgD03PzRuf/gIwscAT9Xx8/PR/rnxvtYl2AKCrst6ORDu9INoBgK7KejsS7fSCaAcAuirr7Ui00wuiHQDoqqy3I9FOL4h2AKCrst6ORDu9INoBgK7KejsS7fSCaAcAuirr7Ui00wuiHQDoqqy3I9FOL4h2AKCrst6ORDu9INoBgK7KejsS7fSCaAcAuirr7Ui00wuiHQDoqqy3I9FOL4h2AKCrst6ORDu9INoBgK7KejsS7fSCaAcAuirr7Ui00wuiHQDoqqy3I9FOL4h2AKCrst6ORDu9INoBgK7KejvqZLRDJvv3BQCg7bLejjoX7QAA0CdZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HYl2AACoKOvtSLQDAEBFWW9Hoh0AACrKejsS7QAAUFHW25FoBwCAirLejkQ7AABUlPV2JNoBAKCirLcj0Q4AABVlvR2JdgAAqCjr7Ui0AwBARVlvR6IdAAAqyno7Eu0AAFBR1tuRaAcAgIqy3o5EOwAAVJT1diTaAQCgoqy3I9EOAAAVZb0diXYAAKgo6+1ItAMAQEVZb0eiHQAAKsp6OxLtAABQUdbbkWgHAICKst6ORDsAAFSU9XYk2gEAoKKstyPRDgAAFWW9HW052vfv3w8AACzhmkT75cuXAQCALRDtAADQcqIdAABaTrQDAEDLiXYAAGg50Q4AAC0n2gEAoOVEOwAAtJxoBwCAlhPtAADQcqIdAABaTrQDAEDLiXYAAGg50Q4AAC0n2gEAoOVEOwAAtJxoBwCAlhPtAADQcqIdoAVW9u5udu3a0+xL5gBAtAO0QH+jfV+zZ9euwd6m7NmXrANgI6IdoAV2JtpHwbxn36Lj26/sa911VvY2u4U7wKaJdoAW2JFoHwfyTJzPG79GvAoEsHmiHaAFrqdov7xvz2Cvu5u9K8kcACnRDtACa9G+0uzdPf0OeIzb8fzM6yXrx/ftmT7H2GBu3vj0uWbXzH6ZGK7ZvbdZmbzuMrZ778q6dZnhXsuxyRwAOdEO0AKjaC/huz7SJ+NrT8UXi/ahTT9pH//SaAjqUcSvv6/VsJ9eO3yCfpUn+J6yA2yJaAdogdk4X7P6VHv4eeeiff11ps2eOwv5efe2GviFJ+wAWyLaAVpg7fWYq83tVLSPnrLPe70l3t+8wJ8f/mPja4t3gM0R7QAt0PZoH73Wsg3RXoyvv8j77wCMiHaAFrhunrQPXeULAgAzRDtAC4yiOPsFzdkYz8N4/EukW472jYJ70XtYMNrn3RcAc4l2gBYYRfsgeMPT9mEExyfwM39Kyziqy/HrnsDPe6I9Z3wc0zG6s3tYLNoH15lZM/5ycbWwB2Ad0Q7QAquvn0zCeVUI9nXr19bt2TfntZlx4A9Nz80bn/4CMHHVOJ8/Pgr+9bwWA7B5oh0AAFpOtAMAQMuJdgAAaDnRDgAALSfaAQCg5UQ7AAC0nGgHAICWE+0AANByoh0AAFpOtAMAQMuJdgAAaDnRDgAALSfaAQCg5UQ7AAC0nGgHAICWE+0AANByoh0AAFrumkU7AACwdTse7QAAwPKy3o62FO0AAMC1I9oBAKDlRDsAALScaAcAgJYT7QAA0HKiHQAAWk60AwBAy4l2AABoOdEOAAAtNxPtAABA+6xGOwAA0FafbP4//lTHJE468Z8AAAAASUVORK5CYII=\",\r\n \"kind\": {\r\n \"imagePng\": true\r\n }\r\n}", + "name": "Image" + } + ], + "x-editable": { + "defaultUrl": "http://localhost:8080/?editor", + "kind": "visualization-playground" + } +} diff --git a/playground/src/index.tsx b/playground/src/index.tsx new file mode 100644 index 0000000..f7a90c5 --- /dev/null +++ b/playground/src/index.tsx @@ -0,0 +1,9 @@ +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import "./style.scss"; +import { App } from "./components/App"; + +const elem = document.createElement("div"); +elem.className = "react-root"; +document.body.append(elem); +ReactDOM.render(, elem); diff --git a/playground/src/model/JsonDataSource.tsx b/playground/src/model/JsonDataSource.tsx new file mode 100644 index 0000000..3950ede --- /dev/null +++ b/playground/src/model/JsonDataSource.tsx @@ -0,0 +1,123 @@ +import { + VisualizationDataSource, + VisualizationDataSourceState, +} from "./VisualizationDataSource"; +import { observable, computed } from "mobx"; +import { + VisualizationData, + VisualizationId, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import * as React from "react"; +import { JsonEditor } from "../components/JsonEditor"; +import { ref, Animator, Ref } from "../common/utils"; + +type State = { json: string; prefVisId: string | undefined }; + +export class JsonDataSource implements VisualizationDataSource { + @observable jsonSrc: string = ""; + @observable preferredVisualizationId: VisualizationId | undefined; + + readonly editorView = (); + + @observable timePassed = 0; + + @computed + get state(): State { + return { + json: this.jsonSrc, + prefVisId: this.preferredVisualizationId as any, + }; + } + + public setState(state: State): void { + this.jsonSrc = state.json; + this.preferredVisualizationId = state.prefVisId as any; + } + + constructor(initialState?: State) { + if (initialState) { + this.setState(initialState); + } + } + + public setPreferredVisualizationId(id: VisualizationId | undefined): void { + this.preferredVisualizationId = id; + } + + private get normalizedData(): + | { + kind: "ok"; + items: { + data: VisualizationData; + durationMs: number; + preferredVisualizationId: VisualizationId | undefined; + }[]; + } + | { kind: "error"; error: string } { + try { + var value = JSON.parse(this.jsonSrc); + } catch (e) { + return { + kind: "error", + error: "" + e, + }; + } + + if (!Array.isArray(value)) { + value = [value]; + } + + if (value.length === 0) { + return { kind: "error", error: "bla" }; + } + + const items = value.map((v: any) => ({ + data: v, + durationMs: Number(v["playground-durationMs"]) || 1500, + preferredVisualizationId: v["playground-preferredVisualizationId"], + })); + + return { kind: "ok", items }; + } + + @computed.struct get times(): number[] { + if (this.normalizedData.kind === "ok") { + return this.normalizedData.items.map(i => i.durationMs); + } + return [1000]; + } + + private lastAnimator: Animator | undefined; + + @computed get animator(): Animator { + if (this.lastAnimator) { + this.lastAnimator.dispose(); + } + return (this.lastAnimator = new Animator(this.times)); + } + + @computed + get data(): VisualizationDataSourceState { + if (this.normalizedData.kind === "error") { + return this.normalizedData; + } + + return { + kind: "ok", + value: this.normalizedData.items[this.animator.index].data, + preferredVisualizationId: this.preferredVisualizationId, + }; + } +} + +class EditorView extends React.Component<{ jsonSrc: Ref }> { + render() { + return ( + + ); + } +} diff --git a/playground/src/model/Model.ts b/playground/src/model/Model.ts new file mode 100644 index 0000000..d13a0fa --- /dev/null +++ b/playground/src/model/Model.ts @@ -0,0 +1,81 @@ +import { observable, action, computed } from "mobx"; +import { + Visualization, + VisualizationId, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { Disposable } from "@hediet/std/disposable"; +import { QueryBinding } from "./QueryController"; +import { VisualizationDataSource } from "./VisualizationDataSource"; +import { JsonDataSource } from "./JsonDataSource"; +import { encodeData, decodeData } from "./lzmaCompressor"; +import { MonacoBridge } from "./MonacoBridge"; +import { Ref } from "../common/utils"; + +export class Model { + public readonly dispose = Disposable.fn(); + + @observable + public theme: "dark" | "light" = "light"; + + private readonly monacoBridge = new MonacoBridge(this); + + @observable + public visualization: VisualizationModel | undefined = undefined; + + private readonly q = new QueryBinding( + "state", + new Ref( + () => + this.visualization + ? this.visualization.dataSource.state + : undefined, + newState => { + if (newState !== undefined) { + if (!this.visualization) { + this.visualization = new VisualizationModel( + new JsonDataSource(newState as any) + ); + } else { + this.visualization.dataSource.setState(newState); + } + } else { + this.visualization = undefined; + } + } + ).map(encodeData, decodeData) + ); + + constructor() { + const url = new URL(window.location.href); + + const theme = url.searchParams.get("theme"); + if (theme && theme === "dark") { + this.theme = "dark"; + } else { + this.theme = "light"; + } + } +} + +export class VisualizationModel { + constructor(public readonly dataSource: VisualizationDataSource) {} + + @computed get visualizations(): + | { + bestVisualization: Visualization | undefined; + allVisualizations: Visualization[]; + } + | undefined { + const data = this.dataSource.data; + if (data.kind === "ok") { + const vis = globalVisualizationFactory.getVisualizations( + data.value, + data.preferredVisualizationId + ); + return vis; + } else { + return undefined; + } + } +} diff --git a/playground/src/model/MonacoBridge.ts b/playground/src/model/MonacoBridge.ts new file mode 100644 index 0000000..eed4a89 --- /dev/null +++ b/playground/src/model/MonacoBridge.ts @@ -0,0 +1,19 @@ +import { Model } from "./Model"; +import { Disposable } from "@hediet/std/disposable"; +import { autorun } from "mobx"; +import { getLoadedMonaco } from "@hediet/monaco-editor-react"; + +export class MonacoBridge { + public readonly dispose = Disposable.fn(); + + constructor(private readonly model: Model) { + return; + this.dispose.track({ + dispose: autorun(() => { + getLoadedMonaco().editor.setTheme( + model.theme === "light" ? "vs-light" : "vs-dark" + ); + }), + }); + } +} diff --git a/playground/src/model/QueryController.ts b/playground/src/model/QueryController.ts new file mode 100644 index 0000000..76756c0 --- /dev/null +++ b/playground/src/model/QueryController.ts @@ -0,0 +1,38 @@ +import { autorun } from "mobx"; +import { IRef } from "../common/utils"; + +export class QueryBinding { + constructor( + private readonly queryParamName: string, + private readonly value: IRef + ) { + this.loadFromQuery(); + autorun(() => { + this.updateQuery(); + }); + } + + private loadFromQuery() { + const val = getQueryParam(this.queryParamName); + if (val) { + this.value.set(val); + } + } + + private updateQuery() { + const url = new URL(window.location.href); + const val = this.value.get(); + if (val !== undefined) { + url.searchParams.set(this.queryParamName, val); + } else { + url.searchParams.delete(this.queryParamName); + } + history.replaceState(null, document.title, url.toString()); + } +} + +export function getQueryParam(queryParamName: string): string | null { + const url = new URL(window.location.href); + const val = url.searchParams.get(queryParamName); + return val; +} diff --git a/playground/src/model/VisualizationDataSource.ts b/playground/src/model/VisualizationDataSource.ts new file mode 100644 index 0000000..fb1be84 --- /dev/null +++ b/playground/src/model/VisualizationDataSource.ts @@ -0,0 +1,22 @@ +import { VisualizationData, VisualizationId } from "@hediet/visualization-core"; + +export interface VisualizationDataSource { + readonly editorView: React.ReactElement; + + setState(state: TState): void; + setPreferredVisualizationId(id: VisualizationId | undefined): void; + + // is observable + readonly state: TState; + + // is observable + readonly data: VisualizationDataSourceState; +} + +export type VisualizationDataSourceState = + | { + kind: "ok"; + value: VisualizationData; + preferredVisualizationId: VisualizationId | undefined; + } + | { kind: "error"; error: string }; diff --git a/playground/src/model/lzmaCompressor.ts b/playground/src/model/lzmaCompressor.ts new file mode 100644 index 0000000..8389a3e --- /dev/null +++ b/playground/src/model/lzmaCompressor.ts @@ -0,0 +1,36 @@ +import * as lzma from "lzma/src/lzma_worker"; +import * as msgpack from "messagepack"; +import * as base64 from "base64-js"; + +export function encodeData(json: unknown | undefined): string | undefined { + if (json === undefined) { + return undefined; + } + // normalize undefined + json = JSON.parse(JSON.stringify(json)); + const data = msgpack.encode(json); + const compressed = lzma.LZMA.compress(data, 9); + const compressedStr = base64.fromByteArray(compressed); + + return compressedStr + .replace(/\+/g, "-") // Convert '+' to '-' + .replace(/\//g, "_") // Convert '/' to '_' + .replace(/=+$/, ""); // Remove ending '=' +} + +export function decodeData( + compressedStr: string | undefined +): unknown | undefined { + if (compressedStr === undefined) { + return undefined; + } + compressedStr += Array(5 - (compressedStr.length % 4)).join("="); + compressedStr = compressedStr + .replace(/\-/g, "+") // Convert '-' to '+' + .replace(/\_/g, "/"); // Convert '_' to '/' + + const compressed2 = base64.toByteArray(compressedStr); + const decompressed = lzma.LZMA.decompress(compressed2); + const origData = msgpack.decode(new Uint8Array(decompressed)); + return origData; +} diff --git a/playground/src/model/types.d.ts b/playground/src/model/types.d.ts new file mode 100644 index 0000000..ce623fa --- /dev/null +++ b/playground/src/model/types.d.ts @@ -0,0 +1,9 @@ +declare module "lzma/src/lzma_worker" { + const x: any; + export = x; +} + +declare module "base64-js" { + const x: any; + export = x; +} diff --git a/playground/src/style.scss b/playground/src/style.scss new file mode 100644 index 0000000..bb8cf47 --- /dev/null +++ b/playground/src/style.scss @@ -0,0 +1,70 @@ +@import "~normalize.css"; +@import "~@blueprintjs/core/lib/css/blueprint.css"; +@import "~@blueprintjs/icons/lib/css/blueprint-icons.css"; +@import "~@hediet/visualization-bundle/style.scss"; + +html, +body, +.react-root { + height: 100%; +} + +body { + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + margin: 0px; + padding: 0px; + border: 0px; + + margin: 0; + padding: 0; + + //background-color: var(--vscode-editor-background); +} + +.component-GUI { + & > .part-Header { + //padding: 6px 20px 6px 0; + //background-color: var(--vscode-sideBar-background); + + // border-top: solid 1px var(--vscode-button-background); + // rgba(128, 128, 128, 0.15) + } +} + +.bp3-input, +.bp3-button { + border-radius: 0; +} + +.bp3-icon { + svg { + color: lighten(black, 20); + width: 14px; + } +} + +.component-DynamicHeightJsonEditor { + .part-editor { + .current-line { + border: none !important; + } + .selectionHighlight { + background: transparent !important; + } + } +} + +.bp3-transition-container { + z-index: 100000; +} + +@import "./vscode-dark.scss"; +@import "./vscode-light.scss"; + +.visualization { + background: var(--vscode-editor-background); +} + +.themeable { + --visualizer-simple-text-color: var(--vscode-editor-foreground); +} diff --git a/playground/src/visualizations.ts b/playground/src/visualizations.ts new file mode 100644 index 0000000..fb4a910 --- /dev/null +++ b/playground/src/visualizations.ts @@ -0,0 +1,21 @@ +//// Uncomment the visualization that you work on to increase webpack build speed! + +// import "@hediet/visualization-bundle/dist/visualizers/ast-visualizer"; /* +// import "@hediet/visualization-bundle/dist/visualizers/graph/dot-graphviz-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/graph/graph-graphviz-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/graph/graph-visjs-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/grid-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/image-visualizer"; /* +// import "@hediet/visualization-bundle/dist/visualizers/monaco-text-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/perspective-table-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/plotly-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/simple-text-visualizer"; /* +// import "@hediet/visualization-bundle/dist/visualizers/source-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/svg-visualizer" /* +// import "@hediet/visualization-bundle/dist/visualizers/tree-visualizer"; /* + +// This bundles the monaco editor. Uncomment it to load monaco dynamically. +// Dynamic loading increases webpack build speed significantly. +import "monaco-editor"; + +import "@hediet/visualization-bundle"; // */ diff --git a/playground/src/vscode-dark.scss b/playground/src/vscode-dark.scss new file mode 100644 index 0000000..bda05eb --- /dev/null +++ b/playground/src/vscode-dark.scss @@ -0,0 +1,344 @@ +.theme-dark { + --background-color: #263238; + --color: #eeffff; + --font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", + HelveticaNeue-Light, Ubuntu, "Droid Sans", sans-serif; + --font-size: 13px; + --font-weight: normal; + --link-active-color: #eeffff; + --link-color: #80cbc4; + --vscode-activityBar-background: #192227; + --vscode-activityBar-border: rgba(0, 0, 0, 0.38); + --vscode-activityBar-dropBackground: rgba(255, 255, 255, 0.12); + --vscode-activityBar-foreground: #eeffff; + --vscode-activityBar-inactiveForeground: rgba(238, 255, 255, 0.6); + --vscode-activityBarBadge-background: #80cbc4; + --vscode-activityBarBadge-foreground: #000000; + --vscode-badge-background: rgba(0, 0, 0, 0.19); + --vscode-badge-foreground: #546e7a; + --vscode-breadcrumb-activeSelectionForeground: #80cbc4; + --vscode-breadcrumb-background: #263238; + --vscode-breadcrumb-focusForeground: #eeffff; + --vscode-breadcrumb-foreground: #5f7a87; + --vscode-breadcrumbPicker-background: #192227; + --vscode-button-background: rgba(128, 203, 196, 0.13); + --vscode-button-foreground: #ffffff; + --vscode-button-hoverBackground: rgba(175, 222, 218, 0.13); + --vscode-debugExceptionWidget-background: #420b0d; + --vscode-debugExceptionWidget-border: #a31515; + --vscode-debugToolBar-background: #263238; + --vscode-descriptionForeground: rgba(204, 204, 204, 0.7); + --vscode-diffEditor-insertedTextBackground: rgba(195, 232, 141, 0.08); + --vscode-diffEditor-removedTextBackground: rgba(255, 83, 112, 0.13); + --vscode-dropdown-background: #263238; + --vscode-dropdown-border: rgba(255, 255, 255, 0.06); + --vscode-dropdown-foreground: #f0f0f0; + --vscode-editor-background: #263238; + --vscode-editor-findMatchBackground: #515c6a; + --vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); + --vscode-editor-findRangeHighlightBackground: rgba(58, 61, 65, 0.4); + --vscode-editor-focusedStackFrameHighlightBackground: rgba( + 122, + 189, + 122, + 0.3 + ); + --vscode-editor-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", + "Segoe UI", HelveticaNeue-Light, Ubuntu, "Droid Sans", sans-serif; + --vscode-editor-font-size: 13px; + --vscode-editor-font-weight: normal; + --vscode-editor-foreground: #eeffff; + --vscode-editor-hoverHighlightBackground: rgba(38, 79, 120, 0.25); + --vscode-editor-inactiveSelectionBackground: rgba(128, 203, 196, 0.06); + --vscode-editor-lineHighlightBackground: rgba(0, 0, 0, 0.31); + --vscode-editor-lineHighlightBorder: #282828; + --vscode-editor-rangeHighlightBackground: rgba(255, 255, 255, 0.04); + --vscode-editor-selectionBackground: rgba(128, 203, 196, 0.13); + --vscode-editor-selectionHighlightBackground: rgba(255, 204, 0, 0.13); + --vscode-editor-snippetFinalTabstopHighlightBorder: #525252; + --vscode-editor-snippetTabstopHighlightBackground: rgba(124, 124, 124, 0.3); + --vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 0, 0.2); + --vscode-editor-wordHighlightBackground: rgba(87, 87, 87, 0.72); + --vscode-editor-wordHighlightStrongBackground: rgba(0, 73, 114, 0.72); + --vscode-editorActiveLineNumber-foreground: #c6c6c6; + --vscode-editorBracketMatch-background: #263238; + --vscode-editorBracketMatch-border: rgba(255, 204, 0, 0.31); + --vscode-editorCodeLens-foreground: #999999; + --vscode-editorCursor-foreground: #ffcc00; + --vscode-editorError-foreground: rgba(255, 83, 112, 0.44); + --vscode-editorGroup-border: rgba(0, 0, 0, 0.19); + --vscode-editorGroup-dropBackground: rgba(83, 89, 93, 0.5); + --vscode-editorGroupHeader-noTabsBackground: #263238; + --vscode-editorGroupHeader-tabsBackground: #263238; + --vscode-editorGutter-addedBackground: rgba(195, 232, 141, 0.38); + --vscode-editorGutter-background: #263238; + --vscode-editorGutter-commentRangeForeground: #c5c5c5; + --vscode-editorGutter-deletedBackground: rgba(255, 83, 112, 0.38); + --vscode-editorGutter-modifiedBackground: rgba(130, 170, 255, 0.38); + --vscode-editorHint-foreground: rgba(238, 238, 238, 0.7); + --vscode-editorHoverWidget-background: #263238; + --vscode-editorHoverWidget-border: rgba(255, 255, 255, 0.06); + --vscode-editorIndentGuide-activeBackground: #37474f; + --vscode-editorIndentGuide-background: rgba(55, 71, 79, 0.44); + --vscode-editorInfo-foreground: #008000; + --vscode-editorLineNumber-activeForeground: #5f7a87; + --vscode-editorLineNumber-foreground: #37474f; + --vscode-editorLink-activeForeground: #eeffff; + --vscode-editorMarkerNavigation-background: rgba(238, 255, 255, 0.02); + --vscode-editorMarkerNavigationError-background: rgba(255, 83, 112, 0.44); + --vscode-editorMarkerNavigationInfo-background: #008000; + --vscode-editorMarkerNavigationWarning-background: rgba( + 195, + 232, + 141, + 0.44 + ); + --vscode-editorOverviewRuler-addedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-border: #263238; + --vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0; + --vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, 0.4); + --vscode-editorOverviewRuler-currentContentForeground: rgba( + 64, + 200, + 174, + 0.5 + ); + --vscode-editorOverviewRuler-deletedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, 0.7); + --vscode-editorOverviewRuler-findMatchForeground: rgba(246, 185, 77, 0.7); + --vscode-editorOverviewRuler-incomingContentForeground: rgba( + 64, + 166, + 255, + 0.5 + ); + --vscode-editorOverviewRuler-infoForeground: rgba(18, 18, 136, 0.7); + --vscode-editorOverviewRuler-modifiedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-rangeHighlightForeground: rgba( + 0, + 122, + 204, + 0.6 + ); + --vscode-editorOverviewRuler-selectionHighlightForeground: rgba( + 160, + 160, + 160, + 0.8 + ); + --vscode-editorOverviewRuler-warningForeground: rgba(18, 136, 18, 0.7); + --vscode-editorOverviewRuler-wordHighlightForeground: rgba( + 160, + 160, + 160, + 0.8 + ); + --vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba( + 192, + 160, + 192, + 0.8 + ); + --vscode-editorPane-background: #263238; + --vscode-editorRuler-foreground: #37474f; + --vscode-editorSuggestWidget-background: #263238; + --vscode-editorSuggestWidget-border: rgba(255, 255, 255, 0.06); + --vscode-editorSuggestWidget-foreground: #eeffff; + --vscode-editorSuggestWidget-highlightForeground: #80cbc4; + --vscode-editorSuggestWidget-selectedBackground: rgba(0, 0, 0, 0.31); + --vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, 0.67); + --vscode-editorWarning-foreground: rgba(195, 232, 141, 0.44); + --vscode-editorWhitespace-foreground: rgba(238, 255, 255, 0.25); + --vscode-editorWidget-background: #192227; + --vscode-editorWidget-border: #ff0000; + --vscode-editorWidget-resizeBorder: #80cbc4; + --vscode-errorForeground: #f48771; + --vscode-extensionButton-prominentBackground: rgba(195, 232, 141, 0.56); + --vscode-extensionButton-prominentForeground: #ffffff; + --vscode-extensionButton-prominentHoverBackground: #c3e88d; + --vscode-focusBorder: rgba(255, 255, 255, 0); + --vscode-foreground: #cccccc; + --vscode-gitDecoration-addedResourceForeground: #81b88b; + --vscode-gitDecoration-conflictingResourceForeground: rgba( + 255, + 203, + 107, + 0.56 + ); + --vscode-gitDecoration-deletedResourceForeground: rgba(255, 83, 112, 0.56); + --vscode-gitDecoration-ignoredResourceForeground: rgba(95, 122, 135, 0.56); + --vscode-gitDecoration-modifiedResourceForeground: rgba( + 130, + 170, + 255, + 0.56 + ); + --vscode-gitDecoration-submoduleResourceForeground: #8db9e2; + --vscode-gitDecoration-untrackedResourceForeground: rgba( + 195, + 232, + 141, + 0.56 + ); + --vscode-gitlens-gutterBackgroundColor: rgba(255, 255, 255, 0.07); + --vscode-gitlens-gutterForegroundColor: #bebebe; + --vscode-gitlens-gutterUncommittedForegroundColor: rgba(0, 188, 242, 0.6); + --vscode-gitlens-lineHighlightBackgroundColor: rgba(0, 188, 242, 0.2); + --vscode-gitlens-lineHighlightOverviewRulerColor: rgba(0, 188, 242, 0.6); + --vscode-gitlens-trailingLineBackgroundColor: rgba(0, 0, 0, 0); + --vscode-gitlens-trailingLineForegroundColor: rgba(153, 153, 153, 0.35); + --vscode-input-background: #303c41; + --vscode-input-border: rgba(255, 255, 255, 0.06); + --vscode-input-foreground: #eeffff; + --vscode-input-placeholderForeground: rgba(238, 255, 255, 0.38); + --vscode-inputOption-activeBorder: #007acc; + --vscode-inputValidation-errorBackground: #5a1d1d; + --vscode-inputValidation-errorBorder: rgba(255, 83, 112, 0.31); + --vscode-inputValidation-infoBackground: #063b49; + --vscode-inputValidation-infoBorder: rgba(130, 170, 255, 0.31); + --vscode-inputValidation-warningBackground: #352a05; + --vscode-inputValidation-warningBorder: rgba(255, 203, 107, 0.31); + --vscode-list-activeSelectionBackground: #192227; + --vscode-list-activeSelectionForeground: #80cbc4; + --vscode-list-dropBackground: rgba(238, 255, 255, 0.13); + --vscode-list-errorForeground: #f88070; + --vscode-list-focusBackground: rgba(238, 255, 255, 0.13); + --vscode-list-focusForeground: #eeffff; + --vscode-list-highlightForeground: #80cbc4; + --vscode-list-hoverBackground: #192227; + --vscode-list-hoverForeground: #ffffff; + --vscode-list-inactiveFocusBackground: #313135; + --vscode-list-inactiveSelectionBackground: rgba(0, 0, 0, 0.19); + --vscode-list-inactiveSelectionForeground: #80cbc4; + --vscode-list-invalidItemForeground: #b89500; + --vscode-list-warningForeground: #4d9e4d; + --vscode-menu-background: #263238; + --vscode-menu-foreground: #eeffff; + --vscode-menu-selectionBackground: rgba(0, 0, 0, 0.31); + --vscode-menu-selectionBorder: rgba(0, 0, 0, 0.19); + --vscode-menu-selectionForeground: #80cbc4; + --vscode-menu-separatorBackground: #eeffff; + --vscode-menubar-selectionBackground: rgba(0, 0, 0, 0.19); + --vscode-menubar-selectionBorder: rgba(0, 0, 0, 0.19); + --vscode-menubar-selectionForeground: #80cbc4; + --vscode-merge-commonContentBackground: rgba(96, 96, 96, 0.16); + --vscode-merge-commonHeaderBackground: rgba(96, 96, 96, 0.4); + --vscode-merge-currentContentBackground: rgba(64, 200, 174, 0.2); + --vscode-merge-currentHeaderBackground: rgba(64, 200, 174, 0.5); + --vscode-merge-incomingContentBackground: rgba(64, 166, 255, 0.2); + --vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, 0.5); + --vscode-notificationCenterHeader-background: #314149; + --vscode-notificationLink-foreground: #80cbc4; + --vscode-notifications-background: #263238; + --vscode-notifications-border: #314149; + --vscode-notifications-foreground: #eeffff; + --vscode-panel-background: #192227; + --vscode-panel-border: rgba(0, 0, 0, 0.38); + --vscode-panel-dropBackground: #eeffff; + --vscode-panelTitle-activeBorder: #80cbc4; + --vscode-panelTitle-activeForeground: #ffffff; + --vscode-panelTitle-inactiveForeground: #eeffff; + --vscode-peekView-border: rgba(0, 0, 0, 0.19); + --vscode-peekViewEditor-background: rgba(238, 255, 255, 0.02); + --vscode-peekViewEditor-matchHighlightBackground: rgba(128, 203, 196, 0.13); + --vscode-peekViewEditorGutter-background: rgba(238, 255, 255, 0.02); + --vscode-peekViewResult-background: rgba(238, 255, 255, 0.02); + --vscode-peekViewResult-fileForeground: #ffffff; + --vscode-peekViewResult-lineForeground: #bbbbbb; + --vscode-peekViewResult-matchHighlightBackground: rgba(128, 203, 196, 0.13); + --vscode-peekViewResult-selectionBackground: rgba(95, 122, 135, 0.44); + --vscode-peekViewResult-selectionForeground: #ffffff; + --vscode-peekViewTitle-background: rgba(238, 255, 255, 0.02); + --vscode-peekViewTitleDescription-foreground: rgba(238, 255, 255, 0.38); + --vscode-peekViewTitleLabel-foreground: #ffffff; + --vscode-pickerGroup-border: #3f3f46; + --vscode-pickerGroup-foreground: #80cbc4; + --vscode-progressBar-background: #80cbc4; + --vscode-scrollbar-shadow: rgba(38, 50, 56, 0); + --vscode-scrollbarSlider-activeBackground: #80cbc4; + --vscode-scrollbarSlider-background: rgba(238, 255, 255, 0.13); + --vscode-scrollbarSlider-hoverBackground: rgba(238, 255, 255, 0.06); + --vscode-selection-background: #eeffff; + --vscode-settings-checkboxBackground: #192227; + --vscode-settings-checkboxBorder: rgba(255, 255, 255, 0.06); + --vscode-settings-checkboxForeground: #eeffff; + --vscode-settings-dropdownBackground: #192227; + --vscode-settings-dropdownBorder: rgba(255, 255, 255, 0.06); + --vscode-settings-dropdownForeground: #eeffff; + --vscode-settings-dropdownListBorder: #ff0000; + --vscode-settings-headerForeground: #80cbc4; + --vscode-settings-modifiedItemIndicator: #80cbc4; + --vscode-settings-numberInputBackground: #192227; + --vscode-settings-numberInputBorder: rgba(255, 255, 255, 0.06); + --vscode-settings-numberInputForeground: #eeffff; + --vscode-settings-textInputBackground: #192227; + --vscode-settings-textInputBorder: rgba(255, 255, 255, 0.06); + --vscode-settings-textInputForeground: #eeffff; + --vscode-sideBar-background: #192227; + --vscode-sideBar-border: rgba(0, 0, 0, 0.38); + --vscode-sideBar-dropBackground: rgba(255, 255, 255, 0.12); + --vscode-sideBar-foreground: #5f7a87; + --vscode-sideBarSectionHeader-background: #192227; + --vscode-sideBarSectionHeader-border: rgba(0, 0, 0, 0.38); + --vscode-sideBarSectionHeader-foreground: #5f7a87; + --vscode-sideBarTitle-foreground: #eeffff; + --vscode-statusBar-background: #192227; + --vscode-statusBar-border: rgba(0, 0, 0, 0.38); + --vscode-statusBar-debuggingBackground: #c792ea; + --vscode-statusBar-debuggingBorder: rgba(0, 0, 0, 0.38); + --vscode-statusBar-debuggingForeground: #ffffff; + --vscode-statusBar-foreground: #546e7a; + --vscode-statusBar-noFolderBackground: #263238; + --vscode-statusBar-noFolderBorder: rgba(0, 0, 0, 0.38); + --vscode-statusBar-noFolderForeground: #546e7a; + --vscode-statusBarItem-activeBackground: rgba(255, 255, 255, 0.18); + --vscode-statusBarItem-hoverBackground: rgba(84, 110, 122, 0.13); + --vscode-statusBarItem-prominentBackground: #388a34; + --vscode-statusBarItem-prominentHoverBackground: #369432; + --vscode-tab-activeBackground: #263238; + --vscode-tab-activeBorder: #80cbc4; + --vscode-tab-activeForeground: #ffffff; + --vscode-tab-activeModifiedBorder: #5f7a87; + --vscode-tab-border: #263238; + --vscode-tab-inactiveBackground: #263238; + --vscode-tab-inactiveForeground: #5f7a87; + --vscode-tab-inactiveModifiedBorder: rgba(95, 122, 135, 0.5); + --vscode-tab-unfocusedActiveBorder: #546e7a; + --vscode-tab-unfocusedActiveForeground: #eeffff; + --vscode-tab-unfocusedActiveModifiedBorder: rgba(95, 122, 135, 0.5); + --vscode-tab-unfocusedInactiveForeground: rgba(95, 122, 135, 0.5); + --vscode-tab-unfocusedInactiveModifiedBorder: rgba(95, 122, 135, 0.25); + --vscode-terminal-ansiBlack: #000000; + --vscode-terminal-ansiBlue: #82aaff; + --vscode-terminal-ansiBrightBlack: #546e7a; + --vscode-terminal-ansiBrightBlue: #82aaff; + --vscode-terminal-ansiBrightCyan: #89ddff; + --vscode-terminal-ansiBrightGreen: #c3e88d; + --vscode-terminal-ansiBrightMagenta: #c792ea; + --vscode-terminal-ansiBrightRed: #ff5370; + --vscode-terminal-ansiBrightWhite: #ffffff; + --vscode-terminal-ansiBrightYellow: #ffcb6b; + --vscode-terminal-ansiCyan: #89ddff; + --vscode-terminal-ansiGreen: #c3e88d; + --vscode-terminal-ansiMagenta: #c792ea; + --vscode-terminal-ansiRed: #ff5370; + --vscode-terminal-ansiWhite: #ffffff; + --vscode-terminal-ansiYellow: #ffcb6b; + --vscode-terminal-background: #192227; + --vscode-terminal-border: rgba(0, 0, 0, 0.38); + --vscode-terminal-foreground: #cccccc; + --vscode-terminal-selectionBackground: rgba(255, 255, 255, 0.25); + --vscode-textBlockQuote-background: rgba(127, 127, 127, 0.1); + --vscode-textBlockQuote-border: rgba(0, 122, 204, 0.5); + --vscode-textCodeBlock-background: rgba(10, 10, 10, 0.4); + --vscode-textLink-activeForeground: #eeffff; + --vscode-textLink-foreground: #80cbc4; + --vscode-textPreformat-foreground: #d7ba7d; + --vscode-textSeparator-foreground: rgba(255, 255, 255, 0.18); + --vscode-titleBar-activeBackground: #192227; + --vscode-titleBar-activeForeground: #eeffff; + --vscode-titleBar-border: rgba(0, 0, 0, 0.38); + --vscode-titleBar-inactiveBackground: #192227; + --vscode-titleBar-inactiveForeground: #5f7a87; + --vscode-widget-shadow: rgba(0, 0, 0, 0.19); +} diff --git a/playground/src/vscode-light.scss b/playground/src/vscode-light.scss new file mode 100644 index 0000000..ede626c --- /dev/null +++ b/playground/src/vscode-light.scss @@ -0,0 +1,307 @@ +.theme-light { + --vscode-activityBar-background: #2c2c2c; + --vscode-activityBar-dropBackground: rgba(255, 255, 255, 0.12); + --vscode-activityBar-foreground: #ffffff; + --vscode-activityBar-inactiveForeground: rgba(255, 255, 255, 0.6); + --vscode-activityBarBadge-background: #007acc; + --vscode-activityBarBadge-foreground: #ffffff; + --vscode-badge-background: #c4c4c4; + --vscode-badge-foreground: #333333; + --vscode-breadcrumb-activeSelectionForeground: #4e4e4e; + --vscode-breadcrumb-background: #ffffff; + --vscode-breadcrumb-focusForeground: #4e4e4e; + --vscode-breadcrumb-foreground: rgba(97, 97, 97, 0.8); + --vscode-breadcrumbPicker-background: #f3f3f3; + --vscode-button-background: #007acc; + --vscode-button-foreground: #ffffff; + --vscode-button-hoverBackground: #0062a3; + --vscode-debugExceptionWidget-background: #f1dfde; + --vscode-debugExceptionWidget-border: #a31515; + --vscode-debugToolBar-background: #f3f3f3; + --vscode-descriptionForeground: #717171; + --vscode-diffEditor-insertedTextBackground: rgba(155, 185, 85, 0.2); + --vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, 0.2); + --vscode-dropdown-background: #ffffff; + --vscode-dropdown-border: #cecece; + --vscode-editor-background: #ffffff; + --vscode-editor-findMatchBackground: #a8ac94; + --vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); + --vscode-editor-findRangeHighlightBackground: rgba(180, 180, 180, 0.3); + --vscode-editor-focusedStackFrameHighlightBackground: rgba( + 206, + 231, + 206, + 0.45 + ); + --vscode-editor-font-family: Consolas, "Courier New", monospace; + --vscode-editor-font-size: 14; + --vscode-editor-font-weight: normal; + --vscode-editor-foreground: #000000; + --vscode-editor-hoverHighlightBackground: rgba(173, 214, 255, 0.15); + --vscode-editor-inactiveSelectionBackground: #e5ebf1; + --vscode-editor-lineHighlightBorder: #eeeeee; + --vscode-editor-rangeHighlightBackground: rgba(253, 255, 0, 0.2); + --vscode-editor-selectionBackground: #add6ff; + --vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, 0.5); + --vscode-editor-snippetFinalTabstopHighlightBorder: rgba(10, 50, 100, 0.5); + --vscode-editor-snippetTabstopHighlightBackground: rgba(10, 50, 100, 0.2); + --vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 102, 0.45); + --vscode-editor-wordHighlightBackground: rgba(87, 87, 87, 0.25); + --vscode-editor-wordHighlightStrongBackground: rgba(14, 99, 156, 0.25); + --vscode-editorActiveLineNumber-foreground: #0b216f; + --vscode-editorBracketMatch-background: rgba(0, 100, 0, 0.1); + --vscode-editorBracketMatch-border: #b9b9b9; + --vscode-editorCodeLens-foreground: #999999; + --vscode-editorCursor-foreground: #000000; + --vscode-editorError-foreground: #e51400; + --vscode-editorGroup-border: #e7e7e7; + --vscode-editorGroup-dropBackground: rgba(38, 119, 203, 0.18); + --vscode-editorGroupHeader-noTabsBackground: #ffffff; + --vscode-editorGroupHeader-tabsBackground: #f3f3f3; + --vscode-editorGutter-addedBackground: #81b88b; + --vscode-editorGutter-background: #ffffff; + --vscode-editorGutter-commentRangeForeground: #c5c5c5; + --vscode-editorGutter-deletedBackground: #ca4b51; + --vscode-editorGutter-modifiedBackground: #66afe0; + --vscode-editorHint-foreground: #6c6c6c; + --vscode-editorHoverWidget-background: #f3f3f3; + --vscode-editorHoverWidget-border: #c8c8c8; + --vscode-editorHoverWidget-statusBarBackground: #e7e7e7; + --vscode-editorIndentGuide-activeBackground: #939393; + --vscode-editorIndentGuide-background: #d3d3d3; + --vscode-editorInfo-foreground: #008000; + --vscode-editorLineNumber-activeForeground: #0b216f; + --vscode-editorLineNumber-foreground: #237893; + --vscode-editorLink-activeForeground: #0000ff; + --vscode-editorMarkerNavigation-background: #ffffff; + --vscode-editorMarkerNavigationError-background: #e51400; + --vscode-editorMarkerNavigationInfo-background: #008000; + --vscode-editorMarkerNavigationWarning-background: #e9a700; + --vscode-editorOverviewRuler-addedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-border: rgba(127, 127, 127, 0.3); + --vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0; + --vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, 0.4); + --vscode-editorOverviewRuler-currentContentForeground: rgba( + 64, + 200, + 174, + 0.5 + ); + --vscode-editorOverviewRuler-deletedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, 0.7); + --vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49); + --vscode-editorOverviewRuler-incomingContentForeground: rgba( + 64, + 166, + 255, + 0.5 + ); + --vscode-editorOverviewRuler-infoForeground: #008000; + --vscode-editorOverviewRuler-modifiedForeground: rgba(0, 122, 204, 0.6); + --vscode-editorOverviewRuler-rangeHighlightForeground: rgba( + 0, + 122, + 204, + 0.6 + ); + --vscode-editorOverviewRuler-selectionHighlightForeground: rgba( + 160, + 160, + 160, + 0.8 + ); + --vscode-editorOverviewRuler-warningForeground: #e9a700; + --vscode-editorOverviewRuler-wordHighlightForeground: rgba( + 160, + 160, + 160, + 0.8 + ); + --vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba( + 192, + 160, + 192, + 0.8 + ); + --vscode-editorPane-background: #ffffff; + --vscode-editorRuler-foreground: #d3d3d3; + --vscode-editorSuggestWidget-background: #f3f3f3; + --vscode-editorSuggestWidget-border: #c8c8c8; + --vscode-editorSuggestWidget-foreground: #000000; + --vscode-editorSuggestWidget-highlightForeground: #0066bf; + --vscode-editorSuggestWidget-selectedBackground: #d6ebff; + --vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, 0.47); + --vscode-editorWarning-foreground: #e9a700; + --vscode-editorWhitespace-foreground: rgba(51, 51, 51, 0.2); + --vscode-editorWidget-background: #f3f3f3; + --vscode-editorWidget-border: #c8c8c8; + --vscode-errorForeground: #a1260d; + --vscode-extensionBadge-remoteBackground: #007acc; + --vscode-extensionBadge-remoteForeground: #ffffff; + --vscode-extensionButton-prominentBackground: #327e36; + --vscode-extensionButton-prominentForeground: #ffffff; + --vscode-extensionButton-prominentHoverBackground: #28632b; + --vscode-focusBorder: rgba(0, 122, 204, 0.4); + --vscode-font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", + "Segoe UI", "Ubuntu", "Droid Sans", ans-serif; + --vscode-font-size: 13px; + --vscode-font-weight: normal; + --vscode-foreground: #616161; + --vscode-gitDecoration-addedResourceForeground: #587c0c; + --vscode-gitDecoration-conflictingResourceForeground: #6c6cc4; + --vscode-gitDecoration-deletedResourceForeground: #ad0707; + --vscode-gitDecoration-ignoredResourceForeground: #8e8e90; + --vscode-gitDecoration-modifiedResourceForeground: #895503; + --vscode-gitDecoration-submoduleResourceForeground: #1258a7; + --vscode-gitDecoration-untrackedResourceForeground: #007100; + --vscode-gitlens-gutterBackgroundColor: rgba(0, 0, 0, 0.05); + --vscode-gitlens-gutterForegroundColor: #747474; + --vscode-gitlens-gutterUncommittedForegroundColor: rgba(0, 188, 242, 0.6); + --vscode-gitlens-lineHighlightBackgroundColor: rgba(0, 188, 242, 0.2); + --vscode-gitlens-lineHighlightOverviewRulerColor: rgba(0, 188, 242, 0.6); + --vscode-gitlens-trailingLineBackgroundColor: rgba(0, 0, 0, 0); + --vscode-gitlens-trailingLineForegroundColor: rgba(153, 153, 153, 0.35); + --vscode-input-background: #ffffff; + --vscode-input-foreground: #616161; + --vscode-input-placeholderForeground: #767676; + --vscode-inputOption-activeBorder: #007acc; + --vscode-inputValidation-errorBackground: #f2dede; + --vscode-inputValidation-errorBorder: #be1100; + --vscode-inputValidation-infoBackground: #d6ecf2; + --vscode-inputValidation-infoBorder: #007acc; + --vscode-inputValidation-warningBackground: #f6f5d2; + --vscode-inputValidation-warningBorder: #b89500; + --vscode-list-activeSelectionBackground: #0074e8; + --vscode-list-activeSelectionForeground: #ffffff; + --vscode-list-dropBackground: #d6ebff; + --vscode-list-errorForeground: #b01011; + --vscode-list-focusBackground: #d6ebff; + --vscode-list-highlightForeground: #0066bf; + --vscode-list-hoverBackground: #e8e8e8; + --vscode-list-inactiveSelectionBackground: #e4e6f1; + --vscode-list-invalidItemForeground: #b89500; + --vscode-list-warningForeground: #855f00; + --vscode-listFilterWidget-background: #efc1ad; + --vscode-listFilterWidget-noMatchesOutline: #be1100; + --vscode-listFilterWidget-outline: rgba(0, 0, 0, 0); + --vscode-menu-background: #ffffff; + --vscode-menu-foreground: #616161; + --vscode-menu-selectionBackground: #0074e8; + --vscode-menu-selectionForeground: #ffffff; + --vscode-menu-separatorBackground: #888888; + --vscode-menubar-selectionBackground: rgba(0, 0, 0, 0.1); + --vscode-menubar-selectionForeground: #333333; + --vscode-merge-commonContentBackground: rgba(96, 96, 96, 0.16); + --vscode-merge-commonHeaderBackground: rgba(96, 96, 96, 0.4); + --vscode-merge-currentContentBackground: rgba(64, 200, 174, 0.2); + --vscode-merge-currentHeaderBackground: rgba(64, 200, 174, 0.5); + --vscode-merge-incomingContentBackground: rgba(64, 166, 255, 0.2); + --vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, 0.5); + --vscode-notificationCenterHeader-background: #e7e7e7; + --vscode-notificationLink-foreground: #006ab1; + --vscode-notifications-background: #f3f3f3; + --vscode-notifications-border: #e7e7e7; + --vscode-panel-background: #ffffff; + --vscode-panel-border: rgba(128, 128, 128, 0.35); + --vscode-panel-dropBackground: rgba(38, 119, 203, 0.18); + --vscode-panelInput-border: #dddddd; + --vscode-panelTitle-activeBorder: rgba(128, 128, 128, 0.35); + --vscode-panelTitle-activeForeground: #424242; + --vscode-panelTitle-inactiveForeground: rgba(66, 66, 66, 0.75); + --vscode-peekView-border: #007acc; + --vscode-peekViewEditor-background: #f2f8fc; + --vscode-peekViewEditor-matchHighlightBackground: rgba(245, 216, 2, 0.87); + --vscode-peekViewEditorGutter-background: #f2f8fc; + --vscode-peekViewResult-background: #f3f3f3; + --vscode-peekViewResult-fileForeground: #1e1e1e; + --vscode-peekViewResult-lineForeground: #646465; + --vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, 0.3); + --vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, 0.2); + --vscode-peekViewResult-selectionForeground: #6c6c6c; + --vscode-peekViewTitle-background: #ffffff; + --vscode-peekViewTitleDescription-foreground: rgba(108, 108, 108, 0.7); + --vscode-peekViewTitleLabel-foreground: #333333; + --vscode-pickerGroup-border: #cccedb; + --vscode-pickerGroup-foreground: #0066bf; + --vscode-progressBar-background: #0e70c0; + --vscode-quickInput-background: #f3f3f3; + --vscode-scrollbar-shadow: #dddddd; + --vscode-scrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6); + --vscode-scrollbarSlider-background: rgba(100, 100, 100, 0.4); + --vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7); + --vscode-settings-checkboxBackground: #ffffff; + --vscode-settings-checkboxBorder: #cecece; + --vscode-settings-dropdownBackground: #ffffff; + --vscode-settings-dropdownBorder: #cecece; + --vscode-settings-dropdownListBorder: #c8c8c8; + --vscode-settings-headerForeground: #444444; + --vscode-settings-modifiedItemIndicator: #66afe0; + --vscode-settings-numberInputBackground: #ffffff; + --vscode-settings-numberInputBorder: #cecece; + --vscode-settings-numberInputForeground: #616161; + --vscode-settings-textInputBackground: #ffffff; + --vscode-settings-textInputBorder: #cecece; + --vscode-settings-textInputForeground: #616161; + --vscode-sideBar-background: #f3f3f3; + --vscode-sideBar-dropBackground: rgba(0, 0, 0, 0.1); + --vscode-sideBarSectionHeader-background: rgba(128, 128, 128, 0.2); + --vscode-sideBarTitle-foreground: #6f6f6f; + --vscode-statusBar-background: #007acc; + --vscode-statusBar-debuggingBackground: #cc6633; + --vscode-statusBar-debuggingForeground: #ffffff; + --vscode-statusBar-foreground: #ffffff; + --vscode-statusBar-noFolderBackground: #68217a; + --vscode-statusBar-noFolderForeground: #ffffff; + --vscode-statusBarItem-activeBackground: rgba(255, 255, 255, 0.18); + --vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, 0.12); + --vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, 0.5); + --vscode-statusBarItem-prominentForeground: #ffffff; + --vscode-statusBarItem-prominentHoverBackground: rgba(0, 0, 0, 0.3); + --vscode-statusBarItem-remoteBackground: #16825d; + --vscode-statusBarItem-remoteForeground: #ffffff; + --vscode-tab-activeBackground: #ffffff; + --vscode-tab-activeForeground: #333333; + --vscode-tab-activeModifiedBorder: #33aaee; + --vscode-tab-border: #f3f3f3; + --vscode-tab-inactiveBackground: #ececec; + --vscode-tab-inactiveForeground: rgba(51, 51, 51, 0.7); + --vscode-tab-inactiveModifiedBorder: rgba(51, 170, 238, 0.5); + --vscode-tab-unfocusedActiveBackground: #ffffff; + --vscode-tab-unfocusedActiveForeground: rgba(51, 51, 51, 0.7); + --vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 170, 238, 0.7); + --vscode-tab-unfocusedInactiveForeground: rgba(51, 51, 51, 0.35); + --vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 170, 238, 0.25); + --vscode-terminal-ansiBlack: #000000; + --vscode-terminal-ansiBlue: #0451a5; + --vscode-terminal-ansiBrightBlack: #666666; + --vscode-terminal-ansiBrightBlue: #0451a5; + --vscode-terminal-ansiBrightCyan: #0598bc; + --vscode-terminal-ansiBrightGreen: #14ce14; + --vscode-terminal-ansiBrightMagenta: #bc05bc; + --vscode-terminal-ansiBrightRed: #cd3131; + --vscode-terminal-ansiBrightWhite: #a5a5a5; + --vscode-terminal-ansiBrightYellow: #b5ba00; + --vscode-terminal-ansiCyan: #0598bc; + --vscode-terminal-ansiGreen: #00bc00; + --vscode-terminal-ansiMagenta: #bc05bc; + --vscode-terminal-ansiRed: #cd3131; + --vscode-terminal-ansiWhite: #555555; + --vscode-terminal-ansiYellow: #949800; + --vscode-terminal-background: #ffffff; + --vscode-terminal-border: rgba(128, 128, 128, 0.35); + --vscode-terminal-foreground: #333333; + --vscode-terminal-selectionBackground: rgba(0, 0, 0, 0.25); + --vscode-textBlockQuote-background: rgba(127, 127, 127, 0.1); + --vscode-textBlockQuote-border: rgba(0, 122, 204, 0.5); + --vscode-textCodeBlock-background: rgba(220, 220, 220, 0.4); + --vscode-textLink-activeForeground: #006ab1; + --vscode-textLink-foreground: #006ab1; + --vscode-textPreformat-foreground: #a31515; + --vscode-textSeparator-foreground: rgba(0, 0, 0, 0.18); + --vscode-titleBar-activeBackground: #dddddd; + --vscode-titleBar-activeForeground: #333333; + --vscode-titleBar-inactiveBackground: rgba(221, 221, 221, 0.6); + --vscode-titleBar-inactiveForeground: rgba(51, 51, 51, 0.6); + --vscode-tree-indentGuidesStroke: #a9a9a9; + --vscode-widget-shadow: #a8a8a8; +} diff --git a/playground/tsconfig.json b/playground/tsconfig.json new file mode 100644 index 0000000..52bb0f7 --- /dev/null +++ b/playground/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "strict": true, + "outDir": "dist", + "skipLibCheck": true, + "rootDir": "./src", + "resolveJsonModule": true, + "newLine": "LF", + "sourceMap": true, + "jsx": "react", + "experimentalDecorators": true + }, + "include": ["src/**/*"] +} diff --git a/playground/webpack.config.ts b/playground/webpack.config.ts new file mode 100644 index 0000000..da3f52d --- /dev/null +++ b/playground/webpack.config.ts @@ -0,0 +1,74 @@ +import * as webpack from "webpack"; +import path = require("path"); +import HtmlWebpackPlugin = require("html-webpack-plugin"); +import MonacoWebpackPlugin = require("monaco-editor-webpack-plugin"); +import ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); +import { CleanWebpackPlugin } from "clean-webpack-plugin"; + +const r = (file: string) => path.resolve(__dirname, file); + +module.exports = { + entry: [r("src/index.tsx")], + output: { + path: r("dist"), + filename: "[name].js", + chunkFilename: "[name]-[hash].js", + devtoolModuleFilenameTemplate: info => { + let result = info.absoluteResourcePath.replace(/\\/g, "/"); + if (!result.startsWith("file:")) { + // Some paths already start with the file scheme. + result = "file:///" + result; + } + return result; + }, + }, + resolve: { + extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"], + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.less$/, + loaders: ["style-loader", "css-loader", "less-loader"], + }, + { test: /\.css$/, loader: "style-loader!css-loader" }, + { test: /\.scss$/, loader: "style-loader!css-loader!sass-loader" }, + { + test: /\.(jpe?g|png|gif|eot|ttf|svg|woff|woff2|md)$/i, + loader: "file-loader", + }, + { + test: /\.tsx?$/, + loader: "ts-loader", + options: { transpileOnly: true }, + }, + { + test: /\.js$/, + enforce: "pre", + use: ["source-map-loader"], + }, + ], + }, + node: { + fs: "empty", + }, + plugins: (() => { + const plugins: any[] = [ + new HtmlWebpackPlugin({ + title: "Debug Visualizer", + }), + new ForkTsCheckerWebpackPlugin(), + new CleanWebpackPlugin(), + ]; + + plugins.push( + new MonacoWebpackPlugin({ + // Add more languages here once webworker issues are solved. + languages: ["typescript", "json"], + }) + ); + + return plugins; + })(), +} as webpack.Configuration; diff --git a/simple-demo/package.json b/simple-demo/package.json new file mode 100644 index 0000000..c5cec56 --- /dev/null +++ b/simple-demo/package.json @@ -0,0 +1,38 @@ +{ + "name": "simple-demo", + "version": "0.0.1", + "license": "MIT", + "scripts": { + "dev": "webpack-dev-server --hot --port 8090", + "build": "webpack" + }, + "dependencies": { + "@hediet/visualization-core": "^0.1.0", + "@hediet/visualization-bundle": "^0.1.0", + "react": "^16.12.0", + "react-dom": "^16.12.0" + }, + "devDependencies": { + "@types/html-webpack-plugin": "^3.2.2", + "@types/webpack": "^4.41.6", + "@types/react": "^16.9.22", + "@types/react-dom": "^16.9.5", + "clean-webpack-plugin": "^3.0.0", + "css-loader": "^3.4.2", + "file-loader": "^5.1.0", + "fork-ts-checker-webpack-plugin": "^4.0.4", + "html-webpack-plugin": "^3.2.0", + "monaco-editor-webpack-plugin": "^1.9.0", + "raw-loader": "^4.0.0", + "sass-loader": "^8.0.2", + "style-loader": "^1.1.3", + "ts-loader": "^6.2.1", + "ts-node": "^8.6.2", + "typescript": "^3.8.2", + "webpack": "^4.41.6", + "webpack-cli": "^3.3.11", + "webpack-dev-server": "^3.10.3", + "source-map-loader": "^1.0.1", + "less-loader": "^6.2.0" + } +} diff --git a/simple-demo/src/index.tsx b/simple-demo/src/index.tsx new file mode 100644 index 0000000..e475f25 --- /dev/null +++ b/simple-demo/src/index.tsx @@ -0,0 +1,47 @@ +import { + VisualizationView, + Theme, + globalVisualizationFactory, + VisualizationData, +} from "@hediet/visualization-core"; + +// This registers all visualizations +import "@hediet/visualization-bundle"; + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import "./style.scss"; + +class App extends React.Component { + render() { + const data = { + kind: { graph: true as true }, + nodes: [ + { id: "1", label: "1" }, + { id: "2", label: "2", color: "orange" }, + { id: "3", label: "3" }, + ], + edges: [ + { from: "1", to: "2", color: "red" }, + { from: "1", to: "3" }, + ], + }; + + const visualizations = globalVisualizationFactory.getVisualizations( + data, + undefined + ); + + return ( + + ); + } +} + +const elem = document.createElement("div"); +elem.className = "react-root"; +document.body.append(elem); +ReactDOM.render(, elem); diff --git a/simple-demo/src/style.scss b/simple-demo/src/style.scss new file mode 100644 index 0000000..77cf35a --- /dev/null +++ b/simple-demo/src/style.scss @@ -0,0 +1,7 @@ +@import "~@hediet/visualization-bundle/style.scss"; + +html, +body, +.react-root { + height: 100%; +} diff --git a/simple-demo/tsconfig.json b/simple-demo/tsconfig.json new file mode 100644 index 0000000..52bb0f7 --- /dev/null +++ b/simple-demo/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "commonjs", + "strict": true, + "outDir": "dist", + "skipLibCheck": true, + "rootDir": "./src", + "resolveJsonModule": true, + "newLine": "LF", + "sourceMap": true, + "jsx": "react", + "experimentalDecorators": true + }, + "include": ["src/**/*"] +} diff --git a/simple-demo/webpack.config.ts b/simple-demo/webpack.config.ts new file mode 100644 index 0000000..da3f52d --- /dev/null +++ b/simple-demo/webpack.config.ts @@ -0,0 +1,74 @@ +import * as webpack from "webpack"; +import path = require("path"); +import HtmlWebpackPlugin = require("html-webpack-plugin"); +import MonacoWebpackPlugin = require("monaco-editor-webpack-plugin"); +import ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); +import { CleanWebpackPlugin } from "clean-webpack-plugin"; + +const r = (file: string) => path.resolve(__dirname, file); + +module.exports = { + entry: [r("src/index.tsx")], + output: { + path: r("dist"), + filename: "[name].js", + chunkFilename: "[name]-[hash].js", + devtoolModuleFilenameTemplate: info => { + let result = info.absoluteResourcePath.replace(/\\/g, "/"); + if (!result.startsWith("file:")) { + // Some paths already start with the file scheme. + result = "file:///" + result; + } + return result; + }, + }, + resolve: { + extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"], + }, + devtool: "source-map", + module: { + rules: [ + { + test: /\.less$/, + loaders: ["style-loader", "css-loader", "less-loader"], + }, + { test: /\.css$/, loader: "style-loader!css-loader" }, + { test: /\.scss$/, loader: "style-loader!css-loader!sass-loader" }, + { + test: /\.(jpe?g|png|gif|eot|ttf|svg|woff|woff2|md)$/i, + loader: "file-loader", + }, + { + test: /\.tsx?$/, + loader: "ts-loader", + options: { transpileOnly: true }, + }, + { + test: /\.js$/, + enforce: "pre", + use: ["source-map-loader"], + }, + ], + }, + node: { + fs: "empty", + }, + plugins: (() => { + const plugins: any[] = [ + new HtmlWebpackPlugin({ + title: "Debug Visualizer", + }), + new ForkTsCheckerWebpackPlugin(), + new CleanWebpackPlugin(), + ]; + + plugins.push( + new MonacoWebpackPlugin({ + // Add more languages here once webworker issues are solved. + languages: ["typescript", "json"], + }) + ); + + return plugins; + })(), +} as webpack.Configuration; diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..24721c9 --- /dev/null +++ b/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "recommended", + "rules": { + "await-promise": true + } +} diff --git a/visualization-bundle/README.md b/visualization-bundle/README.md new file mode 100644 index 0000000..fde4cc7 --- /dev/null +++ b/visualization-bundle/README.md @@ -0,0 +1,45 @@ +# Visualization Bundle + +You can use yarn to install this library: + +``` +yarn add @hediet/visualization-bundle +``` + +## Usage + +Import `@hediet/visualization-bundle` to register all default visualizations to `globalVisualizationFactory` of `@hediet/visualization-core`: + +```tsx +// This registers all visualizations +import "@hediet/visualization-bundle"; +``` + +Don't forget to import the styles in your scss file: + +```scss +@import "~@hediet/visualization-bundle/style.scss"; +``` + +See docs of `@hediet/visualization-core` for how to find and render visualizations! + +## Supported Visualizations + +### Origin Visualizations + +- Tree Visualizer +- AST Visualizer (+ Monaco Source Code View) +- Grid Visualizer +- SVG Visualizer +- Image Visualizer +- Simple Text Visualizer + +### Integrated Visualizations + +- Plotly Visualizer +- Perspective JS Visualizer +- VisJS Visualizer +- Graphviz Graph Visualizer +- Graphviz Dot Visualizer +- Vis.js Visualizer +- Monaco Editor Source Code Visualizer diff --git a/visualization-bundle/package.json b/visualization-bundle/package.json new file mode 100644 index 0000000..e6878c6 --- /dev/null +++ b/visualization-bundle/package.json @@ -0,0 +1,65 @@ +{ + "name": "@hediet/visualization-bundle", + "description": "Bundles several visualizers", + "version": "0.1.0", + "license": "MIT", + "scripts": { + "dev": "tsc --watch", + "build": "tsc" + }, + "homepage": "https://github.com/hediet/visualization", + "repository": { + "type": "git", + "url": "https://github.com/hediet/visualization.git" + }, + "files": [ + "dist", + "src" + ], + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@hediet/std": "^0.6.0", + "@hediet/semantic-json": "^0.3.11", + "classnames": "^2.2.6", + "mobx": "^5.15.4", + "mobx-react": "^6.1.8", + "monaco-editor": "^0.20.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-measure": "^2.3.0", + "react-svg-pan-zoom": "^3.8.0", + "line-column": "^1.0.2", + "vis-network": "^8.0.0", + "vis-data": "^7.0.0", + "viz.js": "^2.1.2", + "react-plotly.js": "^2.4.0", + "plotly.js": "^1.54.7", + "@finos/perspective-viewer": "^0.5.2", + "@finos/perspective-viewer-d3fc": "^0.5.2", + "@finos/perspective-viewer-datagrid": "^0.5.2", + "@hediet/monaco-editor-react": "^0.1.0" + }, + "peerDependencies": { + "@hediet/visualization-core": "^0.1.0" + }, + "devDependencies": { + "@types/plotly.js": "^1.50.16", + "@types/react-plotly.js": "^2.2.4", + "@types/react-measure": "^2.0.6", + "@types/react-svg-pan-zoom": "^3.3.0", + "@types/webpack": "^4.41.6", + "@types/classnames": "^2.2.9", + "@types/react": "^16.9.22", + "@types/react-dom": "^16.9.5", + "@types/line-column": "^1.0.0", + "sass": "^1.25.0", + "ts-loader": "^6.2.1", + "ts-node": "^8.6.2", + "typescript": "^3.9.7" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/visualization-bundle/src/consts.ts b/visualization-bundle/src/consts.ts new file mode 100644 index 0000000..27e9a26 --- /dev/null +++ b/visualization-bundle/src/consts.ts @@ -0,0 +1,3 @@ +import { namespace } from "@hediet/semantic-json/dist/src/NamespacedNamed"; + +export const visualizationNs = namespace("hediet.de/visualization"); diff --git a/visualization-bundle/src/index.ts b/visualization-bundle/src/index.ts new file mode 100644 index 0000000..05d38fb --- /dev/null +++ b/visualization-bundle/src/index.ts @@ -0,0 +1 @@ +export * from "./visualizers"; diff --git a/visualization-bundle/src/utils/LazyLoadable.tsx b/visualization-bundle/src/utils/LazyLoadable.tsx new file mode 100644 index 0000000..a8dcd37 --- /dev/null +++ b/visualization-bundle/src/utils/LazyLoadable.tsx @@ -0,0 +1,30 @@ +import * as React from "react"; +import { observable, runInAction } from "mobx"; +import { observer } from "mobx-react"; + +export function makeLazyLoadable( + selector: () => Promise> +): React.ComponentClass { + @observer + class MyComponent extends React.Component { + @observable + component: React.ComponentClass | undefined; + + async componentDidMount() { + const result = await selector(); + runInAction("Set Lazily Loaded Component", () => { + this.component = result; + }); + } + + render() { + if (!this.component) { + return
Loading...
; + } + const C = this.component; + return ; + } + } + + return MyComponent; +} diff --git a/visualization-bundle/src/utils/index.ts b/visualization-bundle/src/utils/index.ts new file mode 100644 index 0000000..fb082ce --- /dev/null +++ b/visualization-bundle/src/utils/index.ts @@ -0,0 +1,13 @@ +import { Refinement } from "@hediet/semantic-json/dist/src/serialization/BaseSerializer"; + +export function withDeserializer( + fromIntermediate: (val: TIntermediate) => T +): Refinement { + return { + canSerialize: (val: unknown): val is T => false, + fromIntermediate, + toIntermediate: () => { + throw new Error("not supported"); + }, + }; +} diff --git a/visualization-bundle/src/visualizers/ast-visualizer/AstVisualizer.tsx b/visualization-bundle/src/visualizers/ast-visualizer/AstVisualizer.tsx new file mode 100644 index 0000000..0cfa153 --- /dev/null +++ b/visualization-bundle/src/visualizers/ast-visualizer/AstVisualizer.tsx @@ -0,0 +1,270 @@ +import * as React from "react"; +import { observer, disposeOnUnmount } from "mobx-react"; +import { observable, autorun, trace, computed } from "mobx"; +import * as monacoTypes from "monaco-editor"; +import { getLanguageId } from "../monaco-text-visualizer/MonacoEditor"; +import { + TreeWithPathView, + TreeViewModel, + TreeNodeViewModel, +} from "../tree-visualizer/Views"; +import { sAstTree } from "."; +import Measure from "react-measure"; +import { MonacoEditor, getLoadedMonaco } from "@hediet/monaco-editor-react"; +import { Theme } from "@hediet/visualization-core"; + +export interface NodeInfo { + start: number; + length: number; +} + +@observer +export class AstTree extends React.Component<{ + model: TreeViewModel; + data: typeof sAstTree.T; + nodeInfoToRange: (info: NodeInfo) => monacoTypes.IRange; + posToIndex: (pos: monacoTypes.IPosition) => number; + theme: Theme; +}> { + private readonly editorRef = React.createRef(); + + render() { + const { model, data, theme } = this.props; + + let languageId = "text"; + if (data.fileName) { + languageId = getLanguageId(data.fileName); + } + return ( + + {({ measureRef, contentRect }) => { + return ( +
1100 + ? "row" + : "column", + }} + > +
+ +
+
+ +
+
+ ); + }} +
+ ); + } +} + +@observer +export class SourceCodeView extends React.Component<{ + text: string; + languageId: string; + model: TreeViewModel; + theme: Theme; + nodeInfoToRange: (info: NodeInfo) => monacoTypes.IRange; + posToIndex: (pos: monacoTypes.IPosition) => number; +}> { + @observable private editor: + | monacoTypes.editor.IStandaloneCodeEditor + | undefined; + + private markedDecorations: string[] = []; + private selectedDecorations: string[] = []; + + constructor(props: any) { + super(props); + } + + layout() { + if (this.editor) { + this.editor.layout(); + } + } + + @computed.struct + private get markedRanges(): monacoTypes.IRange[] { + if (!this.editor || !this.model) { + return []; + } + + const editorModel = this.model; + const ranges = this.props.model.marked.map(s => + this.props.nodeInfoToRange(s.data) + ); + return ranges; + } + + @disposeOnUnmount + private _updateMarkedDecorations = autorun( + () => { + if (!this.editor) { + return; + } + const ranges = this.markedRanges; + this.markedDecorations = this.editor.deltaDecorations( + this.markedDecorations, + ranges.map(range => ({ + range, + options: { className: "marked" }, + })) + ); + if (ranges.length > 0) { + this.editor.revealRange( + ranges[0], + getLoadedMonaco().editor.ScrollType.Smooth + ); + } + }, + { name: "updateMarkedDecorations" } + ); + + @computed.struct + private get selected(): monacoTypes.IRange | undefined { + if (this.editor && this.model) { + const selected = this.props.model.selected; + if (selected) { + const range = this.props.nodeInfoToRange(selected.data); + return range; + } + } + return undefined; + } + + @disposeOnUnmount + private _updateSelectedDecoration = autorun( + () => { + console.log("_updateSelectedDecoration"); + if (!this.editor) { + return; + } + const range = this.selected; + if (range) { + this.selectedDecorations = this.editor.deltaDecorations( + this.selectedDecorations, + [ + { + range, + options: { className: "selected" }, + }, + ] + ); + this.editor.revealRange( + range, + getLoadedMonaco().editor.ScrollType.Smooth + ); + } else { + this.selectedDecorations = this.editor.deltaDecorations( + this.selectedDecorations, + [] + ); + } + }, + { name: "updateDecorations" } + ); + + @computed.struct + private get modelData(): { text: string; languageId: string } { + const { text, languageId } = this.props; + return { text, languageId }; + } + + private lastModel: monacoTypes.editor.ITextModel | undefined; + @computed get model(): monacoTypes.editor.ITextModel { + const last = this.lastModel; + this.lastModel = getLoadedMonaco().editor.createModel( + this.modelData.text, + this.modelData.languageId, + undefined + ); + if (last) { + setTimeout(() => { + // we don't want to dispose the current model + last.dispose(); + }); + } + return this.lastModel; + } + + render() { + return ( + { + this.editor = e; + e.onDidChangeCursorSelection(e => { + const selectionStart = this.props.posToIndex( + e.selection.getStartPosition() + ); + const selectionEnd = this.props.posToIndex( + e.selection.getEndPosition() + ); + + const findNode = ( + m: TreeNodeViewModel + ): TreeNodeViewModel | undefined => { + const nodeStart = m.data.start; + const nodeEnd = nodeStart + m.data.length; + + if ( + !( + nodeStart <= selectionStart && + selectionEnd <= nodeEnd + ) + ) { + return undefined; + } + + for (const c of m.children) { + const r = findNode(c); + if (r) { + return r; + } + } + + return m; + }; + + if (this.props.model.root) { + const n = findNode(this.props.model.root); + if (n) { + this.props.model.select(n); + } + } + }); + }} + readOnly={true} + /> + ); + } +} diff --git a/visualization-bundle/src/visualizers/ast-visualizer/index.tsx b/visualization-bundle/src/visualizers/ast-visualizer/index.tsx new file mode 100644 index 0000000..6dfa8ec --- /dev/null +++ b/visualization-bundle/src/visualizers/ast-visualizer/index.tsx @@ -0,0 +1,126 @@ +import { + Serializer, + sLazy, + sOpenObject, + sArrayOf, + sString, + sOptionalProp, + sUnion, + sLiteral, + sBoolean, + sProp, + sNumber, +} from "@hediet/semantic-json"; +import { visualizationNs } from "../../consts"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { createTreeViewModelFromTreeNodeData } from "../tree-visualizer"; +import { AstTree, NodeInfo } from "./AstVisualizer"; +import React from "react"; +import LineColumn from "line-column"; +import * as monacoTypes from "monaco-editor"; +import { getLoadedMonaco } from "@hediet/monaco-editor-react"; + +interface AstTreeNode { + children: AstTreeNode[]; + items: Item[]; + segment?: string; // like "root", ".name" or "[0]" + isMarked?: boolean; + span: NodeInfo; +} + +interface Item { + text: string; + emphasis?: "style1" | "style2" | "style3" | string; +} + +export const sAstTreeNode: Serializer = sLazy(() => + sOpenObject({ + children: sArrayOf(sAstTreeNode), + items: sArrayOf( + sOpenObject({ + text: sString(), + emphasis: sOptionalProp( + sUnion( + [ + sLiteral("style1"), + sLiteral("style2"), + sLiteral("style3"), + sString(), + ], + { inclusive: true } + ) + ), + }).defineAs(visualizationNs("TreeNodeItem")) + ), + segment: sOptionalProp(sString()), + isMarked: sOptionalProp(sBoolean()), + span: sOpenObject({ + start: sNumber(), + length: sNumber(), + }), + }).defineAs(visualizationNs("TreeNode")) +); + +export const sAstTree = sOpenObject({ + kind: sOpenObject({ + tree: sLiteral(true), + text: sLiteral(true), + }), + root: sAstTreeNode, + text: sString(), + fileName: sOptionalProp(sString()), +}); + +export const astVisualizer = createVisualizer({ + id: "ast", + name: "AST", + serializer: sAstTree, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1500 }, theme => { + const m = createTreeViewModelFromTreeNodeData( + data.root, + node => node.span + ); + const l = LineColumn(data.text); + function translatePosition(pos: number): monacoTypes.IPosition { + let r = l.fromIndex(pos); + if (!r) { + r = l.fromIndex(data.text.length - 1); + r.col++; + } + return { + column: r.col, + lineNumber: r.line, + }; + } + const nodeInfoToRange = (info: NodeInfo): monacoTypes.IRange => { + const start = translatePosition(info.start); + const end = translatePosition(info.start + info.length); + const range = getLoadedMonaco().Range.fromPositions(start, end); + return range; + }; + function posToIndex(pos: monacoTypes.IPosition): number { + const i = l.toIndex(pos.lineNumber, pos.column); + if (i == -1) { + return data.text.length; + } + return i; + } + + return ( + + ); + }), +}); + +globalVisualizationFactory.addVisualizer(astVisualizer); diff --git a/visualization-bundle/src/visualizers/ast-visualizer/style.scss b/visualization-bundle/src/visualizers/ast-visualizer/style.scss new file mode 100644 index 0000000..8d31b1a --- /dev/null +++ b/visualization-bundle/src/visualizers/ast-visualizer/style.scss @@ -0,0 +1,23 @@ +.theme-dark { + --visualizer-ast-marked-background: rgba(234, 92, 0, 0.33); + --visualizer-ast-selected-background: #515c6a; +} +.theme-light { + --visualizer-ast-marked-background: orange; + --visualizer-ast-selected-background: yellow; +} + +.component-AstTree { + .part-editor { + //border-top: solid gray 1px; + + .marked { + background: var(--visualizer-ast-marked-background); + } + + .selected { + background: var(--visualizer-ast-selected-background); + opacity: 0.7; + } + } +} diff --git a/visualization-bundle/src/visualizers/ast-visualizer/types.d.ts b/visualization-bundle/src/visualizers/ast-visualizer/types.d.ts new file mode 100644 index 0000000..852e80c --- /dev/null +++ b/visualization-bundle/src/visualizers/ast-visualizer/types.d.ts @@ -0,0 +1,13 @@ +declare module "line-column" { + export = function( + text: string + ): { + fromIndex( + idx: number + ): { + line: number; + col: number; + }; + toIndex(line: number, column: number): number; + } {}; +} diff --git a/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/GraphvizDotVisualizer.tsx b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/GraphvizDotVisualizer.tsx new file mode 100644 index 0000000..4fd86ee --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/GraphvizDotVisualizer.tsx @@ -0,0 +1,49 @@ +import { observer, disposeOnUnmount } from "mobx-react"; +import * as React from "react"; +import { observable, autorun, runInAction } from "mobx"; +import { SvgViewer } from "../../svg-visualizer/SvgViewer"; + +class VisLoader { + private result: any | undefined; + + async getViz(): Promise { + if (!this.result) { + const Viz = await import("viz.js"); + const { Module, render } = await import("viz.js/full.render.js"); + + const viz = new Viz.default({ + Module: () => Module({ TOTAL_MEMORY: 1 << 30 }), + render, + }); + + this.result = viz; + } + return this.result; + } +} + +const vizLoader = new VisLoader(); + +@observer +export class GraphvizDotViewer extends React.Component<{ + dotCode: string; + svgRef?: (element: SVGSVGElement | null) => void; +}> { + @observable private svg: string | null = null; + + @disposeOnUnmount + // @ts-ignore + private readonly _updateSvgAutorun = autorun(async () => { + const dotCode = this.props.dotCode; // to trigger mobx dependency + const viz = await vizLoader.getViz(); + const svg = await viz.renderString(dotCode); + runInAction("Update svg", () => (this.svg = svg)); + }); + + render() { + if (!this.svg) { + return
Loading...
; + } + return ; + } +} diff --git a/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/index.tsx b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/index.tsx new file mode 100644 index 0000000..308d5c7 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/index.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { sOpenObject, sLiteral, sString } from "@hediet/semantic-json"; +import { GraphvizDotViewer } from "./GraphvizDotVisualizer"; +import { + ReactVisualization, + globalVisualizationFactory, + createVisualizer, +} from "@hediet/visualization-core"; + +export const graphvizDotVisualizer = createVisualizer({ + id: "graphviz-dot", + name: "Graphviz (Dot Data)", + serializer: sOpenObject({ + kind: sOpenObject({ + dotGraph: sLiteral(true), + }), + text: sString(), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1500 }, () => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(graphvizDotVisualizer); diff --git a/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/types.d.ts b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/types.d.ts new file mode 100644 index 0000000..15425d7 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/dot-graphviz-visualizer/types.d.ts @@ -0,0 +1,9 @@ +declare module "viz.js" { + const x: any; + export default x; +} + +declare module "viz.js/full.render.js" { + export const render: any; + export const Module: any; +} diff --git a/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/GraphvizGraphVisualizer.tsx b/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/GraphvizGraphVisualizer.tsx new file mode 100644 index 0000000..7d025a4 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/GraphvizGraphVisualizer.tsx @@ -0,0 +1,36 @@ +import { observer } from "mobx-react"; +import * as React from "react"; +import { GraphvizDotViewer } from "../dot-graphviz-visualizer/GraphvizDotVisualizer"; + +@observer +export class GraphvizGraphViewer extends React.Component<{ + nodes: { id: string; label?: string }[]; + edges: { from: string; to: string; label?: string }[]; +}> { + render() { + const { nodes, edges } = this.props; + const dotContent = ` + digraph MyGraph { + ${nodes + .map( + n => + `"${n.id}" [ label = ${JSON.stringify( + n.label !== undefined ? n.label : n.id + )} ];` + ) + .join("\n ")} + ${edges + .map( + e => + `"${e.from}" -> "${ + e.to + }" [ label = ${JSON.stringify( + e.label !== undefined ? e.label : "" + )} ];` + ) + .join("\n")} + } + `; + return ; + } +} diff --git a/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/index.tsx b/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/index.tsx new file mode 100644 index 0000000..b4b6a90 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/graph-graphviz-visualizer/index.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { GraphvizGraphViewer } from "./GraphvizGraphVisualizer"; +import { sGraph } from "../sGraph"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const graphvizGraphVisualizer = createVisualizer({ + id: "graphviz-graph", + name: "Graphviz", + serializer: sGraph, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1000 }, () => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(graphvizGraphVisualizer); diff --git a/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/VisJsGraphViewer.tsx b/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/VisJsGraphViewer.tsx new file mode 100644 index 0000000..61cc013 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/VisJsGraphViewer.tsx @@ -0,0 +1,96 @@ +import { Network, Options, DataSet } from "vis-network/standalone"; +import { observer } from "mobx-react"; +import * as React from "react"; +import { NodeGraphData, EdgeGraphData } from "../sGraph"; + +@observer +export class VisJsGraphViewer extends React.Component<{ + nodes: NodeGraphData[]; + edges: EdgeGraphData[]; +}> { + private readonly divRef = React.createRef(); + private readonly nodes = new DataSet<{ + id: string; + label?: string; + color?: string; + shape?: string; + }>(); + private readonly edges = new DataSet<{ + id: string; + from: string; + to: string; + label?: string; + color?: string; + dashes?: boolean; + shape?: boolean; + }>(); + + render() { + return
; + } + + synchronizeData() { + const newNodes = new Set(); + for (const n of this.props.nodes) { + newNodes.add(n.id); + this.nodes.update({ + id: n.id, + label: n.label !== undefined ? n.label : n.id, + color: n.color, + shape: n.shape, + }); + } + this.nodes.forEach(item => { + if (!newNodes.has(item.id)) { + this.nodes.remove(item); + } + }); + + function getIdOfEdge(e: EdgeGraphData): string { + if (e.id) { + return e.id; + } + return e.from + "####" + e.to + "|" + e.label; + } + + const newEdges = new Set(); + for (const n of this.props.edges) { + const id = getIdOfEdge(n); + newEdges.add(id); + this.edges.update({ + id: id, + label: n.label !== undefined ? n.label : "", + from: n.from, + to: n.to, + color: n.color, + dashes: n.dashes, + }); + } + this.edges.forEach(item => { + if (!newEdges.has(item.id)) { + this.edges.remove(item); + } + }); + } + + componentDidUpdate() { + this.synchronizeData(); + } + + componentDidMount() { + this.synchronizeData(); + + const data = { + nodes: this.nodes, + edges: this.edges, + }; + const options: Options = { + edges: { + arrows: { + to: { enabled: true, scaleFactor: 1, type: "arrow" }, + }, + }, + }; + const network = new Network(this.divRef.current!, data, options); + } +} diff --git a/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/index.tsx b/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/index.tsx new file mode 100644 index 0000000..7ac81d5 --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/graph-visjs-visualizer/index.tsx @@ -0,0 +1,27 @@ +import * as React from "react"; +import { makeLazyLoadable } from "../../../utils/LazyLoadable"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { sGraph } from "../sGraph"; + +const VisJsGraphViewerLazyLoadable = makeLazyLoadable( + async () => (await import("./VisJsGraphViewer")).VisJsGraphViewer +); + +export const visJsGraphVisualizer = createVisualizer({ + id: "vis.js-graph", + name: "vis.js", + serializer: sGraph, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1500 }, () => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(visJsGraphVisualizer); diff --git a/visualization-bundle/src/visualizers/graph/index.ts b/visualization-bundle/src/visualizers/graph/index.ts new file mode 100644 index 0000000..5297fbc --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/index.ts @@ -0,0 +1,3 @@ +export * from "./dot-graphviz-visualizer"; +export * from "./graph-graphviz-visualizer"; +export * from "./graph-visjs-visualizer"; diff --git a/visualization-bundle/src/visualizers/graph/sGraph.ts b/visualization-bundle/src/visualizers/graph/sGraph.ts new file mode 100644 index 0000000..a13b62b --- /dev/null +++ b/visualization-bundle/src/visualizers/graph/sGraph.ts @@ -0,0 +1,35 @@ +import { + sOpenObject, + sLiteral, + sArrayOf, + sString, + sOptionalProp, + sUnion, + sBoolean, +} from "@hediet/semantic-json"; +import { visualizationNs } from "../../consts"; + +export type NodeGraphData = typeof sGraphNode.T; +export type EdgeGraphData = typeof sGraphEdge.T; + +export const sGraphNode = sOpenObject({ + id: sString(), + label: sOptionalProp(sString(), {}), + color: sOptionalProp(sString(), {}), + shape: sOptionalProp(sUnion([sLiteral("ellipse"), sLiteral("box")]), {}), +}).defineAs(visualizationNs("GraphNode")); + +export const sGraphEdge = sOpenObject({ + from: sString(), + to: sString(), + label: sOptionalProp(sString(), {}), + id: sOptionalProp(sString(), {}), + color: sOptionalProp(sString(), {}), + dashes: sOptionalProp(sBoolean(), {}), +}).defineAs(visualizationNs("GraphEdge")); + +export const sGraph = sOpenObject({ + kind: sOpenObject({ graph: sLiteral(true) }), + nodes: sArrayOf(sGraphNode), + edges: sArrayOf(sGraphEdge), +}).defineAs(visualizationNs("Graph")); diff --git a/visualization-bundle/src/visualizers/grid-visualizer/GridVisualizer.tsx b/visualization-bundle/src/visualizers/grid-visualizer/GridVisualizer.tsx new file mode 100644 index 0000000..154492c --- /dev/null +++ b/visualization-bundle/src/visualizers/grid-visualizer/GridVisualizer.tsx @@ -0,0 +1,377 @@ +import * as React from "react"; +import { observer } from "mobx-react"; +import { computed, action, observable } from "mobx"; +import { Icon } from "@blueprintjs/core"; +import { sGrid } from "."; + +export class DecoratedGridComponent extends React.Component<{ + data: typeof sGrid.T; +}> { + render() { + const d = this.props.data; + + const map = new Set(); + function getUniqueId(tag: string): string { + let n = 0; + while (true) { + const id = tag + (n === 0 ? "" : `-${n}`); + if (!map.has(id)) { + map.add(id); + return id; + } + n++; + } + } + + const rows: GridComponent["props"]["rows"] = []; + rows.push(); + let rowIdx = 0; + let columnCount = 0; + for (const row of d.rows) { + columnCount = Math.max(columnCount, row.columns.length); + rows.push({ + columns: row.columns.map((c, colIdx) => ({ + content: ( + + {c.content !== undefined ? c.content : c.tag || ""} + + ), + id: + c.tag !== undefined + ? getUniqueId(c.tag) + : `${rowIdx}-${colIdx}`, + color: c.color, + kind: "data", + })), + }); + rowIdx++; + } + + rows.unshift({ + columns: [...new Array(columnCount)].map((v, idx) => ({ + id: `column-header-${idx}`, + content: {idx}, + kind: "header", + })), + }); + + if (d.markers) { + for (const m of d.markers) { + rows.push({ + columns: [], + }); + const r = rows[rows.length - 1]; + for (let i = 0; i < m.column; i++) { + r.columns.push({ + content: "", + kind: "empty", + id: `marker-spacer-${i}`, + }); + } + + r.columns.push({ + id: m.id, + kind: "empty", + content: ( + + + {m.label || m.id} + + ), + }); + } + } + + return ( +
+ +
+ ); + } +} + +function Cell(props: { children: React.ReactNode }) { + return ( +
+ {props.children} +
+ ); +} + +interface CellData { + content: React.ReactNode; + id: string; + color?: string; + kind: "data" | "header" | "empty"; +} + +@observer +class GridComponent extends React.Component<{ + rows: { + columns: CellData[]; + }[]; + markers: { + id: string; + + row: number; + column: number; + rows?: number; + columns?: number; + + label?: string; + color?: string; + }[]; +}> { + private readonly cells = new Map(); + + @computed get cellsGrid(): { maxWidth: number; grid: CellInfo[][] } { + const unusedIds = new Set(this.cells.keys()); + + const rows = this.props.rows; + + const grid = new Array>(); + + let maxWidth = 0; + for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) { + const row = rows[rowIdx]; + maxWidth = Math.max(maxWidth, row.columns.length); + const cellRow = new Array(); + grid.push(cellRow); + + for (let colIdx = 0; colIdx < row.columns.length; colIdx++) { + const col = row.columns[colIdx]; + const key = col.id; + unusedIds.delete(key); + let c = this.cells.get(key); + if (!c) { + // New cell + c = new CellInfo(col); + this.cells.set(key, c); + } else { + c.updateCellData(col); + } + cellRow.push(c); + } + } + + for (const id in unusedIds.values()) { + this.cells.delete(id); + } + + return { maxWidth, grid }; + } + + @computed + private get layout(): { + cells: { + cell: CellInfo; + top: number; + left: number; + width: number; + height: number; + }[]; + width: number; + height: number; + } { + const { maxWidth, grid } = this.cellsGrid; + + const maxWidths = new Array(); + for (let colIdx = 0; colIdx < maxWidth; colIdx++) { + let maxWidth = 30; + for (const row of grid) { + const col = row[colIdx]; + if (col) { + maxWidth = Math.max(maxWidth, col.contentWidth || 0); + } + } + maxWidths.push(maxWidth); + } + + const result = new Array<{ + cell: CellInfo; + top: number; + left: number; + width: number; + height: number; + }>(); + + let width = 0; + let height = 0; + let top = 0; + let left = 0; + + for (const row of grid) { + let maxHeight = 0; + for (const col of row) { + maxHeight = Math.max(maxHeight, col.contentHeight || 0); + } + + for (let colIdx = 0; colIdx < row.length; colIdx++) { + const maxWidth = maxWidths[colIdx]; + const col = row[colIdx]; + result.push({ + cell: col, + top, + left, + height: maxHeight, + width: maxWidth, + }); + height = Math.max(height, top + maxHeight); + width = Math.max(width, left + maxWidth); + col.lastTop = col.top; + col.lastLeft = col.left; + col.top = top; + col.left = left; + + col.lastContentArea = col.contentArea; + col.contentArea = maxHeight * maxWidth; + left += maxWidth; + } + + left = 0; + top += maxHeight; + } + + result.sort((a, b) => a.cell.id.localeCompare(b.cell.id)); + return { cells: result, height, width }; + } + + render() { + const l = this.layout; + return ( +
+ {l.cells.map(i => ( +
+
+
+ {i.cell.content} +
+
+
+ ))} +
+ ); + } + + componentDidMount() { + this.updateContentSize(); + } + + componentDidUpdate() { + this.updateContentSize(); + } + + @action + updateContentSize() { + for (const c of this.cells.values()) { + if (c.ref) { + const r = c.ref.getBoundingClientRect(); + c.contentHeight = r.height + 6; + c.contentWidth = r.width + 4; + } + } + } +} + +class CellInfo { + @observable public contentWidth: number | undefined = undefined; + @observable public contentHeight: number | undefined = undefined; + + public contentArea = 0; + public lastContentArea = 0; + + public lastTop = 0; + public top = 0; + public lastLeft = 0; + public left = 0; + + public get distance(): number { + return Math.floor( + Math.pow(this.top - this.lastTop, 2) + + Math.pow(this.left - this.lastLeft, 2) + ); + } + + content!: React.ReactNode; + + ref: HTMLDivElement | null = null; + + public readonly id: string; + public readonly kind: CellData["kind"]; + + constructor(cellData: CellData) { + this.id = cellData.id; + this.kind = cellData.kind; + this.updateCellData(cellData); + } + + public updateCellData(cellData: CellData) { + this.content = cellData.content; + } + + public readonly handleRef = (ref: HTMLDivElement | null) => { + this.ref = ref; + }; +} diff --git a/visualization-bundle/src/visualizers/grid-visualizer/index.tsx b/visualization-bundle/src/visualizers/grid-visualizer/index.tsx new file mode 100644 index 0000000..37cebb8 --- /dev/null +++ b/visualization-bundle/src/visualizers/grid-visualizer/index.tsx @@ -0,0 +1,70 @@ +import React from "react"; +import { + sOpenObject, + sLiteral, + sString, + sArrayOf, + sObject, + sOptionalProp, + sNumber, +} from "@hediet/semantic-json"; +import { DecoratedGridComponent } from "./GridVisualizer"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const sGrid = sOpenObject({ + kind: sOpenObject({ + array: sLiteral(true), + }), + columnLabels: sArrayOf( + sOpenObject({ + label: sOptionalProp(sString(), {}), + }) + ), + rows: sArrayOf( + sOpenObject({ + label: sOptionalProp(sString(), {}), + columns: sArrayOf( + sOpenObject({ + content: sOptionalProp(sString(), {}), + tag: sOptionalProp(sString(), { + description: + "A value to identify this cell. Should be unique.", + }), + color: sOptionalProp(sString(), {}), + }) + ), + }) + ), + markers: sOptionalProp( + sArrayOf( + sOpenObject({ + id: sString(), + + row: sNumber(), + column: sNumber(), + rows: sOptionalProp(sNumber(), {}), + columns: sOptionalProp(sNumber(), {}), + + label: sOptionalProp(sString(), {}), + color: sOptionalProp(sString(), {}), + }) + ), + {} + ), +}); + +export const gridVisualizer = createVisualizer({ + id: "grid", + name: "Grid", + serializer: sGrid, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1000 }, () => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(gridVisualizer); diff --git a/visualization-bundle/src/visualizers/grid-visualizer/style.scss b/visualization-bundle/src/visualizers/grid-visualizer/style.scss new file mode 100644 index 0000000..e3db0f5 --- /dev/null +++ b/visualization-bundle/src/visualizers/grid-visualizer/style.scss @@ -0,0 +1,14 @@ +.component-Grid { + .part-data { + border: 1px solid lightgray; + background: #eeeeee; + } + + .part-header { + background: transparentize(white, 0.5); + } + + .part-empty { + color: var(--vscode-editor-foreground); + } +} diff --git a/visualization-bundle/src/visualizers/image-visualizer/index.tsx b/visualization-bundle/src/visualizers/image-visualizer/index.tsx new file mode 100644 index 0000000..9032595 --- /dev/null +++ b/visualization-bundle/src/visualizers/image-visualizer/index.tsx @@ -0,0 +1,70 @@ +import { sOpenObject, sLiteral, sString } from "@hediet/semantic-json"; +import React from "react"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { SvgViewer } from "../svg-visualizer/SvgViewer"; +import { Observer, observer, disposeOnUnmount } from "mobx-react"; +import { observable, autorun } from "mobx"; + +export const imageVisualizer = createVisualizer({ + id: "image", + name: "Image", + serializer: sOpenObject({ + kind: sOpenObject({ + imagePng: sLiteral(true), + }), + base64Data: sString(), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1000 }, () => { + return ; + }), +}); + +@observer +class ImageViewer extends React.Component<{ base64Data: string }> { + @observable private svg: string | undefined = undefined; + + @disposeOnUnmount + private readonly updateSvg = autorun(async () => { + const src = `data:image/png;base64,${this.props.base64Data}`; + + const { width, height } = await new Promise<{ + width: number; + height: number; + }>(res => { + const img = new Image(); + img.onload = function() { + res({ width: img.width, height: img.height }); + }; + img.src = src; + }); + + this.svg = ` + + + + + + + + + + + + `; + }); + + render() { + if (!this.svg) { + return null; + } + + return ; + } +} + +globalVisualizationFactory.addVisualizer(imageVisualizer); diff --git a/visualization-bundle/src/visualizers/index.ts b/visualization-bundle/src/visualizers/index.ts new file mode 100644 index 0000000..a2873b4 --- /dev/null +++ b/visualization-bundle/src/visualizers/index.ts @@ -0,0 +1,11 @@ +export * from "./ast-visualizer"; +export * from "./graph"; +export * from "./grid-visualizer"; +export * from "./image-visualizer"; +export * from "./monaco-text-visualizer"; +export * from "./perspective-table-visualizer"; +export * from "./plotly-visualizer"; +export * from "./simple-text-visualizer"; +export * from "./source-visualizer"; +export * from "./svg-visualizer"; +export * from "./tree-visualizer"; diff --git a/visualization-bundle/src/visualizers/monaco-text-visualizer/MonacoEditor.tsx b/visualization-bundle/src/visualizers/monaco-text-visualizer/MonacoEditor.tsx new file mode 100644 index 0000000..e4807ce --- /dev/null +++ b/visualization-bundle/src/visualizers/monaco-text-visualizer/MonacoEditor.tsx @@ -0,0 +1,103 @@ +import React from "react"; +import { observer, disposeOnUnmount } from "mobx-react"; +import { observable, autorun } from "mobx"; +import * as monacoTypes from "monaco-editor"; +import { Theme } from "@hediet/visualization-core"; +import { getLoadedMonaco } from "@hediet/monaco-editor-react"; + +export function getLanguageId(fileName: string): string { + const l = getLoadedMonaco().languages.getLanguages(); + const result = l.find(l => { + if (l.filenamePatterns) { + for (const p of l.filenamePatterns) { + if (new RegExp(p).test(fileName)) { + return true; + } + } + } + if (l.extensions) { + for (const p of l.extensions) { + if (fileName.endsWith(p)) { + return true; + } + } + } + + return false; + }); + + if (result) { + return result.id; + } + return "text"; +} + +@observer +export class MonacoEditor extends React.Component<{ + text: string; + languageId: string; + theme: Theme; +}> { + @observable private editor: + | monacoTypes.editor.IStandaloneCodeEditor + | undefined; + + componentWillUnmount() { + if (this.editor) { + this.editor.dispose(); + } + } + + private model: monacoTypes.editor.ITextModel | undefined = undefined; + + @disposeOnUnmount + private _updateText = autorun(() => { + if (this.editor) { + const model = getLoadedMonaco().editor.createModel( + this.props.text, + this.props.languageId, + undefined + ); + + this.editor.setModel(model); + + /* this.editor!.updateOptions({ readOnly: false }); + + setTimeout(() => { + const a = this.editor!.getAction( + "editor.action.formatDocument" + ); + a.run().then(() => { + this.editor!.updateOptions({ readOnly: true }); + }); + }, 200);*/ + if (this.model) { + this.model.dispose(); + } + this.model = model; + } + }); + + private readonly setEditorDiv = (editorDiv: HTMLDivElement) => { + if (!editorDiv) { + return; + } + this.editor = getLoadedMonaco().editor.create(editorDiv, { + model: null, + automaticLayout: true, + scrollBeyondLastLine: false, + minimap: { enabled: false }, + fixedOverflowWidgets: true, + readOnly: true, + theme: this.props.theme.kind === "dark" ? "vs-dark" : "vs", + }); + }; + + render() { + return ( +
+
+
+ ); + } +} diff --git a/visualization-bundle/src/visualizers/monaco-text-visualizer/index.tsx b/visualization-bundle/src/visualizers/monaco-text-visualizer/index.tsx new file mode 100644 index 0000000..43d8586 --- /dev/null +++ b/visualization-bundle/src/visualizers/monaco-text-visualizer/index.tsx @@ -0,0 +1,40 @@ +import { + sOpenObject, + sLiteral, + sString, + sOptionalProp, +} from "@hediet/semantic-json"; +import React from "react"; +import { getLanguageId, MonacoEditor } from "./MonacoEditor"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const monacoTextVisualizer = createVisualizer({ + id: "monaco-text", + name: "Text", + serializer: sOpenObject({ + kind: sOpenObject({ + text: sLiteral(true), + }), + text: sString(), + fileName: sOptionalProp(sString(), { + description: + "An optional filename that might be used for chosing a syntax highlighter", + }), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 500 }, theme => { + let id = "text"; + if (data.fileName) { + id = getLanguageId(data.fileName); + } + return ( + + ); + }), +}); + +globalVisualizationFactory.addVisualizer(monacoTextVisualizer); diff --git a/visualization-bundle/src/visualizers/monaco-text-visualizer/style.scss b/visualization-bundle/src/visualizers/monaco-text-visualizer/style.scss new file mode 100644 index 0000000..1269846 --- /dev/null +++ b/visualization-bundle/src/visualizers/monaco-text-visualizer/style.scss @@ -0,0 +1,22 @@ +.component-monaco-editor { + width: 100%; + height: 100%; + min-width: 0; + box-sizing: border-box; + display: flex; + padding: 2px; + border: 0.5px solid gray; + + .part-editor { + min-width: 0; + min-height: 0; + flex: 1; + + .current-line { + border: none !important; + } + .selectionHighlight { + background: transparent !important; + } + } +} diff --git a/visualization-bundle/src/visualizers/perspective-table-visualizer/index.tsx b/visualization-bundle/src/visualizers/perspective-table-visualizer/index.tsx new file mode 100644 index 0000000..4ed37d9 --- /dev/null +++ b/visualization-bundle/src/visualizers/perspective-table-visualizer/index.tsx @@ -0,0 +1,76 @@ +import React from "react"; +import { sOpenObject, sLiteral, sArrayOf, sAny } from "@hediet/semantic-json"; +import { toJS } from "mobx"; +import "@finos/perspective-viewer"; +import "@finos/perspective-viewer-datagrid"; +import "@finos/perspective-viewer-d3fc"; +import "@finos/perspective-viewer/themes/all-themes.css"; +import { HTMLPerspectiveViewerElement } from "@finos/perspective-viewer"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const sTable = sOpenObject({ + kind: sOpenObject({ + table: sLiteral(true), + }), + rows: sArrayOf( + sAny() // object + ), +}); + +export const perspectiveTableVisualizer = createVisualizer({ + id: "perspective-table", + name: "Perspective Table", + serializer: sTable, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1000 }, theme => ( + + )), +}); + +class PerspectiveDataViewer extends React.Component< + { data: object[] } & React.HTMLAttributes +> { + private readonly nodeRef = React.createRef(); + + componentDidUpdate() { + this.nodeRef.current!.load(this.props.data); + } + + componentDidMount() { + setTimeout(() => { + // TODO: Why timeout? + // It does not work without it. + + this.nodeRef.current!.load(this.props.data); + this.nodeRef.current!.toggleConfig(); + }); + } + + render() { + return ( + + ); + } +} + +globalVisualizationFactory.addVisualizer(perspectiveTableVisualizer); diff --git a/visualization-bundle/src/visualizers/plotly-visualizer/PlotlyViewer.tsx b/visualization-bundle/src/visualizers/plotly-visualizer/PlotlyViewer.tsx new file mode 100644 index 0000000..0aad785 --- /dev/null +++ b/visualization-bundle/src/visualizers/plotly-visualizer/PlotlyViewer.tsx @@ -0,0 +1,187 @@ +import { observer } from "mobx-react"; +import * as React from "react"; +import Plot from "react-plotly.js"; + +@observer +export class PlotlyViewer extends React.Component<{ + data: Plotly.Data[]; + layout?: Partial; + theme: "light" | "dark"; +}> { + render() { + const { theme, data, layout } = this.props; + return ( + + ); + } +} + +// extracted from the plotly website +const darkLayout: Partial = { + colorway: [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#19d3f3", + "#e763fa", + "#fecb52", + "#ffa15a", + "#ff6692", + "#b6e880", + ], + autosize: true, + //margin: { b: 0, t: 0, pad: 0 }, + //height: 300, + /*colorscale: { + sequential: [ + [0, "#0508b8"], + [0.0893854748603352, "#1910d8"], + [0.1787709497206704, "#3c19f0"], + [0.2681564245810056, "#6b1cfb"], + [0.3575418994413408, "#981cfd"], + [0.44692737430167595, "#bf1cfd"], + [0.5363128491620112, "#dd2bfd"], + [0.6256983240223464, "#f246fe"], + [0.7150837988826816, "#fc67fd"], + [0.8044692737430168, "#fe88fc"], + [0.8938547486033519, "#fea5fd"], + [0.9832402234636871, "#febefe"], + [1, "#fec3fe"], + ], + sequentialminus: [ + [0, "#0508b8"], + [0.0893854748603352, "#1910d8"], + [0.1787709497206704, "#3c19f0"], + [0.2681564245810056, "#6b1cfb"], + [0.3575418994413408, "#981cfd"], + [0.44692737430167595, "#bf1cfd"], + [0.5363128491620112, "#dd2bfd"], + [0.6256983240223464, "#f246fe"], + [0.7150837988826816, "#fc67fd"], + [0.8044692737430168, "#fe88fc"], + [0.8938547486033519, "#fea5fd"], + [0.9832402234636871, "#febefe"], + [1, "#fec3fe"], + ], + diverging: [ + [0, "#8e0152"], + [0.1, "#c51b7d"], + [0.2, "#de77ae"], + [0.3, "#f1b6da"], + [0.4, "#fde0ef"], + [0.5, "#f7f7f7"], + [0.6, "#e6f5d0"], + [0.7, "#b8e186"], + [0.8, "#7fbc41"], + [0.9, "#4d9221"], + [1, "#276419"], + ], + },*/ + font: { color: "#f2f5fa" }, + title: { x: 0.05 }, + paper_bgcolor: "rgb(17,17,17)", + plot_bgcolor: "rgb(17,17,17)", + hovermode: "closest", + polar: { + bgcolor: "rgb(17,17,17)", + angularaxis: { + gridcolor: "#506784", + linecolor: "#506784", + ticks: "", + }, + radialaxis: { + gridcolor: "#506784", + linecolor: "#506784", + ticks: "", + }, + }, + ternary: { + bgcolor: "rgb(17,17,17)", + aaxis: { gridcolor: "#506784", linecolor: "#506784", ticks: "" }, + baxis: { gridcolor: "#506784", linecolor: "#506784", ticks: "" }, + caxis: { gridcolor: "#506784", linecolor: "#506784", ticks: "" }, + }, + xaxis: { + gridcolor: "#283442", + linecolor: "#506784", + ticks: "", + zerolinecolor: "#283442", + zerolinewidth: 2, + automargin: true, + }, + yaxis: { + gridcolor: "#283442", + linecolor: "#506784", + ticks: "", + zerolinecolor: "#283442", + zerolinewidth: 2, + automargin: true, + }, + scene: { + xaxis: { + backgroundcolor: "rgb(17,17,17)", + gridcolor: "#506784", + linecolor: "#506784", + showbackground: true, + ticks: "", + zerolinecolor: "#C8D4E3", + gridwidth: 2, + }, + yaxis: { + backgroundcolor: "rgb(17,17,17)", + gridcolor: "#506784", + linecolor: "#506784", + showbackground: true, + ticks: "", + zerolinecolor: "#C8D4E3", + gridwidth: 2, + }, + zaxis: { + backgroundcolor: "rgb(17,17,17)", + gridcolor: "#506784", + linecolor: "#506784", + showbackground: true, + ticks: "", + zerolinecolor: "#C8D4E3", + gridwidth: 2, + }, + }, + /* + shapedefaults: { + fillcolor: "#f2f5fa", + line: { width: 0 }, + opacity: 0.4, + }, + annotationdefaults: { + arrowcolor: "#f2f5fa", + arrowhead: 0, + arrowwidth: 1, + },*/ + geo: { + bgcolor: "rgb(17,17,17)", + landcolor: "rgb(17,17,17)", + subunitcolor: "#506784", + showland: true, + showlakes: true, + lakecolor: "rgb(17,17,17)", + }, + /* + updatemenudefaults: { bgcolor: "#506784", borderwidth: 0 }, + sliderdefaults: { + bgcolor: "#C8D4E3", + borderwidth: 1, + bordercolor: "rgb(17,17,17)", + tickwidth: 0, + }, + */ +}; diff --git a/visualization-bundle/src/visualizers/plotly-visualizer/index.tsx b/visualization-bundle/src/visualizers/plotly-visualizer/index.tsx new file mode 100644 index 0000000..83b3248 --- /dev/null +++ b/visualization-bundle/src/visualizers/plotly-visualizer/index.tsx @@ -0,0 +1,47 @@ +import * as React from "react"; +import { + sOpenObject, + sLiteral, + sArrayOf, + sOptionalProp, + sAny, + sProp, +} from "@hediet/semantic-json"; +import { makeLazyLoadable } from "../../utils/LazyLoadable"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +const PlotlyViewerLazyLoadable = makeLazyLoadable( + async () => (await import("./PlotlyViewer")).PlotlyViewer +); + +export const plotlyVisualizer = createVisualizer({ + id: "plotly", + name: "plotly", + serializer: sOpenObject({ + kind: sOpenObject({ + plotly: sLiteral(true), + }), + data: sProp(sArrayOf(sAny()), { + description: + "Expecting Plotly.Data[] (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/795ce172038dbafcb9cba030d637d733a7eea19c/types/plotly.js/index.d.ts#L1036)", + }), + layout: sOptionalProp(sAny(), { + description: + "Expecting Partial (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/795ce172038dbafcb9cba030d637d733a7eea19c/types/plotly.js/index.d.ts#L329)", + }), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1000 }, theme => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(plotlyVisualizer); diff --git a/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx b/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx new file mode 100644 index 0000000..ddd4e73 --- /dev/null +++ b/visualization-bundle/src/visualizers/simple-text-visualizer/index.tsx @@ -0,0 +1,33 @@ +import { sOpenObject, sLiteral, sString } from "@hediet/semantic-json"; +import React from "react"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const simpleTextVisualizer = createVisualizer({ + id: "simple-text", + name: "Simple Text", + serializer: sOpenObject({ + kind: sOpenObject({ + text: sLiteral(true), + }), + text: sString(), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 100 }, () => ( +
+				{data.text}
+			
+ )), +}); + +globalVisualizationFactory.addVisualizer(simpleTextVisualizer); diff --git a/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss b/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss new file mode 100644 index 0000000..23c9354 --- /dev/null +++ b/visualization-bundle/src/visualizers/simple-text-visualizer/style.scss @@ -0,0 +1,6 @@ +.theme-dark { + --visualizer-simple-text-color: white; +} +.theme-light { + --visualizer-simple-text-color: black; +} diff --git a/visualization-bundle/src/visualizers/source-visualizer/index.tsx b/visualization-bundle/src/visualizers/source-visualizer/index.tsx new file mode 100644 index 0000000..ae43d25 --- /dev/null +++ b/visualization-bundle/src/visualizers/source-visualizer/index.tsx @@ -0,0 +1,24 @@ +import { sAny } from "@hediet/semantic-json"; +import React from "react"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { MonacoEditor } from "../monaco-text-visualizer/MonacoEditor"; + +export const sourceVisualizer = createVisualizer({ + id: "source", + name: "JSON Source", + serializer: sAny(), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: -100 }, theme => ( + + )), +}); + +globalVisualizationFactory.addHiddenVisualizer(sourceVisualizer); diff --git a/visualization-bundle/src/visualizers/source-visualizer/style.scss b/visualization-bundle/src/visualizers/source-visualizer/style.scss new file mode 100644 index 0000000..23c9354 --- /dev/null +++ b/visualization-bundle/src/visualizers/source-visualizer/style.scss @@ -0,0 +1,6 @@ +.theme-dark { + --visualizer-simple-text-color: white; +} +.theme-light { + --visualizer-simple-text-color: black; +} diff --git a/visualization-bundle/src/visualizers/svg-visualizer/SvgViewer.tsx b/visualization-bundle/src/visualizers/svg-visualizer/SvgViewer.tsx new file mode 100644 index 0000000..3434450 --- /dev/null +++ b/visualization-bundle/src/visualizers/svg-visualizer/SvgViewer.tsx @@ -0,0 +1,115 @@ +import Measure, { ContentRect } from "react-measure"; +import { observer } from "mobx-react"; +import * as React from "react"; +import { observable, action } from "mobx"; +import { Tool, ReactSVGPanZoom, Value } from "react-svg-pan-zoom"; + +function widthOrDefault(r: ContentRect): number { + if (r.bounds && r.bounds.width) { + return r.bounds.width; + } + return 1; +} + +function heightOrDefault(r: ContentRect): number { + if (r.bounds && r.bounds.height) { + return r.bounds.height; + } + return 1; +} + +@observer +export class SvgViewer extends React.Component<{ + svgContent: string; + svgRef?: (element: SVGSVGElement | null) => void; +}> { + @observable tool: Tool = "pan"; + + @action.bound + private setTool(tool: Tool): void { + this.tool = tool; + } + + private readonly svgPanZoomRef = React.createRef(); + + componentDidMount() { + const element = this.svgPanZoomRef.current; + if (this.props.svgRef) { + if (!element) { + this.props.svgRef(null); + return; + } + + const svg = (element as any).ViewerDOM as SVGSVGElement; + this.props.svgRef(svg); + } + } + + @observable value: Value | {} = {}; + + render() { + let { svgContent } = this.props; + let width: number = 0; + let height: number = 0; + svgContent = svgContent.replace( + /viewBox="[0-9\.]+ [0-9\.]+ ([0-9\.]+) ([0-9\.]+)"/, + (r, w, h) => { + width = parseFloat(w); + height = parseFloat(h); + return ""; + } + ); + const tool = this.tool; + const val = this.value; + + return ( + { + if (this.svgPanZoomRef.current) { + (this.svgPanZoomRef.current.fitToViewer as any)( + "center", + "center" + ); + } + }} + > + {({ measureRef, contentRect }) => ( +
+ (this.value = v)} + onChangeTool={this.setTool} + ref={this.svgPanZoomRef} + toolbarProps={{ + SVGAlignX: "center", + SVGAlignY: "center", + }} + miniatureProps={{ + position: "none", + height: 0, + width: 0, + background: "black", + }} + > + + + + +
+ )} +
+ ); + } +} diff --git a/visualization-bundle/src/visualizers/svg-visualizer/index.tsx b/visualization-bundle/src/visualizers/svg-visualizer/index.tsx new file mode 100644 index 0000000..6c52ca5 --- /dev/null +++ b/visualization-bundle/src/visualizers/svg-visualizer/index.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import { sOpenObject, sLiteral, sString } from "@hediet/semantic-json"; +import { SvgViewer } from "./SvgViewer"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; + +export const svgVisualizer = createVisualizer({ + id: "svg", + name: "Svg", + serializer: sOpenObject({ + kind: sOpenObject({ + svg: sLiteral(true), + }), + text: sString(), + }), + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1500 }, () => ( + + )), +}); + +globalVisualizationFactory.addVisualizer(svgVisualizer); diff --git a/visualization-bundle/src/visualizers/svg-visualizer/style.scss b/visualization-bundle/src/visualizers/svg-visualizer/style.scss new file mode 100644 index 0000000..9b4f0bc --- /dev/null +++ b/visualization-bundle/src/visualizers/svg-visualizer/style.scss @@ -0,0 +1,5 @@ +.svgViewer { + svg { + overflow: auto; + } +} diff --git a/visualization-bundle/src/visualizers/tree-visualizer/Point.ts b/visualization-bundle/src/visualizers/tree-visualizer/Point.ts new file mode 100644 index 0000000..b6fa148 --- /dev/null +++ b/visualization-bundle/src/visualizers/tree-visualizer/Point.ts @@ -0,0 +1,256 @@ +function sqr(a: number) { + return a * a; +} + +export type PointLike = + | Point + | { x?: number; y: number } + | { x: number; y?: number }; + +export function point(data: PointLike) { + if (data instanceof Point) { + return data; + } + return new Point(data.x || 0, data.y || 0); +} + +export class Point { + public static readonly Zero = new Point(0, 0); + + constructor(public readonly x: number, public readonly y: number) {} + + public mapXY(fn: (arg: number) => number): Point { + return new Point(fn(this.x), fn(this.y)); + } + + public distance(other: PointLike = Point.Zero): number { + const d = this.sub(other); + return Math.sqrt(sqr(d.x) + sqr(d.y)); + } + + public sub(other: PointLike): Point { + const o = point(other); + return new Point(this.x - o.x, this.y - o.y); + } + + public add(other: PointLike): Point { + const o = point(other); + return new Point(this.x + o.x, this.y + o.y); + } + + public mul(scalar: number): Point { + return new Point(this.x * scalar, this.y * scalar); + } + + public div(scalar: number): Point { + return new Point(this.x / scalar, this.y / scalar); + } + + public equals(other: PointLike) { + const o = point(other); + return this.x === o.x && this.y === o.y; + } + + public angle(): number { + const angle = Math.atan2(this.x, this.y); + return angle; + } + + public getPointCloserTo(dest: PointLike, dist: number): Point { + if (this.equals(dest)) return this; + + const angle = point(dest) + .sub(this) + .angle(); + + const result = new Point( + this.x + Math.sin(angle) * dist, + this.y + Math.cos(angle) * dist + ); + return result; + } + + public toJson(): { x: number; y: number } { + return { x: this.x, y: this.y }; + } +} + +function turn(p1: Point, p2: Point, p3: Point): number { + const A = (p3.y - p1.y) * (p2.x - p1.x); + const B = (p2.y - p1.y) * (p3.x - p1.x); + return A > B + Number.MIN_VALUE ? 1 : A + Number.MIN_VALUE < B ? -1 : 0; +} + +export function isIntersect( + aStart: Point, + aEnd: Point, + bStart: Point, + bEnd: Point +): boolean { + return ( + turn(aStart, bStart, bEnd) != turn(aEnd, bStart, bEnd) && + turn(aStart, aEnd, bStart) != turn(aStart, aEnd, bEnd) + ); +} + +/** + * Liang-Barsky function by Daniel White + * + * @link http://www.skytopia.com/project/articles/compsci/clipping.html + * + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @param {array} bbox + * @return {array>|null} + */ +function liangBarsky( + x0: number, + y0: number, + x1: number, + y1: number, + bbox: [number, number, number, number] +): [[number, number], [number, number]] | null { + let [xmin, xmax, ymin, ymax] = bbox; + let t0 = 0, + t1 = 1; + let dx = x1 - x0, + dy = y1 - y0; + let p = 0, + q = 0, + r = 0; + + for (let edge: 0 | 1 | 2 | 3 = 0; edge < 4; edge++) { + // Traverse through left, right, bottom, top edges. + if (edge === 0) { + p = -dx; + q = -(xmin - x0); + } else if (edge === 1) { + p = dx; + q = xmax - x0; + } else if (edge === 2) { + p = -dy; + q = -(ymin - y0); + } else if (edge === 3) { + p = dy; + q = ymax - y0; + } + + r = q / p; + + if (p === 0 && q < 0) return null; // Don't draw line at all. (parallel line outside) + + if (p < 0) { + if (r > t1) return null; + // Don't draw line at all. + else if (r > t0) t0 = r; // Line is clipped! + } else if (p > 0) { + if (r < t0) return null; + // Don't draw line at all. + else if (r < t1) t1 = r; // Line is clipped! + } + } + + return [[x0 + t0 * dx, y0 + t0 * dy], [x0 + t1 * dx, y0 + t1 * dy]]; +} + +export function intersectRectWithLine( + start: Point, + end: Point, + rect: Rectangle +): { first: Point; second: Point } | undefined { + const r = liangBarsky(start.x, start.y, end.x, end.y, [ + rect.topLeft.x, + rect.bottomRight.x, + rect.topLeft.y, + rect.bottomRight.y, + ]); + if (!r) { + return undefined; + } + + return { + first: new Point(r[0][0], r[0][1]), + second: new Point(r[1][0], r[1][1]), + }; +} + +// first zoom then translate +export function scale( + clientOffset: Point, + clientSize: Point, + viewSize: Point +): { clientZoom: number; clientOffset: Point } { + const clientRatio = clientSize.x / clientSize.y; + const viewRatio = viewSize.x / viewSize.y; + + let zoom = 1; + + if (clientRatio < viewRatio) zoom = viewSize.y / clientSize.y; + else zoom = viewSize.x / clientSize.x; + + const clientMid = clientOffset.mul(zoom).add(clientSize.mul(zoom / 2)); + const viewMid = viewSize.div(2); + + const clientOffset2 = viewMid.sub(clientMid); + + return { clientOffset: clientOffset2, clientZoom: zoom }; +} + +export class Rectangle { + public static ofSize(position: PointLike, size: PointLike): Rectangle { + const pos = point(position); + return new Rectangle(pos, pos.add(size)); + } + + public static spanning(first: Point, ...rest: Point[]): Rectangle { + let min = first.toJson(); + let max = first.toJson(); + for (const p of rest) { + min.x = Math.min(min.x, p.x); + min.y = Math.min(min.y, p.y); + max.x = Math.max(max.x, p.x); + max.y = Math.max(max.y, p.y); + } + + return new Rectangle(point(min), point(max)); + } + + constructor( + public readonly topLeft: Point, + public readonly bottomRight: Point + ) {} + + get center(): Point { + return this.bottomRight.add(this.topLeft).div(2); + } + + get size(): Point { + return this.bottomRight.sub(this.topLeft); + } + + get topRight(): Point { + return new Point(this.bottomRight.x, this.topLeft.y); + } + + get bottomLeft(): Point { + return new Point(this.topLeft.x, this.bottomRight.y); + } + + public intersects(selectionRect: Rectangle): boolean { + return !( + selectionRect.topLeft.x > this.bottomRight.x || + selectionRect.bottomRight.x < this.topLeft.x || + selectionRect.topLeft.y > this.bottomRight.y || + selectionRect.bottomRight.y < this.topLeft.y + ); + } + + equals(other: Rectangle) { + return ( + this.topLeft.equals(other.topLeft) && + this.bottomRight.equals(other.bottomRight) + ); + } +} diff --git a/visualization-bundle/src/visualizers/tree-visualizer/SvgElements.tsx b/visualization-bundle/src/visualizers/tree-visualizer/SvgElements.tsx new file mode 100644 index 0000000..fe557e4 --- /dev/null +++ b/visualization-bundle/src/visualizers/tree-visualizer/SvgElements.tsx @@ -0,0 +1,90 @@ +import { Point, Rectangle } from "./Point"; +import * as React from "react"; +import { Properties } from "csstype"; + +type Omit = Pick>; + +export function omit(obj: T, keys: K[]): Omit { + const newObj: Omit = {} as any; + for (const [key, val] of Object.entries(obj)) { + if (!keys.includes(key as K)) { + (newObj as any)[key] = val; + } + } + return newObj; +} + +export interface SvgAttributes extends React.DOMAttributes { + stroke?: string; + className?: string; + style?: Properties; + pointerEvents?: "none" | "auto" | "initial"; +} + +export function SvgText( + props: { + position: Point; + children: any; + childRef?: React.Ref; + textAnchor?: "middle" | "end" | "start"; + dominantBaseline?: "central" | "middle"; + } & SvgAttributes +) { + return ( + + ); +} + +export function SvgCircle( + props: { + center: Point; + radius: number; + childRef?: React.Ref; + } & SvgAttributes +) { + return ( + + ); +} + +export function SvgLine( + props: { start: Point; end: Point } & SvgAttributes +) { + return ( + + ); +} + +export function SvgRect( + props: { rectangle: Rectangle; fill?: string } & SvgAttributes< + SVGRectElement + > +) { + const r = props.rectangle; + return ( + + ); +} diff --git a/visualization-bundle/src/visualizers/tree-visualizer/Views.tsx b/visualization-bundle/src/visualizers/tree-visualizer/Views.tsx new file mode 100644 index 0000000..341ae56 --- /dev/null +++ b/visualization-bundle/src/visualizers/tree-visualizer/Views.tsx @@ -0,0 +1,545 @@ +import { observer, disposeOnUnmount } from "mobx-react"; +import { observable, autorun, computed, action, runInAction } from "mobx"; +import * as React from "react"; +import * as classNames from "classnames"; +import { Rectangle, Point } from "./Point"; +import { SvgLine } from "./SvgElements"; +import { Item } from "."; + +// import "./style.scss"; + +export class TreeViewModel { + private started = true; + start() { + this.started = true; + this.updateOffsets(); + } + stop() { + this.started = false; + } + + private version = 0; + private lastUpdateVersion = -1; + + @observable public root: TreeNodeViewModel | undefined = undefined; + + public invalidateOffsets() { + this.version++; + } + + @action + public updateOffsets() { + if (!this.started) { + return; + } + if (!this.root) { + return; + } + if (this.lastUpdateVersion === this.version) { + return; + } + + this.lastUpdateVersion = this.version; + console.log("update"); + this.root.updateOffsets(); + } + + public get marked(): TreeNodeViewModel[] { + const result = new Array>(); + function recurse(node: TreeNodeViewModel) { + if (node.isMarked) { + result.push(node); + } + for (const c of node.children) { + recurse(c); + } + } + if (this.root) { + recurse(this.root); + } + return result; + } + + @observable selected: TreeNodeViewModel | undefined = undefined; + + @action public select(current: TreeNodeViewModel | undefined) { + if (this.selected === current) { + return; + } + if (this.selected) { + this.selected.isSelected = false; + } + if (current) { + current.isSelected = true; + } + this.selected = current; + } + + @action public toggleSelect(current: TreeNodeViewModel) { + if (this.selected === current) { + this.select(undefined); + } else { + this.select(current); + } + } + + private selectOnHoverEnabled = false; + private selectedBeforeHover: + | TreeNodeViewModel + | undefined = undefined; + + @action public handleHoverEvent( + current: TreeNodeViewModel | undefined + ) { + if (this.selectOnHoverEnabled) { + if (current) { + this.select(current); + } else { + this.select(this.selectedBeforeHover); + } + } + } + + setSelectOnHover(enable: boolean) { + if (this.selectOnHoverEnabled === enable) { + return; + } + + if (enable) { + this.selectedBeforeHover = this.selected; + } else if (!this.selected) { + this.select(this.selectedBeforeHover); + } + + this.selectOnHoverEnabled = enable; + } +} + +export class TreeNodeViewModel { + public parent: TreeNodeViewModel | null = null; + + constructor( + public readonly treeViewModel: TreeViewModel, + public readonly children: TreeNodeViewModel[], + public readonly items: Item[], + public readonly segment: string, + public readonly data: TData + ) {} + + @observable expanderOffsetRect: Rectangle | undefined = undefined; + private expanderDiv: HTMLDivElement | null = null; + + @action.bound + setExpanderDiv(div: HTMLDivElement | null) { + this.expanderDiv = div; + this.treeViewModel.invalidateOffsets(); + } + + @observable public expanded: boolean = false; + @observable public isMarked: boolean = false; + @observable public isSelected: boolean = false; + + @action + public toggleExpanded() { + this.expanded = !this.expanded; + this.treeViewModel.invalidateOffsets(); + } + + @computed public get isChildOrThisMarked(): boolean { + if (this.isMarked) return true; + return this.children.some(c => c.isChildOrThisMarked); + } + + @computed public get isChildOrThisSelected(): boolean { + if (this.isSelected) return true; + return this.children.some(c => c.isChildOrThisSelected); + } + + @computed public get isParentOrThisSelected(): boolean { + if (this.isSelected) return true; + if (this.parent) return this.parent.isParentOrThisSelected; + return false; + } + + get path(): string[] { + const result = new Array(); + let c: TreeNodeViewModel = this; + while (c.parent) { + result.unshift(c.segment); + c = c.parent; + } + if (result.length === 0) { + result.push("root"); + } + return result; + } + + updateOffsets() { + for (const c of this.children) { + c.updateOffsets(); + } + + if (!this.expanderDiv) { + return; + } + const newRect = Rectangle.ofSize( + new Point(this.expanderDiv.offsetLeft, this.expanderDiv.offsetTop), + new Point( + this.expanderDiv.offsetWidth, + this.expanderDiv.offsetHeight + ) + ); + if ( + !this.expanderOffsetRect || + !newRect.equals(this.expanderOffsetRect) + ) { + this.expanderOffsetRect = newRect; + } + } +} + +const isValidFunctionName = (function() { + var validName = /^[$A-Z_][0-9A-Z_$]*$/i; + var reserved = { + abstract: true, + boolean: true, + // ... + with: true, + } as any; + return function(s: string) { + // Ensure a valid name and not reserved. + return validName.test(s) && !reserved[s]; + }; +})(); + +@observer +export class TreeWithPathView extends React.Component<{ + model: TreeViewModel; +}> { + render() { + const model = this.props.model; + return ( +
+
+ + {model.selected ? ( + + {model.selected.path.reduce((acc, v) => { + acc = acc.slice(); + function add() { + acc.push( + + {v} + + ); + } + if (isValidFunctionName(v)) { + if (acc.length > 0) { + acc.push( + . + ); + } + add(); + } else { + acc.push( + [ + ); + add(); + acc.push( + ] + ); + } + + return acc; + }, new Array())} + + ) : ( + "(Nothing Selected)" + )} + +
+
+ +
+
+ ); + } +} + +@observer +export class TreeView extends React.Component<{ model: TreeViewModel }> { + componentWillUpdate(newProps: this["props"]) { + newProps.model.stop(); + } + + componentWillMount() { + this.props.model.stop(); + } + + componentDidUpdate() { + this.props.model.start(); + } + + componentDidMount() { + this.props.model.start(); + } + + render() { + const model = this.props.model; + return ( +
{ + if (e.keyCode === 18) { + // alt + e.preventDefault(); + e.stopPropagation(); + model.setSelectOnHover(true); + } + }} + onKeyUp={e => { + if (e.keyCode === 18) { + // alt + e.preventDefault(); + e.stopPropagation(); + model.setSelectOnHover(false); + } + }} + > + {model.root && ( + <> + + + +
+ +
+ + )} +
+ ); + } +} + +@observer +export class TreeNodeSvgView extends React.Component<{ + model: TreeNodeViewModel; +}> { + render() { + const model = this.props.model; + if ( + !model.expanderOffsetRect || + model.children.length === 0 || + model.expanded + ) { + return ; + } + + function findLastExpanderOffset( + predicate: (v: TreeNodeViewModel) => boolean + ): Rectangle | undefined { + const all = model.children + .filter(predicate) + .map(c => c.expanderOffsetRect); + const last = all[all.length - 1]; + return last; + } + + const lastOffset = findLastExpanderOffset(() => true); + const selectedOffset = findLastExpanderOffset( + v => v.isChildOrThisSelected + ); + const markedOffset = findLastExpanderOffset(v => v.isChildOrThisMarked); + + if (!lastOffset) { + return ; + } + + const start = model.expanderOffsetRect.center.add({ y: 10 }); + + return ( + + {markedOffset && ( + + )} + {selectedOffset && ( + + )} + + {model.children.map((c, idx) => { + const end = c.expanderOffsetRect!.center.sub({ x: 5 }); + + return ( + + {c.isChildOrThisMarked && ( + + )} + + + ); + })} + {model.children.map((c, idx) => ( + + ))} + + ); + } +} + +@observer +export class TreeNodeView extends React.Component<{ + model: TreeNodeViewModel; +}> { + @action.bound + private clickHandler() { + this.props.model.treeViewModel.toggleSelect(this.props.model); + } + + private handleMouseEnterOrLeave(enter: boolean) { + this.props.model.treeViewModel.handleHoverEvent( + enter ? this.props.model : undefined + ); + } + + @observable + private rootDiv: HTMLElement | null = null; + @action.bound + private setRootDiv(div: HTMLElement | null) { + this.rootDiv = div; + } + + @disposeOnUnmount + private readonly _autorun = autorun(() => { + if (this.props.model.isMarked && this.rootDiv) { + this.rootDiv.scrollIntoView({ block: "nearest" }); + } + }); + + public componentDidMount() { + this.props.model.treeViewModel.updateOffsets(); + } + + public componentDidUpdate() { + this.props.model.treeViewModel.updateOffsets(); + } + + public render(): JSX.Element { + const model = this.props.model; + const collapsed = model.expanded; + console.log("render"); + return ( +
+
{ + this.handleMouseEnterOrLeave(true); + e.stopPropagation(); + }} + onMouseOut={e => { + this.handleMouseEnterOrLeave(false); + e.stopPropagation(); + }} + > +
model.toggleExpanded()} + className={classNames( + "part-collapser", + model.children.length > 0 && + "decorator-collapse-icon", + !collapsed && "expanded" + )} + /> + + + {renderItems(model.items)} + +
+ + {model.children.length > 0 && !model.expanded && ( +
+ {model.children.map((c, idx) => ( + + ))} +
+ )} +
+ ); + } +} + +function renderItems(items: Item[]): React.ReactNode { + return items.map((i, idx) => { + switch (i.emphasis) { + case "style1": + return ( + + {i.text} + + ); + case "style2": + return ( + + {i.text} + + ); + case "style3": + return ( + + {i.text} + + ); + default: + return ( + + {i.text} + + ); + } + }); +} diff --git a/visualization-bundle/src/visualizers/tree-visualizer/index.tsx b/visualization-bundle/src/visualizers/tree-visualizer/index.tsx new file mode 100644 index 0000000..d9b5803 --- /dev/null +++ b/visualization-bundle/src/visualizers/tree-visualizer/index.tsx @@ -0,0 +1,121 @@ +import { + TreeViewModel, + TreeNodeViewModel, + TreeView, + TreeWithPathView, +} from "./Views"; +import * as React from "react"; +import { + sOpenObject, + sLiteral, + sLazy, + sString, + sBoolean, + sArrayOf, + Serializer, + sOptionalProp, + sUnion, +} from "@hediet/semantic-json"; +import { + createVisualizer, + ReactVisualization, + globalVisualizationFactory, +} from "@hediet/visualization-core"; +import { visualizationNs } from "../../consts"; + +type TreeNode = { + children: TreeNode[]; + items: Item[]; + segment?: string; // like "root", ".name" or "[0]" + isMarked?: boolean; +} & T; + +export interface Item { + text: string; + emphasis?: "style1" | "style2" | "style3" | string; +} + +const sTreeNode: Serializer = sLazy(() => + sOpenObject({ + children: sArrayOf(sTreeNode), + items: sArrayOf( + sOpenObject({ + text: sString(), + emphasis: sOptionalProp( + sUnion( + [ + sLiteral("style1"), + sLiteral("style2"), + sLiteral("style3"), + sString(), + ], + { inclusive: true } + ) + ), + }).defineAs(visualizationNs("TreeNodeItem")) + ), + segment: sOptionalProp(sString()), + isMarked: sOptionalProp(sBoolean()), + }).defineAs(visualizationNs("TreeNode")) +); + +const sTree = sOpenObject({ + kind: sOpenObject({ + tree: sLiteral(true), + }), + root: sTreeNode, +}); + +export const treeVisualizer = createVisualizer({ + id: "tree", + name: "Tree", + serializer: sTree, + getVisualization: (data, self) => + new ReactVisualization(self, { priority: 1200 }, () => { + const m = createTreeViewModelFromTreeNodeData( + data.root, + () => undefined + ); + return ; + }), +}); + +globalVisualizationFactory.addVisualizer(treeVisualizer); + +export function createTreeViewModelFromTreeNodeData( + root: TreeNode, + dataSelector: (node: TreeNode) => TData +): TreeViewModel { + const m = new TreeViewModel(); + m.root = recurse(root, m); + return m; + + function recurse( + node: TreeNode, + viewModel: TreeViewModel + ): TreeNodeViewModel { + const children: TreeNodeViewModel[] = node.children.map(c => + recurse(c, viewModel) + ); + + let segment = node.segment; + if (!segment && node.items.length > 0) { + segment = node.items[0].text; + } else { + segment = ""; + } + + const model = new TreeNodeViewModel( + viewModel, + children, + node.items, + segment, + dataSelector(node) + ); + model.isMarked = !!node.isMarked; + for (const c of children) { + c.parent = model; + } + return model; + } +} diff --git a/visualization-bundle/src/visualizers/tree-visualizer/style.scss b/visualization-bundle/src/visualizers/tree-visualizer/style.scss new file mode 100644 index 0000000..314c168 --- /dev/null +++ b/visualization-bundle/src/visualizers/tree-visualizer/style.scss @@ -0,0 +1,162 @@ +.theme-dark { + --visualizer-tree-childOrThisMarked-background: orange; + --visualizer-tree-childOrThisSelected-background: white; + --visualizer-tree-pathColor: gray; + + --visualizer-tree-style1-foreground: #5594ea; + --visualizer-tree-style2-foreground: #c88544; //#38b968; + --visualizer-tree-style3-foreground: darkred; + --visualizer-tree-style3-border: black; + --visualizer-tree-unstyled-foreground: lightgray; + --visualizer-tree-path-foreground: white; +} + +.theme-light { + --visualizer-tree-childOrThisMarked-background: orange; + --visualizer-tree-childOrThisSelected-background: black; + --visualizer-tree-pathColor: gray; + + --visualizer-tree-style1-foreground: blue; + --visualizer-tree-style2-foreground: darkgreen; + --visualizer-tree-style3-foreground: darkred; + --visualizer-tree-style3-border: black; + --visualizer-tree-unstyled-foreground: black; + --visualizer-tree-path-foreground: black; +} + +.component-TreeView { + overflow: auto; + scroll-behavior: smooth; + height: 100%; + position: relative; + display: grid; + + & > .part-svg, + & > .part-node { + height: 100%; + width: 100%; + grid-column: 1; + grid-row: 1; + } +} + +.component-TreeNodeSvgView { + .path { + stroke: var(--visualizer-tree-pathColor); + stroke-dasharray: 1; + + &.childOrThisMarked { + stroke: var(--visualizer-tree-childOrThisMarked-background); + stroke-width: 5; + stroke-dasharray: 0; + stroke-linecap: round; + } + + &.childOrThisSelected { + stroke: var(--visualizer-tree-childOrThisSelected-background); + stroke-width: 2; + stroke-dasharray: 0; + } + } +} + +.component-TreeNodeView { + font-family: -apple-system, BlinkMacSystemFont, Segoe WPC, Segoe UI, + HelveticaNeue-Light, Ubuntu, Droid Sans, sans-serif; + + .part-header { + padding: 2px; + padding-left: 5px; + margin: 0; + display: flex; + align-items: center; + + .part-collapser { + width: 10px; + height: 10px; + margin-right: 6px; + } + + .part-text { + cursor: pointer; + span.style1 { + color: var(--visualizer-tree-style1-foreground); + } + span.style2 { + color: var(--visualizer-tree-style2-foreground); + text-decoration: underline; + padding: 1px 3px; + margin-left: 5px; + } + span.style3 { + color: var(--visualizer-tree-style3-foreground); + border: var(--visualizer-tree-style3-border) solid 1px; + padding: 1px 3px; + margin-left: 5px; + } + span.unstyled { + color: var(--visualizer-tree-unstyled-foreground); + } + } + } + + .part-children { + margin-left: 0px; + margin-top: 0px; + + padding: 5px; + padding-left: 15px; + } + + &.selected { + & > .part-header { + font-weight: bold; + } + } + &.hovered { + & > .part-header > span { + font-weight: bold; + } + & > .part-children { + background: transparentize(gray, 0.8); + } + } +} + +.component-TreeWithPathView { + display: flex; + flex-direction: column; + height: 100%; + + .part-path { + overflow: hidden; + white-space: pre; + padding: 5px 10px; + border-bottom: solid gray 1px; + + color: lightgray; + + .part-path-item { + color: var(--visualizer-tree-path-foreground); + margin-left: 1px; + margin-right: 1px; + } + } + .part-tree { + overflow: auto; + flex: 1; + } +} + +.decorator-collapse-icon { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath fill='%23646465' d='M6 4v8l4-4-4-4zm1 2.414L8.586 8 7 9.586V6.414z'/%3E%3C/svg%3E"); + + background-position: 50%; + background-position-x: 50%; + background-position-y: center; + background-repeat: no-repeat; + + &.expanded { + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath fill='%23646465' d='M11 10.07H5.344L11 4.414v5.656z'/%3E%3C/svg%3E"); + } +} diff --git a/visualization-bundle/style.scss b/visualization-bundle/style.scss new file mode 100644 index 0000000..c737082 --- /dev/null +++ b/visualization-bundle/style.scss @@ -0,0 +1,6 @@ +@import "./src/visualizers/grid-visualizer/style.scss"; +@import "./src/visualizers/simple-text-visualizer/style.scss"; +@import "./src/visualizers/monaco-text-visualizer/style.scss"; +@import "./src/visualizers/tree-visualizer/style.scss"; +@import "./src/visualizers/ast-visualizer/style.scss"; +@import "./src/visualizers/svg-visualizer/style.scss"; diff --git a/visualization-bundle/tsconfig.json b/visualization-bundle/tsconfig.json new file mode 100644 index 0000000..6608940 --- /dev/null +++ b/visualization-bundle/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "es2020", + "moduleResolution": "node", + "strict": true, + "outDir": "dist", + "skipLibCheck": true, + "newLine": "LF", + "sourceMap": true, + "jsx": "react", + "experimentalDecorators": true, + "declaration": true, + "declarationMap": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*"] +} diff --git a/visualization-core/README.md b/visualization-core/README.md new file mode 100644 index 0000000..4288643 --- /dev/null +++ b/visualization-core/README.md @@ -0,0 +1,59 @@ +# Visualization Core + +## Installation + +You can use yarn to install this library: + +``` +yarn add @hediet/visualization-core +``` + +You may want to install `@hediet/visualization-bundle` for the actual visualizations too! + +## Usage + +Use `globalVisualizationFactory` to visualize some data: + +```tsx +import { globalVisualizationFactory } from "@hediet/visualization-core"; + +const data = { + kind: { graph: true as true }, + nodes: [ + { id: "1", label: "1" }, + { id: "2", label: "2", color: "orange" }, + { id: "3", label: "3" }, + ], + edges: [ + { from: "1", to: "2", color: "red" }, + { from: "1", to: "3" }, + ], +}; + +const visualizations = globalVisualizationFactory.getVisualizations( + data, + /* preferred visualization id */ undefined +); +// `visualizations.bestVisualization` is the visualization that is best suited to visualize the data. +// `visualiztaions.allVisualizations` contains all other available visualizations than can visualize the data. +``` + +If you use react, you can use the `VisualizationView` component to render a visualization: + +```tsx +import { VisualizationView, Theme } from "@hediet/visualization-core"; + +// const visualizations = ... + +function App() { + if (!visualizations.bestVisualization) { + return null; + } + return ( + + ); +} +``` diff --git a/visualization-core/architecture.drawio.svg b/visualization-core/architecture.drawio.svg new file mode 100644 index 0000000..d208901 --- /dev/null +++ b/visualization-core/architecture.drawio.svg @@ -0,0 +1,442 @@ + + + + + + + + +
+
+
+ Manages them +
+
+
+
+ + Manages them + +
+
+ + + + + +
+
+
+ Creates a Visualization for +
+
+
+
+ + Creates a Visualization for + +
+
+ + + + + +
+
+
+ Creates using registered Visualizers +
+
+
+
+ + Creates using registered Visualizers + +
+
+ + + + +
+
+
+ #VisualizationFactory +
+
+
+
+ + #VisualizationFactory + +
+
+ + + + + +
+
+
+ Creates through `BaseSerializer<Visualization>` +
+
+
+
+ + Creates through `BaseSerializer<Visualization>` + +
+
+ + + + + +
+
+
+ Is being processed by the serializer +
+
+
+
+ + Is being processed by the serializer + +
+
+ + + + +
+
+
+ + «interface» + +
+ + #Visualizer + +
+
+
+
+ + «interface»... + +
+
+ + + + + +
+
+
+ #sourceVisualizer +
+
+
+
+ + #sourceVisualizer + +
+
+ + + + + +
+
+
+ Renders into +
+
+
+
+ + Renders into + +
+
+ + + + + +
+
+
+ Gets a theme when rendering +
+
+
+
+ + Gets a theme when rendering + +
+
+ + + + +
+
+
+ «interface» +
+ + #Visualization + +
+
+
+
+ + «interface»... + +
+
+ + + + +
+
+
+ #Theme +
+
+
+
+ + #Theme + +
+
+ + + + +
+
+
+ HTMLDivElement +
+
+
+
+ + HTMLDivElement + +
+
+ + + + + +
+
+
+ creates +
+
+
+
+ + creates + +
+
+ + + + +
+
+
+ + «interface» +
+
+ #createVisualizer +
+
+
+
+ + «interface»... + +
+
+ + + + + + +
+
+
+ + «abstract» + +
+ #BaseReactVisualization +
+
+
+
+ + «abstract»... + +
+
+ + + + + + +
+
+
+ #ReactVisualization +
+
+
+
+ + #ReactVisualization + +
+
+ + + + +
+
+
+ #VisualizationData +
+
+
+
+ + #VisualizationData + +
+
+ + + + + +
+
+
+ Renders +
+
+
+
+ + Renders + +
+
+ + + + + +
+
+
+ Uses for rendering +
+
+
+
+ + Uses for rendering + +
+
+ + + + +
+
+
+ #VisualizationView +
+
+
+
+ + #VisualizationView + +
+
+ + + + + +
+
+
+ Instance of +
+
+
+
+ + Instance of + +
+
+ + + + +
+
+
+ + «object» + +
+ #globalVisualizationFactory +
+
+
+
+ + «object»... + +
+
+
+ + + + + Viewer does not support full SVG 1.1 + + + +
\ No newline at end of file diff --git a/visualization-core/package.json b/visualization-core/package.json new file mode 100644 index 0000000..eef0bd1 --- /dev/null +++ b/visualization-core/package.json @@ -0,0 +1,45 @@ +{ + "name": "@hediet/visualization-core", + "description": "Provides infrastructure to find registered visualizations for given json data", + "version": "0.1.0", + "license": "MIT", + "homepage": "https://github.com/hediet/visualization", + "repository": { + "type": "git", + "url": "https://github.com/hediet/visualization.git" + }, + "author": { + "name": "Henning Dieterichs", + "email": "henning.dieterichs@live.de" + }, + "keywords": [ + "visualization", + "json" + ], + "files": [ + "dist", + "src" + ], + "scripts": { + "dev": "tsc --watch", + "build": "tsc" + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@hediet/std": "^0.6.0", + "@hediet/semantic-json": "^0.3.11", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "react-measure": "^2.3.0" + }, + "devDependencies": { + "@types/react": "^16.9.22", + "@types/react-dom": "^16.9.5", + "typescript": "^3.9.7" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + } +} diff --git a/visualization-core/src/ReactVisualization.tsx b/visualization-core/src/ReactVisualization.tsx new file mode 100644 index 0000000..9090378 --- /dev/null +++ b/visualization-core/src/ReactVisualization.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import * as ReactDom from "react-dom"; +import { Visualization, Theme } from "./index"; +import { Visualizer, VisualizationId, asVisualizationId } from "./Visualizer"; + +interface Options { + id?: string; + name?: string; + priority: number; +} + +export abstract class BaseReactVisualization implements Visualization { + public readonly id: VisualizationId; + public readonly name: string; + public readonly priority: number; + + constructor( + public readonly sourceVisualizer: Visualizer, + options: Options + ) { + this.id = asVisualizationId( + options.id || sourceVisualizer.id.toString() + ); + this.name = options.name || sourceVisualizer.name; + this.priority = options.priority; + } + + public render( + target: HTMLDivElement, + theme: Theme, + previous: unknown | undefined + ): unknown { + const node = this.getReactNode(theme); + // We could use this to get access to theme vars: + // getComputedStyle(target).getPropertyValue("--background-color") + + ReactDom.render(<>{node}, target); + return undefined; + } + + protected abstract getReactNode(theme: Theme): React.ReactChild; +} + +export class ReactVisualization extends BaseReactVisualization { + constructor( + sourceVisualizer: Visualizer, + options: Options, + private readonly renderReactNode: (theme: Theme) => React.ReactChild + ) { + super(sourceVisualizer, options); + } + + protected getReactNode(theme: Theme): React.ReactChild { + return this.renderReactNode(theme); + } +} diff --git a/visualization-core/src/Theme.ts b/visualization-core/src/Theme.ts new file mode 100644 index 0000000..4507492 --- /dev/null +++ b/visualization-core/src/Theme.ts @@ -0,0 +1,9 @@ +export class Theme { + public static readonly light = new Theme("light", "light"); + public static readonly dark = new Theme("dark", "dark"); + + constructor( + public readonly id: string, + public readonly kind: "light" | "dark" + ) {} +} diff --git a/visualization-core/src/VisualizationData.tsx b/visualization-core/src/VisualizationData.tsx new file mode 100644 index 0000000..76cdb56 --- /dev/null +++ b/visualization-core/src/VisualizationData.tsx @@ -0,0 +1,16 @@ +export interface VisualizationData { + kind: Record; +} + +export function isVisualizationData(val: unknown): val is VisualizationData { + if (typeof val !== "object" || !val || !("kind" in val)) { + return false; + } + + const obj = val as any; + if (typeof obj.kind !== "object" || !obj.kind) { + return false; + } + + return Object.values(obj.kind).every(val => val === true); +} diff --git a/visualization-core/src/VisualizationView.tsx b/visualization-core/src/VisualizationView.tsx new file mode 100644 index 0000000..64702fc --- /dev/null +++ b/visualization-core/src/VisualizationView.tsx @@ -0,0 +1,42 @@ +import * as React from "react"; +import { Visualization } from "./Visualizer"; +import { Theme } from "./Theme"; + +export class VisualizationView extends React.Component<{ + visualization: Visualization; + theme: Theme; +}> { + private readonly ref = React.createRef(); + private visualizationRenderState: unknown = undefined; + + componentDidMount() { + this.renderVisualization(); + } + + componentDidUpdate() { + this.renderVisualization(); + } + + renderVisualization() { + const { visualization, theme } = this.props; + this.visualizationRenderState = visualization.render( + this.ref.current!, + theme, + this.visualizationRenderState + ); + } + + render() { + return ( +
+ ); + } +} diff --git a/visualization-core/src/Visualizer.tsx b/visualization-core/src/Visualizer.tsx new file mode 100644 index 0000000..5620caa --- /dev/null +++ b/visualization-core/src/Visualizer.tsx @@ -0,0 +1,37 @@ +import { BaseSerializer } from "@hediet/semantic-json"; +import { Theme } from "./Theme"; + +export interface VisualizerId extends String { + __brand: "VisualizerId"; +} + +export function asVisualizerId(id: string): VisualizerId { + return (id as unknown) as VisualizerId; +} + +export interface Visualizer { + readonly id: VisualizerId; + readonly name: string; + readonly serializer: BaseSerializer; +} + +export interface VisualizationId extends String { + __brand: "VisualizationId"; +} + +export function asVisualizationId(id: string): VisualizationId { + return (id as unknown) as VisualizationId; +} + +export interface Visualization { + readonly id: VisualizationId; + readonly name: string; + readonly priority: number; + readonly sourceVisualizer: Visualizer; + + render( + target: HTMLDivElement, + theme: Theme, + previousRenderState: TRenderState | undefined + ): TRenderState; +} diff --git a/visualization-core/src/VisualizerRegistry.ts b/visualization-core/src/VisualizerRegistry.ts new file mode 100644 index 0000000..74fd4ed --- /dev/null +++ b/visualization-core/src/VisualizerRegistry.ts @@ -0,0 +1,82 @@ +import { Visualizer, Visualization, VisualizationId } from "./Visualizer"; +import { VisualizationData } from "./VisualizationData"; +import { JSONValue, sUnionMany } from "@hediet/semantic-json"; +import { ObservableMap } from "mobx"; + +export class VisualizationFactory { + private readonly visualizers = new ObservableMap(); + private readonly hiddenVisualizers = new ObservableMap< + string, + Visualizer + >(); + + public getSerializer() { + return this._getSerializer(this.visualizers); + } + + private _getSerializer(map: ObservableMap) { + return sUnionMany( + [...map.values()].map(v => v.serializer.asSerializer()), + { processingStrategy: "all" } + ); + } + + public addVisualizer(visualizer: Visualizer): void { + this.visualizers.set(visualizer.id.toString(), visualizer); + } + + /** + * Hidden visualizers don't appear in `getSerializer` and should only be presented to the user if he explicitly selects it. + * `getVisualizations(...).bestVisualization` is only the result of a hidden visualizer if the user requests a hidden visualization id. + */ + public addHiddenVisualizer(visualizer: Visualizer): void { + this.hiddenVisualizers.set(visualizer.id.toString(), visualizer); + } + + public getVisualizations( + data: VisualizationData, + preferredVisualization: VisualizationId | undefined + ): Visualizations { + const u = this.getSerializer(); + const result = u.deserialize((data as unknown) as JSONValue); + const allVisualizations = result.value || []; + + const u2 = this._getSerializer(this.hiddenVisualizers); + const hiddenResult = u2.deserialize((data as unknown) as JSONValue); + allVisualizations.push(...(hiddenResult.value || [])); + + allVisualizations.sort((a, b) => b.priority - a.priority); + + let bestVisualization: Visualization | undefined = allVisualizations[0]; + if (bestVisualization && bestVisualization.priority < 0) { + bestVisualization = undefined; + } + if (preferredVisualization) { + const preferred = allVisualizations.find( + vis => vis.id === preferredVisualization + ); + if (preferred) { + bestVisualization = preferred; + } + } + + return { + bestVisualization, + allVisualizations, + visualizationDataErrors: [], + }; + } +} + +export interface Visualizations { + bestVisualization: Visualization | undefined; + allVisualizations: Visualization[]; + visualizationDataErrors: VisualizationDataError[]; +} + +export interface VisualizationDataError { + visualizer: Visualizer; + message: string; +} + +export const globalVisualizationFactory = new VisualizationFactory(); diff --git a/visualization-core/src/createVisualizer.tsx b/visualization-core/src/createVisualizer.tsx new file mode 100644 index 0000000..9d2c0d3 --- /dev/null +++ b/visualization-core/src/createVisualizer.tsx @@ -0,0 +1,29 @@ +import { BaseSerializer } from "@hediet/semantic-json"; +import { Visualization, Visualizer, asVisualizerId } from "./Visualizer"; + +export function createVisualizer(options: { + /** + * A unique id for this visualizer. + */ + id: string; + /** + * A human readable name of this visualizer. + * Should be in English language. + */ + name: string; + serializer: BaseSerializer; + getVisualization: (data: TData, self: Visualizer) => Visualization; +}): Visualizer { + const result: Visualizer = { + id: asVisualizerId(options.id), + name: options.name, + serializer: options.serializer.refine({ + fromIntermediate: data => options.getVisualization(data, result), + canSerialize: (val): val is Visualization => false, + toIntermediate: () => { + throw new Error("not supported"); + }, + }), + }; + return result; +} diff --git a/visualization-core/src/index.tsx b/visualization-core/src/index.tsx new file mode 100644 index 0000000..1e8f3be --- /dev/null +++ b/visualization-core/src/index.tsx @@ -0,0 +1,7 @@ +export * from "./VisualizationData"; +export * from "./ReactVisualization"; +export * from "./Visualizer"; +export * from "./VisualizerRegistry"; +export * from "./VisualizationView"; +export * from "./Theme"; +export * from "./createVisualizer"; diff --git a/visualization-core/tsconfig.json b/visualization-core/tsconfig.json new file mode 100644 index 0000000..6608940 --- /dev/null +++ b/visualization-core/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "es2020", + "moduleResolution": "node", + "strict": true, + "outDir": "dist", + "skipLibCheck": true, + "newLine": "LF", + "sourceMap": true, + "jsx": "react", + "experimentalDecorators": true, + "declaration": true, + "declarationMap": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..1a796f1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8792 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"3d-view@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/3d-view/-/3d-view-2.0.0.tgz#831ae942d7508c50801e3e06fafe1e8c574e17be" + integrity sha1-gxrpQtdQjFCAHj4G+v4ejFdOF74= + dependencies: + matrix-camera-controller "^2.1.1" + orbit-camera-controller "^4.0.0" + turntable-camera-controller "^3.0.0" + +"@babel/code-frame@^7.5.5": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" + integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.8.4": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@blueprintjs/core@^3.23.1": + version "3.30.1" + resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.30.1.tgz#e9edad79ee474dc5b2c1ac3a54055174482f94e3" + integrity sha512-vx4Sfpj3EatYGp7BbL9Y8bFHl9XeQhD86QDbK3E2QH+rPSVod1HvUmGnEvzt0fgbpYWGhfIx/AIEj9D4Ap3rKg== + dependencies: + "@blueprintjs/icons" "^3.20.0" + "@types/dom4" "^2.0.1" + classnames "^2.2" + dom4 "^2.1.5" + normalize.css "^8.0.1" + popper.js "^1.16.1" + react-lifecycles-compat "^3.0.4" + react-popper "^1.3.7" + react-transition-group "^2.9.0" + resize-observer-polyfill "^1.5.1" + tslib "~1.10.0" + +"@blueprintjs/icons@^3.20.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.20.0.tgz#8eae6fa490735ed2e20a670851cb6ff9d0d3973f" + integrity sha512-bEn7S/aYF8K1p9QJb4KcQ8R9vJLDJ+VtB81w0JlMWIrWTJyM/U3953mp22mK/jr7zJ1pyVIzw6ZRSrG8ht4rgw== + dependencies: + classnames "^2.2" + tslib "~1.10.0" + +"@choojs/findup@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3" + integrity sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw== + dependencies: + commander "^2.15.1" + +"@d3fc/d3fc-annotation@^2.4.0": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-annotation/-/d3fc-annotation-2.5.5.tgz#018ce09772d335f4ee4d66ad0abb71fe6e1ae5c1" + integrity sha512-Dw7F75wBXtaJamWoKDXC5LmZ7Vs52J5JV/OVvH/8Xal8Rn7V95vwyixB7jrP0UgwmBR0fx+pzPBIpXUaX9U4yQ== + dependencies: + "@d3fc/d3fc-data-join" "^5.1.0" + "@d3fc/d3fc-rebind" "^5.0.10" + "@d3fc/d3fc-series" "^4.7.2" + "@d3fc/d3fc-shape" "^5.1.0" + d3-scale "^1.0.1" + d3-selection "^1.0.2" + +"@d3fc/d3fc-axis@^2.2.0", "@d3fc/d3fc-axis@^2.2.5": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-axis/-/d3fc-axis-2.3.0.tgz#26b46a76503a8d961502a278d2f042f0d7d9e23f" + integrity sha512-l4okwI6VYSoNBBnqdeX+NwHAEejVqDEO8N7EV8HfGQYukKuNzCGcXGsQMCFJ1Hi5y1MQF5qxQq9Ch9HJBQRIhA== + dependencies: + "@d3fc/d3fc-data-join" "^5.1.0" + "@d3fc/d3fc-rebind" "^5.0.10" + d3-scale "^1.0.3" + d3-selection "^1.0.2" + d3-shape "^1.0.3" + +"@d3fc/d3fc-brush@^2.0.37": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-brush/-/d3fc-brush-2.1.5.tgz#875dff7d77e8677968f688ea7ca81480ada4449b" + integrity sha512-wENNsT0AEXoIe273qYsNvCU7WaSkgvjsh+HDxCRApfe8oR2bWU1OSPEtIHzMSnJ2BFOf83Hg73xAgDJzckbYLQ== + dependencies: + "@d3fc/d3fc-data-join" "^5.1.0" + "@d3fc/d3fc-rebind" "^5.0.10" + d3-brush "^1.0.3" + d3-dispatch "^1.0.2" + d3-scale "^1.0.3" + d3-selection "^1.0.2" + +"@d3fc/d3fc-chart@^2.5.9": + version "2.7.26" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-chart/-/d3fc-chart-2.7.26.tgz#03d29a69ea4f4546139d2e62a0855fde931b8402" + integrity sha512-kJSvF20h4IwljdAS2jTuhbRlPNOokEJC8IIBsiJopM7HngEV9HSDYigDY1t6NTB2kc1IaQ9ptOBEnqKzuW8/8A== + dependencies: + "@d3fc/d3fc-axis" "^2.2.5" + "@d3fc/d3fc-data-join" "^5.0.11" + "@d3fc/d3fc-element" "^5.3.26" + "@d3fc/d3fc-rebind" "^5.0.10" + "@d3fc/d3fc-series" "^4.4.15" + d3-scale "^1.0.3" + d3-selection "^1.0.2" + +"@d3fc/d3fc-data-join@^5.0.11", "@d3fc/d3fc-data-join@^5.0.7", "@d3fc/d3fc-data-join@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-data-join/-/d3fc-data-join-5.1.0.tgz#5db687bc5e38af8ebcd31243c5de15f6637cab2a" + integrity sha512-JLxFX09ueMoMfp2rdnozMkRhT9+2oJ3NWSKcScrkPVYptJZZg2NPHDmn6BcuJ0cOAFoqdXUQx+yG6qwduLoY/g== + dependencies: + d3-selection "^1.0.0" + +"@d3fc/d3fc-discontinuous-scale@^3.0.7": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-discontinuous-scale/-/d3fc-discontinuous-scale-3.2.0.tgz#51f47b63d86c79ab93c5a6f79bb88681d0fb68f2" + integrity sha512-67/WT1sz/KVdxtuHpgjY0+BHPWPCbf5B8lhQkw/xYxRUHMAtzpo+7DIXZtyZUshbF1PwmNNHEh4XX90vPZaWZQ== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.10" + d3-scale "^1.0.0" + d3-time "^1.0.0" + +"@d3fc/d3fc-element@^5.2.2", "@d3fc/d3fc-element@^5.3.26": + version "5.4.5" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-element/-/d3fc-element-5.4.5.tgz#3a446ecd3c6f8caef86846372bbec232313d0933" + integrity sha512-74cDP8l6f/G/TCdnTQvzbYAiBSOO/DadpJwfk9QvE3b43nS4e/0qpxMERDKo97LheFFkmyuLE6TfSoySX63Svw== + +"@d3fc/d3fc-extent@^3.1.3": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-extent/-/d3fc-extent-3.2.0.tgz#57854970f447e0cc656106ab5aff11ec1136e752" + integrity sha512-IYBsW280+fRTf24+bkr/BWyDe/C5Hp0K57TzdCxNBo6U3i5kuL2nq6FFOjcp1+rcPIUjCs7sMSzozAXXrfAURA== + dependencies: + d3-array "^1.0.0" + +"@d3fc/d3fc-financial-feed@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-financial-feed/-/d3fc-financial-feed-6.1.0.tgz#6a711639dfdc0747385534c2dcdb907f4107d8f5" + integrity sha512-EZieTbPphr9BfWDgVnm7zZnBgJdln6PY3VveQk1HkMP8IXS/ojIvLoCU/uoIjDruTeMx+AblLEjNR7jH71+hkA== + dependencies: + d3-fetch "^1.1.0" + +"@d3fc/d3fc-group@^2.0.6": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-group/-/d3fc-group-2.0.10.tgz#267588ba9297edeb2a6ebeabddb79647f78fa6f7" + integrity sha512-2WTb9bNzhntrQqSEaqggpCSmw2zBDS8bZVxVqjxduzdN2eZpgmYZ8j9UGYGvIi20MkoGUF5oUp9msLhImMc6bw== + +"@d3fc/d3fc-label-layout@^6.0.7": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-label-layout/-/d3fc-label-layout-6.1.0.tgz#46fd80432166af53e310d1e9bd5b3f310e65a070" + integrity sha512-cFgiE9y7PmSRjxKkGa2QjQWfNkaXo2NaFCQU/7K9mQqpdvbigeGK0eZOQSXdDRet9gUspvtXVGClpDTaMzM3vw== + dependencies: + "@d3fc/d3fc-data-join" "^5.1.0" + "@d3fc/d3fc-rebind" "^5.0.10" + d3-array "^1.0.0" + d3-scale "^1.0.6" + d3-selection "^1.0.0" + +"@d3fc/d3fc-pointer@^2.0.7": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-pointer/-/d3fc-pointer-2.2.0.tgz#48f8325af7532b2c64e522ea5c4ab8aa6c31c8bc" + integrity sha512-oiD9hXaGIYFsqVDOzX8CGQgr8YDIwf0twgnpRFiYxThnicuHFW7OvRm3eWT0OTHkPAh5H8H1MCo6W7WI9v8B1g== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.10" + d3-dispatch "^1.0.1" + d3-selection "^1.0.2" + +"@d3fc/d3fc-random-data@^3.0.7": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-random-data/-/d3fc-random-data-3.1.0.tgz#22e5c3eca6a9626deab478d8a1407a79afec4899" + integrity sha512-gQclM3xFBmz2ubLu7xqSkqMhUaARCCoDogGUHEMgtiEo6GLqPSk7SCo2hoYwDnx10YAtCi/LDeulEsLtCxjI8A== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.10" + d3-random "^1.0.0" + d3-time "^1.0.0" + +"@d3fc/d3fc-rebind@^5.0.10", "@d3fc/d3fc-rebind@^5.0.6", "@d3fc/d3fc-rebind@^5.0.8": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-rebind/-/d3fc-rebind-5.0.10.tgz#8e42b885ef9cba87dcb912489368305dc9bbabc8" + integrity sha512-UUR8c2bkbnr9SAXDoYhVkTGvY8BAWJRlr0szTBCE37fmq/gyadGR7W8M8x6XWrcZim5LEzjxS96hmEbJ61YIhA== + +"@d3fc/d3fc-sample@^4.0.7": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-sample/-/d3fc-sample-4.1.0.tgz#f1bc93681db276dc69190f3f80a531506ae7b902" + integrity sha512-iO+KYL6XNq1jOJhRhlRJWk6vSxp0F7uo7T+gmDGUPWz8emUwOjlHqOpfQ2onomWPV1xW9nB4DLvP9v5Ch2QCRQ== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.10" + d3-array "^1.0.0" + +"@d3fc/d3fc-series@^4.0.17", "@d3fc/d3fc-series@^4.4.15", "@d3fc/d3fc-series@^4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-series/-/d3fc-series-4.7.2.tgz#0ecec36ef919893295fd1c6e378605f170a49d13" + integrity sha512-oYtpUq4jtzVMXza3qt6Qv+h50cxdL+izNJ/LwRhzOj92tjfws+q4hSwP9jKYKje9HDDnBksevBvK3D0/B7gO3A== + dependencies: + "@d3fc/d3fc-data-join" "^5.1.0" + "@d3fc/d3fc-rebind" "^5.0.10" + "@d3fc/d3fc-shape" "^5.1.0" + "@d3fc/d3fc-webgl" "^1.9.2" + d3-array "^1.0.0" + d3-scale "^1.0.1" + d3-selection "^1.0.0" + d3-shape "^1.0.0" + +"@d3fc/d3fc-shape@^5.0.7", "@d3fc/d3fc-shape@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-shape/-/d3fc-shape-5.1.0.tgz#b514b31c5e12583e176c26ceeb97149a9d3d1cc8" + integrity sha512-PHYdHtcgkI2wbOe6mT0fLXXqtiTF8MOPTa6yFK5Cui1+bE+p1e8rHepj0yiMY+NLcY1BSUVCK64jz8gqOEe2aQ== + dependencies: + d3-path "^1.0.0" + +"@d3fc/d3fc-technical-indicator@^7.0.23": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-technical-indicator/-/d3fc-technical-indicator-7.1.6.tgz#0ed8c5f3a702c5d3c847783770fc7e16706087fc" + integrity sha512-RE4f9BWrB5cR0N5gwHIqWg+1cjJQNbgpNtIml5AY92D4pHz3g3kkXw0CJ6sXO1fSpd3SW6mkBsX7MQBpYEQsew== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.10" + d3-array "^1.0.0" + +"@d3fc/d3fc-webgl@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@d3fc/d3fc-webgl/-/d3fc-webgl-1.9.2.tgz#c3e384500c0a449f622fcc7407e56f9818102935" + integrity sha512-R3ZbbFToUShtpp5GsIQrGBDq4Qv/x4aoyxAwcXKT1V2DfgbdDoTboTmkZ/P8CZW+2tTLxXM2Kd9pnrEBo8xAyA== + dependencies: + "@d3fc/d3fc-rebind" "^5.0.8" + d3-scale "^3.2.1" + d3-shape "^1.3.7" + +"@finos/perspective-viewer-d3fc@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@finos/perspective-viewer-d3fc/-/perspective-viewer-d3fc-0.5.2.tgz#04c68005f9d4bccf94b7a9888f20c295af25022b" + integrity sha512-hDdn7XijoBXzqNOBSZUsoCDNGYZg8AKNBIk0OYGUYuUZkwtkvQqm4UxKaQQj0+4Q8UkIo7dtpQw14UzymYKU2A== + dependencies: + "@finos/perspective" "^0.5.2" + "@finos/perspective-viewer" "^0.5.2" + babel-runtime "^6.26.0" + chroma-js "^1.3.4" + core-js "^3.6.4" + d3 "^5.7.0" + d3-svg-legend "^2.25.6" + d3fc "14.0.40" + gradient-parser "0.1.5" + +"@finos/perspective-viewer-datagrid@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@finos/perspective-viewer-datagrid/-/perspective-viewer-datagrid-0.5.2.tgz#08aeee434b1844908758974f913f88a9af2f1ad5" + integrity sha512-rClXTK/joqad9d/OWnkd9MZvsZwiS1hDhEYxg1oQPz5Sp586i1ffDbE+kk9DlB/nDoEq02qn6yipp1Xn2eVO5A== + dependencies: + "@finos/perspective" "^0.5.2" + "@finos/perspective-viewer" "^0.5.2" + regular-table "=0.0.2" + +"@finos/perspective-viewer@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@finos/perspective-viewer/-/perspective-viewer-0.5.2.tgz#0e6452f1fa658baecacb8ba9f8ab94b7c5865f80" + integrity sha512-4lr5YlbNTsmhOUaUabrpwGVmD/y49OttjrIpzhmN0GmJe6CXLnlpoRq9CA94nL2op7Z+w6UDuElSzm6UtjfGuA== + dependencies: + "@babel/runtime" "^7.8.4" + "@finos/perspective" "^0.5.2" + "@types/react" "^16.9.17" + "@webcomponents/shadycss" "^1.5.2" + "@webcomponents/webcomponentsjs" "~2.0.4" + awesomplete "^1.1.2" + chevrotain "^6.5.0" + core-js "^3.6.4" + d3-array "^1.2.1" + detectie "1.0.0" + lit-html "^1.1.2" + lodash "^4.17.4" + mobile-drag-drop "^2.3.0-rc.2" + +"@finos/perspective@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@finos/perspective/-/perspective-0.5.2.tgz#7827e5b1021a4b2cbfc1dd3919f2af6d8285abaf" + integrity sha512-s57Gwx+fOu/nazl5HNGoVi7DEvZmU0at39Fwl8WSd2kEhHJ9KZeiC+Fm+uQHfIEXPL10OaTHUxI0l1urHBZjow== + dependencies: + "@babel/runtime" "^7.8.4" + core-js "^3.6.4" + d3-array "^1.2.1" + detectie "1.0.0" + flatbuffers "^1.10.2" + lodash "^4.17.4" + moment "^2.19.1" + papaparse "^5.2.0" + text-encoding-utf-8 "^1.0.2" + tslib "^1.9.3" + ws "^6.1.2" + +"@hediet/monaco-editor-react@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@hediet/monaco-editor-react/-/monaco-editor-react-0.1.0.tgz#b00dfa28e2ffa09ecc748e35f4befc0e887947f2" + integrity sha512-EFAmKW1u9ks2iqTP63qqLPUezKMAnK+UvZrvoRmUMCpRRxG9uduYGPQfASaHcIQYzOqzWaVKvCQN5wQQ+lSxIQ== + +"@hediet/semantic-json@^0.3.11": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@hediet/semantic-json/-/semantic-json-0.3.11.tgz#9420a89d30645ba333dfd4f3f2c120f973297ee2" + integrity sha512-KKw6ZcYHiyfhanNmln/WlG4KvZnMi/Ojy8O6HB6sqfDC5XCcNYjccUMMtaX23F/Hox0dWJPFqXYs54KJAA5itg== + +"@hediet/std@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@hediet/std/-/std-0.6.0.tgz#f7d2ffc1180ecef6ff272d0d6780f0c0d9337e4e" + integrity sha512-XzBiZo6pnt01k266lSbXOBZd7jrQQSutoH3IpI/1GuL09zxuDX+c0XersEbMCGS45S2l/TSlISyV3MH1lbYJEg== + dependencies: + "@types/chai" "^4.1.7" + "@types/sinon" "^7.0.10" + chai "^4.2.0" + mobx "^5.10.0" + sinon "^7.2.7" + +"@mapbox/geojson-rewind@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz#91f0ad56008c120caa19414b644d741249f4f560" + integrity sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg== + dependencies: + concat-stream "~2.0.0" + minimist "^1.2.5" + +"@mapbox/geojson-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== + +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= + +"@mapbox/mapbox-gl-supported@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" + integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== + +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= + +"@mapbox/tiny-sdf@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff" + integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg== + +"@mapbox/unitbezier@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + +"@plotly/d3-sankey-circular@0.33.1": + version "0.33.1" + resolved "https://registry.yarnpkg.com/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz#15d1e0337e0e4b1135bdf0e2195c88adacace1a7" + integrity sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ== + dependencies: + d3-array "^1.2.1" + d3-collection "^1.0.4" + d3-shape "^1.2.0" + elementary-circuits-directed-graph "^1.0.4" + +"@plotly/d3-sankey@0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz#ddd5290d3b02c60037ced018a162644a2ccef33b" + integrity sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw== + dependencies: + d3-array "1" + d3-collection "1" + d3-shape "^1.2.0" + +"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + dependencies: + type-detect "4.0.8" + +"@sinonjs/formatio@^3.2.1": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" + integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== + dependencies: + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" + +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== + dependencies: + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + +"@turf/area@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.0.1.tgz#50ed63c70ef2bdb72952384f1594319d94f3b051" + integrity sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/bbox@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.0.1.tgz#b966075771475940ee1c16be2a12cf389e6e923a" + integrity sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/centroid@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@turf/centroid/-/centroid-6.0.2.tgz#c4eb16b4bc60b692f74e1809cf9a7c4a4f5ba1cc" + integrity sha512-auyDauOtC4eddH7GC3CHFTDu2PKhpSeKCRhwhHhXtJqn2dWCJQNIoCeJRmfXRIbzCWhWvgvQafvvhq8HNvmvWw== + dependencies: + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + +"@turf/helpers@6.x": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836" + integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g== + +"@turf/meta@6.x": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf" + integrity sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA== + dependencies: + "@turf/helpers" "6.x" + +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + +"@types/base64-js@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/base64-js/-/base64-js-1.3.0.tgz#c939fdba49846861caf5a246b165dbf5698a317c" + integrity sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw== + +"@types/chai@^4.1.7": + version "4.2.12" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" + integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== + +"@types/classnames@^2.2.9": + version "2.2.10" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999" + integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ== + +"@types/clean-css@*": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/clean-css/-/clean-css-4.2.2.tgz#99fd79f6939c2b325938a1c569712e07dd97d709" + integrity sha512-xiTJn3bmDh1lA8c6iVJs4ZhHw+pcmxXlJQXOB6G1oULaak8rmarIeFKI4aTJ7849dEhaO612wgIualZfbxTJwA== + dependencies: + "@types/node" "*" + +"@types/d3-selection@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.0.10.tgz#dcfb0ddfcdfb1ad26aea4351323771e1aea96e84" + integrity sha1-3PsN3837GtJq6kNRMjdx4a6pboQ= + +"@types/d3@^3": + version "3.5.43" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.43.tgz#e9b4992817e0b6c5efaa7d6e5bb2cee4d73eab58" + integrity sha512-t9ZmXOcpVxywRw86YtIC54g7M9puRh8hFedRvVfHKf5YyOP6pSxA0TvpXpfseXSCInoW4P7bggTrSDiUOs4g5w== + +"@types/dom4@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.1.tgz#506d5781b9bcab81bd9a878b198aec7dee2a6033" + integrity sha512-kSkVAvWmMZiCYtvqjqQEwOmvKwcH+V4uiv3qPQ8pAh1Xl39xggGEo8gHUqV4waYGHezdFw0rKBR8Jt0CrQSDZA== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/html-minifier@*": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier/-/html-minifier-4.0.0.tgz#2065cb9944f2d1b241146707c6935aa7b947d279" + integrity sha512-eFnGhrKmjWBlnSGNtunetE3UU2Tc/LUl92htFslSSTmpp9EKHQVcYQadCyYfnzUEFB5G/3wLWo/USQS/mEPKrA== + dependencies: + "@types/clean-css" "*" + "@types/relateurl" "*" + "@types/uglify-js" "*" + +"@types/html-webpack-plugin@^3.2.2": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/html-webpack-plugin/-/html-webpack-plugin-3.2.3.tgz#865323e30e82560c0ca898dbf9f6f9d1c541cd7f" + integrity sha512-Y7dsVhTn75IaD4lMIY02UP1L8e0ou8KQu8DKPJAegEFKdJR28/8ejayDG8ykfR0DtYCx3dCEHIkdpN8AOB6txQ== + dependencies: + "@types/html-minifier" "*" + "@types/tapable" "*" + "@types/webpack" "*" + +"@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + +"@types/line-column@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/line-column/-/line-column-1.0.0.tgz#fa5a59c21e885fef3739a273b43dacf55b63437f" + integrity sha512-wbw+IDRw/xY/RGy+BL6f4Eey4jsUgHQrMuA4Qj0CSG3x/7C2Oc57pmRoM2z3M4DkylWRz+G1pfX06sCXQm0J+w== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + +"@types/plotly.js@*", "@types/plotly.js@^1.50.16": + version "1.50.16" + resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.50.16.tgz#04dc8f9a259905dbda06142ccd6e2d03f726d452" + integrity sha512-rSdNicrkgX6BYp9PIcm2IAE/Htlw2EdpAabi+L5pVm9KcgaekDyVSew9yZbIG2WpqAWfFYoNOvcSCMVcdh+nhg== + dependencies: + "@types/d3" "^3" + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/react-dom@^16.9.5": + version "16.9.8" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + dependencies: + "@types/react" "*" + +"@types/react-measure@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/react-measure/-/react-measure-2.0.6.tgz#d66efad1960ea8b38eef9d8cc3cc857e7767b09e" + integrity sha512-FxAwgDVKvxm4SPXu24x9cwzsty8x33UueazHcpxM1UWZlGJI57yIHM2djE3xUJhYVxuzNzi4E8UL3kmCkdh+4A== + dependencies: + "@types/react" "*" + +"@types/react-plotly.js@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@types/react-plotly.js/-/react-plotly.js-2.2.4.tgz#360fcfcace64d0ef173cf0c7d67fc2441b39f659" + integrity sha512-dsvngno7Ar13XoF2eJXM609Msoc5DPboNp8x4NE4L+rsBEEsu16/0b0Fze8REx3fA4HEUk4rcn3uJsx48m2sew== + dependencies: + "@types/plotly.js" "*" + "@types/react" "*" + +"@types/react-svg-pan-zoom@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/react-svg-pan-zoom/-/react-svg-pan-zoom-3.3.1.tgz#ae210ffd20422515eaf5d54bfa8fe374be585b1e" + integrity sha512-N10C2gGqs6apsnTmmddCbAlNwb5VuX1DvosPV7NOmPPrSaKjMIRdgJ4luj9qipGHzafUU/T2JtM87RgvO/V+XA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.17", "@types/react@^16.9.22": + 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/relateurl@*": + version "0.2.28" + resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.28.tgz#6bda7db8653fa62643f5ee69e9f69c11a392e3a6" + integrity sha1-a9p9uGU/piZD9e5p6facEaOS46Y= + +"@types/sinon@^7.0.10": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.2.tgz#5e2f1d120f07b9cda07e5dedd4f3bf8888fccdb9" + integrity sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.3.tgz#d94ed608e295bc5424c9600e6b8565407b6b4b6b" + integrity sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w== + dependencies: + source-map "^0.6.1" + +"@types/webpack-sources@*": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" + integrity sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@*", "@types/webpack@^4.4.31", "@types/webpack@^4.41.6": + version "4.41.21" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" + integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webcomponents/shadycss@^1.5.2": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@webcomponents/shadycss/-/shadycss-1.10.1.tgz#6f377b313c96a93a690f25206b32a20eada4b2a9" + integrity sha512-XEVDA7oH6o4Au9apyRDucjcIzvP44Ur4sqTMGRKCcE6sCAeKiOkRE03TCYNJAFkzckMWWT8Xx3IxG3iwjAcsRQ== + +"@webcomponents/webcomponentsjs@~2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.0.4.tgz#fe18c288f99b7103e9ae7a766020f9702cedcc08" + integrity sha512-wzPSTmwjAd/0oKW36Yi+cB/BmDrHhcHqGlbqqMjrbPIFkt5Mw7wtvEZQouCrQyBNnRquUhRnSWIBrRijHNBBKg== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +a-big-triangle@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/a-big-triangle/-/a-big-triangle-1.0.3.tgz#eefd30b02a8f525e8b1f72bb6bb1b0c16751c794" + integrity sha1-7v0wsCqPUl6LH3K7a7GwwWdRx5Q= + dependencies: + gl-buffer "^2.1.1" + gl-vao "^1.2.0" + weak-map "^1.0.5" + +abab@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c" + integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ== + +abs-svg-path@^0.1.1, abs-svg-path@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" + integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-jsx@^5.0.1, acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn@^6.1.1, acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== + +add-line-numbers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/add-line-numbers/-/add-line-numbers-1.0.1.tgz#48dbbdea47dbd234deafeac6c93cea6f70b4b7e3" + integrity sha1-SNu96kfb0jTer+rGyTzqb3C0t+M= + dependencies: + pad-left "^1.0.2" + +affine-hull@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/affine-hull/-/affine-hull-1.0.0.tgz#763ff1d38d063ceb7e272f17ee4d7bbcaf905c5d" + integrity sha1-dj/x040GPOt+Jy8X7k17vK+QXF0= + dependencies: + robust-orientation "^1.1.3" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +almost-equal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd" + integrity sha1-+FHGMROHV5lCdqou++jfowZszN0= + +alpha-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/alpha-complex/-/alpha-complex-1.0.0.tgz#90865870d6b0542ae73c0c131d4ef989669b72d2" + integrity sha1-kIZYcNawVCrnPAwTHU75iWabctI= + dependencies: + circumradius "^1.0.0" + delaunay-triangulate "^1.1.6" + +alpha-shape@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/alpha-shape/-/alpha-shape-1.0.0.tgz#c83109923ecfda667d2163fe4f26fe24726f64a9" + integrity sha1-yDEJkj7P2mZ9IWP+Tyb+JHJvZKk= + dependencies: + alpha-complex "^1.0.0" + simplicial-complex-boundary "^1.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-bounds@^1.0.0, array-bounds@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-bounds/-/array-bounds-1.0.1.tgz#da11356b4e18e075a4f0c86e1f179a67b7d7ea31" + integrity sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= + +array-normalize@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-normalize/-/array-normalize-1.1.4.tgz#d75cec57383358af38efdf6a78071aa36ae4174c" + integrity sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg== + dependencies: + array-bounds "^1.0.0" + +array-range@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-range/-/array-range-1.0.1.tgz#f56e46591843611c6a56f77ef02eda7c50089bfc" + integrity sha1-9W5GWRhDYRxqVvd+8C7afFAIm/w= + +array-rearrange@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/array-rearrange/-/array-rearrange-2.2.2.tgz#fa1a2acf8d02e88dd0c9602aa0e06a79158b2283" + integrity sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.1, async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-1.0.0.tgz#b88dca6006922b962094f7556826bab31c4a296b" + integrity sha1-uI3KYAaSK5YglPdVaCa6sxxKKWs= + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +awesomplete@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/awesomplete/-/awesomplete-1.1.5.tgz#1b2b5dd106d3955595619c03da472a1dc0faf0af" + integrity sha512-UFw1mPW8NaSECDSTC36HbAOTpF9JK2wBUJcNn4MSvlNtK7SZ9N72gB+ajHtA6D1abYXRcszZnBA4nHBwvFwzHw== + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +barycentric@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/barycentric/-/barycentric-1.0.1.tgz#f1562bb891b26f4fec463a82eeda3657800ec688" + integrity sha1-8VYruJGyb0/sRjqC7to2V4AOxog= + dependencies: + robust-linear-solve "^1.0.0" + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +big-rat@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/big-rat/-/big-rat-1.0.4.tgz#768d093bb57930dd18ed575c7fca27dc5391adea" + integrity sha1-do0JO7V5MN0Y7Vdcf8on3FORreo= + dependencies: + bit-twiddle "^1.0.2" + bn.js "^4.11.6" + double-bits "^1.1.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +binary-search-bounds@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-1.0.0.tgz#323ca317e3f2a40f4244c7255f5384a5b207bb69" + integrity sha1-MjyjF+PypA9CRMclX1OEpbIHu2k= + +binary-search-bounds@^2.0.3, binary-search-bounds@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.4.tgz#eea0e4081da93baa851c7d851a7e636c3d51307f" + integrity sha512-2hg5kgdKql5ClF2ErBcSx0U5bnl5hgS4v7wMnLFodyR47yMtj2w+UAZB+0CiqyHct2q543i7Bi4/aMIegorCCg== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bit-twiddle@^1.0.0, bit-twiddle@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= + +bit-twiddle@~0.0.1: + version "0.0.2" + resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-0.0.2.tgz#c2eaebb952a3b94acc140497e1cdcd2f1a33f58e" + integrity sha1-wurruVKjuUrMFASX4c3NLxoz9Y4= + +bitmap-sdf@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bitmap-sdf/-/bitmap-sdf-1.0.3.tgz#c99913e5729357a6fd350de34158180c013880b2" + integrity sha512-ojYySSvWTx21cbgntR942zgEgqj38wHctN64vr4vYRFf3GKVmI23YlA94meWGkFslidwLwGCsMy2laJ3g/94Sg== + dependencies: + clamp "^1.0.1" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +blueprintjs@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/blueprintjs/-/blueprintjs-0.0.8.tgz#557c692fc876ec0f94c001f15514379249cb3ce1" + integrity sha1-VXxpL8h27A+UwAHxVRQ3kknLPOE= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" + integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boundary-cells@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/boundary-cells/-/boundary-cells-2.0.1.tgz#e905a8d1419cf47cb36be3dbf525db5e24de0042" + integrity sha1-6QWo0UGc9Hyza+Pb9SXbXiTeAEI= + dependencies: + tape "^4.0.0" + +box-intersect@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/box-intersect/-/box-intersect-1.0.2.tgz#4693ad63e828868d0654b114e09364d6281f3fbd" + integrity sha512-yJeMwlmFPG1gIa7Rs/cGXeI6iOj6Qz5MG5PE61xLKpElUGzmJ4abm+qsLpzxKJFpsSDq742BQEocr8dI2t8Nxw== + dependencies: + bit-twiddle "^1.0.2" + typedarray-pool "^1.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" + integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.2" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +buble@^0.19.3: + version "0.19.8" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" + integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA== + dependencies: + acorn "^6.1.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.3" + minimist "^1.2.0" + os-homedir "^2.0.0" + regexpu-core "^4.5.4" + +buble@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.20.0.tgz#a143979a8d968b7f76b57f38f2e7ce7cfe938d1f" + integrity sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw== + dependencies: + acorn "^6.4.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.2.0" + chalk "^2.4.2" + magic-string "^0.25.7" + minimist "^1.2.5" + regexpu-core "4.5.4" + +bubleify@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bubleify/-/bubleify-1.2.1.tgz#c11fa33fa59d5b9b747d4e486f43889084257f37" + integrity sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ== + dependencies: + buble "^0.19.3" + +bubleify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bubleify/-/bubleify-2.0.0.tgz#6840d28e489c291c523f6691b26a95b92c535c7d" + integrity sha512-KikXZ8ADBJBENEkGA61zGznzz8Gy1GVzNCBBM2ipTHSpNolEZwafe0ZVcbcaVWpubS+5C/hd9MDLPc4bDQfohA== + dependencies: + buble "^0.20.0" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +canvas-fit@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/canvas-fit/-/canvas-fit-1.5.0.tgz#ae13be66ade42f5be0e487e345fce30a5e5b5e5f" + integrity sha1-rhO+Zq3kL1vg5IfjRfzjCl5bXl8= + dependencies: + element-size "^1.1.1" + +cdt2d@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cdt2d/-/cdt2d-1.0.0.tgz#4f212434bcd67bdb3d68b8fef4acdc2c54415141" + integrity sha1-TyEkNLzWe9s9aLj+9KzcLFRBUUE= + dependencies: + binary-search-bounds "^2.0.3" + robust-in-sphere "^1.1.3" + robust-orientation "^1.1.3" + +cell-orientation@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cell-orientation/-/cell-orientation-1.0.1.tgz#b504ad96a66ad286d9edd985a2253d03b80d2850" + integrity sha1-tQStlqZq0obZ7dmFoiU9A7gNKFA= + +chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chevrotain@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-6.5.0.tgz#dcbef415516b0af80fd423cc0d96b28d3f11374e" + integrity sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg== + dependencies: + regexp-to-ast "0.4.0" + +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" + integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chroma-js@^1.3.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-1.4.1.tgz#eb2d9c4d1ff24616be84b35119f4d26f8205f134" + integrity sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circumcenter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/circumcenter/-/circumcenter-1.0.0.tgz#20d7aa13b17fbac52f52da4f54c6ac8b906ee529" + integrity sha1-INeqE7F/usUvUtpPVMasi5Bu5Sk= + dependencies: + dup "^1.0.0" + robust-linear-solve "^1.0.0" + +circumradius@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/circumradius/-/circumradius-1.0.0.tgz#706c447e3e55cd1ed3d11bd133e37c252cc305b5" + integrity sha1-cGxEfj5VzR7T0RvRM+N8JSzDBbU= + dependencies: + circumcenter "^1.0.0" + +clamp@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" + integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ= + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.x: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-pslg@^1.1.0, clean-pslg@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/clean-pslg/-/clean-pslg-1.1.2.tgz#bd35c7460b7e8ab5a9f761a5ed51796aa3c86c11" + integrity sha1-vTXHRgt+irWp92Gl7VF5aqPIbBE= + dependencies: + big-rat "^1.0.3" + box-intersect "^1.0.1" + nextafter "^1.0.0" + rat-vec "^1.1.1" + robust-segment-intersect "^1.0.1" + union-find "^1.0.2" + uniq "^1.0.1" + +clean-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" + integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A== + dependencies: + "@types/webpack" "^4.4.31" + del "^4.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-alpha@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/color-alpha/-/color-alpha-1.0.4.tgz#c141dc926e95fc3db647d0e14e5bc3651c29e040" + integrity sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A== + dependencies: + color-parse "^1.3.8" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-id@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/color-id/-/color-id-1.1.0.tgz#5e9159b99a73ac98f74820cb98a15fde3d7e034c" + integrity sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g== + dependencies: + clamp "^1.0.1" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-normalize@1.5.0, color-normalize@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/color-normalize/-/color-normalize-1.5.0.tgz#ee610af9acb15daf73e77a945a847b18e40772da" + integrity sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw== + dependencies: + clamp "^1.0.1" + color-rgba "^2.1.1" + dtype "^2.0.0" + +color-parse@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.3.8.tgz#eaf54cd385cb34c0681f18c218aca38478082fa3" + integrity sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA== + dependencies: + color-name "^1.0.0" + defined "^1.0.0" + is-plain-obj "^1.1.0" + +color-rgba@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.1.1.tgz#4633b83817c7406c90b3d7bf4d1acfa48dde5c83" + integrity sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw== + dependencies: + clamp "^1.0.1" + color-parse "^1.3.8" + color-space "^1.14.6" + +color-space@^1.14.6: + version "1.16.0" + resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.16.0.tgz#611781bca41cd8582a1466fd9e28a7d3d89772a2" + integrity sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg== + dependencies: + hsluv "^0.0.3" + mumath "^3.3.4" + +colormap@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/colormap/-/colormap-2.3.1.tgz#9f2ab643591c0728d32332d5480b2487a4e0f249" + integrity sha512-TEzNlo/qYp6pBoR2SK9JiV+DG1cmUcVO/+DEJqVPSHIKNlWh5L5L4FYog7b/h0bAnhKhpOAvx/c1dFp2QE9sFw== + dependencies: + lerp "^1.0.3" + +commander@2, commander@^2.15.1, commander@^2.18.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@2.17.x: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-angle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/compare-angle/-/compare-angle-1.0.1.tgz#a4eb63416ea3c747fc6bd6c8b63668b4de4fa129" + integrity sha1-pOtjQW6jx0f8a9bItjZotN5PoSk= + dependencies: + robust-orientation "^1.0.2" + robust-product "^1.0.0" + robust-sum "^1.0.0" + signum "^0.0.0" + two-sum "^1.0.0" + +compare-cell@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/compare-cell/-/compare-cell-1.0.0.tgz#a9eb708f6e0e41aef7aa566b130f1968dc9e1aaa" + integrity sha1-qetwj24OQa73qlZrEw8ZaNyeGqo= + +compare-oriented-cell@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/compare-oriented-cell/-/compare-oriented-cell-1.0.1.tgz#6a149feef9dfc4f8fc62358e51dd42effbbdc39e" + integrity sha1-ahSf7vnfxPj8YjWOUd1C7/u9w54= + dependencies: + cell-orientation "^1.0.1" + compare-cell "^1.0.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-dims@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/compute-dims/-/compute-dims-1.1.0.tgz#6d5b712929b6c531af3b4d580ed5adacbbd77e0c" + integrity sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg== + dependencies: + utils-copy "^1.0.0" + validate.io-array "^1.0.6" + validate.io-matrix-like "^1.0.2" + validate.io-ndarray-like "^1.0.0" + validate.io-positive-integer "^1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +const-max-uint32@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/const-max-uint32/-/const-max-uint32-1.0.2.tgz#f009bb6230e678ed874dd2d6a9cd9e3cbfabb676" + integrity sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY= + +const-pinf-float64@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz#f6efb0d79f9c0986d3e79f2923abf9b70b63d726" + integrity sha1-9u+w15+cCYbT558pI6v5twtj1yY= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convex-hull@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/convex-hull/-/convex-hull-1.0.3.tgz#20a3aa6ce87f4adea2ff7d17971c9fc1c67e1fff" + integrity sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8= + dependencies: + affine-hull "^1.0.0" + incremental-convex-hull "^1.0.1" + monotone-convex-hull-2d "^1.0.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^3.6.4: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +country-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/country-regex/-/country-regex-1.1.0.tgz#51c333dcdf12927b7e5eeb9c10ac8112a6120896" + integrity sha1-UcMz3N8Sknt+XuucEKyBEqYSCJY= + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-react-context@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-font-size-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb" + integrity sha1-hUh1rOmspqjS7g00WkSq6btttss= + +css-font-stretch-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz#50cee9b9ba031fb5c952d4723139f1e107b54b10" + integrity sha1-UM7puboDH7XJUtRyMTnx4Qe1SxA= + +css-font-style-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz#5c3532813f63b4a1de954d13cea86ab4333409e4" + integrity sha1-XDUygT9jtKHelU0TzqhqtDM0CeQ= + +css-font-weight-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz#9bc04671ac85bc724b574ef5d3ac96b0d604fd97" + integrity sha1-m8BGcayFvHJLV07106yWsNYE/Zc= + +css-font@^1.0.0, css-font@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-font/-/css-font-1.2.0.tgz#e73cbdc11fd87c8e6c928ad7098a9771c8c2b6e3" + integrity sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA== + dependencies: + css-font-size-keywords "^1.0.0" + css-font-stretch-keywords "^1.0.1" + css-font-style-keywords "^1.0.1" + css-font-weight-keywords "^1.0.0" + css-global-keywords "^1.0.1" + css-system-font-keywords "^1.0.0" + pick-by-alias "^1.2.0" + string-split-by "^1.0.0" + unquote "^1.1.0" + +css-global-keywords@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69" + integrity sha1-cqmupyeW0Bmx0qMlLeTlqqN+Smk= + +css-loader@^3.4.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-system-font-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz#85c6f086aba4eb32c571a3086affc434b84823ed" + integrity sha1-hcbwhquk6zLFcaMIav/ENLhII+0= + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +csscolorparser@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +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== + +cubic-hermite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cubic-hermite/-/cubic-hermite-1.0.0.tgz#84e3b2f272b31454e8393b99bb6aed45168c14e5" + integrity sha1-hOOy8nKzFFToOTuZu2rtRRaMFOU= + +cwise-compiler@^1.0.0, cwise-compiler@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" + integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU= + dependencies: + uniq "^1.0.0" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d3-array@1, d3-array@^1.0.0, d3-array@^1.1.1, d3-array@^1.2.0, d3-array@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-array@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.0.1.tgz#375c02874fcd96c16ed9f1bcf5b4a7be53f358e7" + integrity sha1-N1wCh0/NlsFu2fG89bSnvlPzWOc= + +"d3-array@1.2.0 - 2": + version "2.5.0" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.5.0.tgz#d3f3043aabb75a17e2e78e3723aff4004ede3c5b" + integrity sha512-U+CrYn19GmiKeI9qU1RLV1p5ZodBKXw64k9Z3Id6d11LLuZ4JdyCnMT6W/2b84bvqEMFU15zg/JC3/oRYTanVg== + +d3-axis@1: + version "1.0.12" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.12.tgz#cdf20ba210cfbb43795af33756886fb3638daac9" + integrity sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ== + +d3-brush@1, d3-brush@^1.0.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.1.5.tgz#066b8e84d17b192986030446c97c0fba7e1bacdc" + integrity sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A== + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3-chord@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.6.tgz#309157e3f2db2c752f0280fedd35f2067ccbb15f" + integrity sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA== + dependencies: + d3-array "1" + d3-path "1" + +d3-collection@1, d3-collection@^1.0.4: + 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: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-contour@1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3" + integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg== + dependencies: + d3-array "^1.1.1" + +d3-dispatch@1, d3-dispatch@^1.0.1, d3-dispatch@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" + integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== + +d3-dispatch@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.1.tgz#4bd65a43cecff4318deb9df24552aa8bf281a840" + integrity sha1-S9ZaQ87P9DGN653yRVKqi/KBqEA= + +d3-drag@1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.5.tgz#2537f451acd39d31406677b7dc77c82f7d988f70" + integrity sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w== + dependencies: + d3-dispatch "1" + d3-selection "1" + +d3-dsv@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" + integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== + dependencies: + commander "2" + iconv-lite "0.4" + rw "1" + +d3-ease@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" + integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== + +d3-fetch@1, d3-fetch@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-1.2.0.tgz#15ce2ecfc41b092b1db50abd2c552c2316cf7fc7" + integrity sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA== + dependencies: + d3-dsv "1" + +d3-force@1, d3-force@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b" + integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg== + dependencies: + d3-collection "1" + d3-dispatch "1" + d3-quadtree "1" + d3-timer "1" + +d3-format@1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" + integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== + +d3-format@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.0.2.tgz#138618320b4bbeb43b5c0ff30519079fbbd7375e" + integrity sha1-E4YYMgtLvrQ7XA/zBRkHn7vXN14= + +d3-geo@1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f" + integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg== + dependencies: + d3-array "1" + +d3-hierarchy@1, d3-hierarchy@^1.1.9: + 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.4.0: + 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, d3-path@^1.0.0: + 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-polygon@1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.6.tgz#0bf8cb8180a6dc107f518ddf7975e12abbfbd38e" + integrity sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ== + +d3-quadtree@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" + integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== + +d3-random@1, d3-random@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.2.tgz#2833be7c124360bf9e2d3fd4f33847cfe6cab291" + integrity sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ== + +d3-scale-chromatic@1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz#54e333fc78212f439b14641fb55801dd81135a98" + integrity sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg== + dependencies: + d3-color "1" + d3-interpolate "1" + +d3-scale@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.3.tgz#4f9e8f0cc2ea0f3925ff04ac27adc09045fa4c90" + integrity sha1-T56PDMLqDzkl/wSsJ63AkEX6TJA= + dependencies: + d3-array "1" + d3-collection "1" + d3-color "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-scale@2: + 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@^1.0.0, d3-scale@^1.0.1, d3-scale@^1.0.3, d3-scale@^1.0.6: + 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" + 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-selection@1, d3-selection@^1.0.0, d3-selection@^1.0.2, d3-selection@^1.1.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" + integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== + +d3-selection@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.0.2.tgz#ae662afd4702ac9c5da039b2107a1764fa1c9070" + integrity sha1-rmYq/UcCrJxdoDmyEHoXZPockHA= + +d3-shape@1, d3-shape@^1.0.0, d3-shape@^1.0.3, d3-shape@^1.2.0, 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== + dependencies: + d3-path "1" + +d3-svg-legend@^2.25.6: + version "2.25.6" + resolved "https://registry.yarnpkg.com/d3-svg-legend/-/d3-svg-legend-2.25.6.tgz#8d8dc1bd693c378ee48b6f823e8a24e68f2e1ad2" + integrity sha1-jY3BvWk8N47ki2+CPook5o8uGtI= + dependencies: + "@types/d3-selection" "1.0.10" + d3-array "1.0.1" + d3-dispatch "1.0.1" + d3-format "1.0.2" + d3-scale "1.0.3" + d3-selection "1.0.2" + d3-transition "1.0.3" + +d3-time-format@2: + 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.0: + version "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: + 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== + +d3-transition@1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" + integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "^1.1.0" + d3-timer "1" + +d3-transition@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.0.3.tgz#91dc986bddb30973639320a85db72ce4ab1a27bb" + integrity sha1-kdyYa92zCXNjkyCoXbcs5KsaJ7s= + dependencies: + d3-color "1" + d3-dispatch "1" + d3-ease "1" + d3-interpolate "1" + d3-selection "1" + d3-timer "1" + +d3-voronoi@1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" + integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== + +d3-zoom@1: + version "1.8.3" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.8.3.tgz#b6a3dbe738c7763121cd05b8a7795ffe17f4fc0a" + integrity sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ== + dependencies: + d3-dispatch "1" + d3-drag "1" + d3-interpolate "1" + d3-selection "1" + d3-transition "1" + +d3@^3.5.17: + version "3.5.17" + resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" + integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= + +d3@^5.7.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.16.0.tgz#9c5e8d3b56403c79d4ed42fbd62f6113f199c877" + integrity sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw== + dependencies: + d3-array "1" + d3-axis "1" + d3-brush "1" + d3-chord "1" + d3-collection "1" + d3-color "1" + d3-contour "1" + d3-dispatch "1" + d3-drag "1" + d3-dsv "1" + d3-ease "1" + d3-fetch "1" + d3-force "1" + d3-format "1" + d3-geo "1" + d3-hierarchy "1" + d3-interpolate "1" + d3-path "1" + d3-polygon "1" + d3-quadtree "1" + d3-random "1" + d3-scale "2" + d3-scale-chromatic "1" + d3-selection "1" + d3-shape "1" + d3-time "1" + d3-time-format "2" + d3-timer "1" + d3-transition "1" + d3-voronoi "1" + d3-zoom "1" + +d3fc@14.0.40: + version "14.0.40" + resolved "https://registry.yarnpkg.com/d3fc/-/d3fc-14.0.40.tgz#568098ca3e220fac132c7a154299a858abae26ef" + integrity sha512-rThy0zNIEeWzmAkUshZJLU3ACNWvnP0o2qQyCuW/IXzAhRVuuLtGm4HnIA44+a4pFYbgGS6OSiZf5bCK/uVnUA== + dependencies: + "@d3fc/d3fc-annotation" "^2.4.0" + "@d3fc/d3fc-axis" "^2.2.0" + "@d3fc/d3fc-brush" "^2.0.37" + "@d3fc/d3fc-chart" "^2.5.9" + "@d3fc/d3fc-data-join" "^5.0.7" + "@d3fc/d3fc-discontinuous-scale" "^3.0.7" + "@d3fc/d3fc-element" "^5.2.2" + "@d3fc/d3fc-extent" "^3.1.3" + "@d3fc/d3fc-financial-feed" "^6.0.0" + "@d3fc/d3fc-group" "^2.0.6" + "@d3fc/d3fc-label-layout" "^6.0.7" + "@d3fc/d3fc-pointer" "^2.0.7" + "@d3fc/d3fc-random-data" "^3.0.7" + "@d3fc/d3fc-rebind" "^5.0.6" + "@d3fc/d3fc-sample" "^4.0.7" + "@d3fc/d3fc-series" "^4.0.17" + "@d3fc/d3fc-shape" "^5.0.7" + "@d3fc/d3fc-technical-indicator" "^7.0.23" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +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" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-equal@^1.0.1, deep-equal@^1.1.1, deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0, defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delaunay-triangulate@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/delaunay-triangulate/-/delaunay-triangulate-1.1.6.tgz#5bbca21b078198d4bc3c75796a35cbb98c25954c" + integrity sha1-W7yiGweBmNS8PHV5ajXLuYwllUw= + dependencies: + incremental-convex-hull "^1.0.1" + uniq "^1.0.1" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-kerning@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-kerning/-/detect-kerning-2.1.2.tgz#4ecd548e4a5a3fc880fe2a50609312d000fa9fc2" + integrity sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw== + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detectie@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detectie/-/detectie-1.0.0.tgz#66b2cae2236d4d29ef71161180957bf89fbe535d" + integrity sha1-ZrLK4iNtTSnvcRYRgJV7+J++U10= + +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + 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" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom4@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.5.tgz#f98a94eb67b340f0fa5b42b0ee9c38cda035428e" + integrity sha512-gJbnVGq5zaBUY0lUh0LUEVGYrtN75Ks8ZwpwOYvnVFrKy/qzXK4R/1WuLIFExWj/tBxbRAkTzZUGJHXmqsBNjQ== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +double-bits@^1.1.0, double-bits@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/double-bits/-/double-bits-1.1.1.tgz#58abba45494da4d0fa36b73ad11a286c9184b1c6" + integrity sha1-WKu6RUlNpND6Nrc60RoobJGEscY= + +draw-svg-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/draw-svg-path/-/draw-svg-path-1.0.0.tgz#6f116d962dd314b99ea534d6f58dd66cdbd69379" + integrity sha1-bxFtli3TFLmepTTW9Y3WbNvWk3k= + dependencies: + abs-svg-path "~0.1.1" + normalize-svg-path "~0.1.0" + +dtype@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434" + integrity sha1-zQUjI84GFETs0uj1dI9popvihDQ= + +dup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dup/-/dup-1.0.0.tgz#51fc5ac685f8196469df0b905e934b20af5b4029" + integrity sha1-UfxaxoX4GWRp3wuQXpNLIK9bQCk= + +duplexify@^3.4.2, duplexify@^3.4.5, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +earcut@^2.1.5, earcut@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" + integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== + +edges-to-adjacency-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/edges-to-adjacency-list/-/edges-to-adjacency-list-1.0.0.tgz#c146d2e084addfba74a51293c6e0199a49f757f1" + integrity sha1-wUbS4ISt37p0pRKTxuAZmkn3V/E= + dependencies: + uniq "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +element-size@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/element-size/-/element-size-1.1.1.tgz#64e5f159d97121631845bcbaecaf279c39b5e34e" + integrity sha1-ZOXxWdlxIWMYRby67K8nnDm1404= + +elementary-circuits-directed-graph@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.2.0.tgz#c6507f42566507c646b5bb144b892fbce1656371" + integrity sha512-eOQofnrNqebPtC29PvyNMGUBdMrIw5i8nOoC/2VOlSF84tf5+ZXnRkIk7TgdT22jFXK68CC7aA881KRmNYf/Pg== + dependencies: + strongly-connected-components "^1.0.1" + +elliptic@^6.0.0, elliptic@^6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +email-addresses@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" + integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +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" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.11.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-frustum-planes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/extract-frustum-planes/-/extract-frustum-planes-1.0.0.tgz#97d5703ff0564c8c3c6838cac45f9e7bc52c9ef5" + integrity sha1-l9VwP/BWTIw8aDjKxF+ee8UsnvU= + +falafel@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.4.tgz#b5d86c060c2412a43166243cb1bce44d1abd2819" + integrity sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ== + dependencies: + acorn "^7.1.1" + foreach "^2.0.5" + isarray "^2.0.1" + object-keys "^1.0.6" + +fast-deep-equal@^3.1.1: + 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-isnumeric@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz#e165786ff471c439e9ace2b8c8e66cceb47e2ea4" + integrity sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw== + dependencies: + is-string-blank "^1.0.1" + +fast-json-stable-stringify@^2.0.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== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-loader@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.1.0.tgz#cb56c070efc0e40666424309bd0d9e45ac6f2bb8" + integrity sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg== + dependencies: + loader-utils "^1.4.0" + schema-utils "^2.5.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filename-reserved-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" + integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q= + +filenamify-url@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" + integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A= + dependencies: + filenamify "^1.0.0" + humanize-url "^1.0.0" + +filenamify@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" + integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU= + dependencies: + filename-reserved-regex "^1.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +filtered-vector@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/filtered-vector/-/filtered-vector-1.2.4.tgz#56453c034df4302d293ca8ecdeac3f90abc678d3" + integrity sha1-VkU8A030MC0pPKjs3qw/kKvGeNM= + dependencies: + binary-search-bounds "^1.0.0" + cubic-hermite "^1.0.0" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flatbuffers@^1.10.2: + version "1.12.0" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" + integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== + +flatten-vertex-data@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219" + integrity sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw== + dependencies: + dtype "^2.0.0" + +flip-pixels@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flip-pixels/-/flip-pixels-1.0.2.tgz#aad7b7d9fc65932d5f27e2e4dac4b494140845e4" + integrity sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" + integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== + +font-atlas@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/font-atlas/-/font-atlas-2.1.0.tgz#aa2d6dcf656a6c871d66abbd3dfbea2f77178348" + integrity sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg== + dependencies: + css-font "^1.0.0" + +font-measure@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/font-measure/-/font-measure-1.2.2.tgz#41dbdac5d230dbf4db08865f54da28a475e83026" + integrity sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA== + dependencies: + css-font "^1.2.0" + +for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +fork-ts-checker-webpack-plugin@^4.0.4: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0, from2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1, function-bind@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gamma@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/gamma/-/gamma-0.1.0.tgz#3315643403bf27906ca80ab37c36ece9440ef330" + integrity sha1-MxVkNAO/J5BsqAqzfDbs6UQO8zA= + +geojson-vt@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-canvas-context@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-canvas-context/-/get-canvas-context-1.0.2.tgz#d6e7b50bc4e4c86357cd39f22647a84b73601e93" + integrity sha1-1ue1C8TkyGNXzTnyJkeoS3NgHpM= + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +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-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +gh-pages@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.2.0.tgz#74ebeaca8d2b9a11279dcbd4a39ddfff3e6caa24" + integrity sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA== + dependencies: + async "^2.6.1" + commander "^2.18.0" + email-addresses "^3.0.1" + filenamify-url "^1.0.0" + fs-extra "^8.1.0" + globby "^6.1.0" + +gl-axes3d@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/gl-axes3d/-/gl-axes3d-1.5.3.tgz#47e3dd6c21356a59349910ec01af58e28ea69fe9" + integrity sha512-KRYbguKQcDQ6PcB9g1pgqB8Ly4TY1DQODpPKiDTasyWJ8PxQk0t2Q7XoQQijNqvsguITCpVVCzNb5GVtIWiVlQ== + dependencies: + bit-twiddle "^1.0.2" + dup "^1.0.0" + extract-frustum-planes "^1.0.0" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-state "^1.0.0" + gl-vao "^1.3.0" + gl-vec4 "^1.0.1" + glslify "^7.0.0" + robust-orientation "^1.1.3" + split-polygon "^1.0.0" + vectorize-text "^3.2.1" + +gl-buffer@^2.1.1, gl-buffer@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/gl-buffer/-/gl-buffer-2.1.2.tgz#2db8d9c1a5527fba0cdb91289c206e882b889cdb" + integrity sha1-LbjZwaVSf7oM25EonCBuiCuInNs= + dependencies: + ndarray "^1.0.15" + ndarray-ops "^1.1.0" + typedarray-pool "^1.0.0" + +gl-cone3d@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/gl-cone3d/-/gl-cone3d-1.5.2.tgz#66af5c33b7d5174034dfa3654a88e995998d92bc" + integrity sha512-1JNeHH4sUtUmDA4ZK7Om8/kShwb8IZVAsnxaaB7IPRJsNGciLj1sTpODrJGeMl41RNkex5kXD2SQFrzyEAR2Rw== + dependencies: + colormap "^2.3.1" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + gl-vec3 "^1.1.3" + glsl-inverse "^1.0.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + ndarray "^1.0.18" + +gl-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-constants/-/gl-constants-1.0.0.tgz#597a504e364750ff50253aa35f8dea7af4a5d233" + integrity sha1-WXpQTjZHUP9QJTqjX43qevSl0jM= + +gl-contour2d@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/gl-contour2d/-/gl-contour2d-1.1.7.tgz#ca330cf8449673a9ca0b3f6726c83f8d35c7a50c" + integrity sha512-GdebvJ9DtT3pJDpoE+eU2q+Wo9S3MijPpPz5arZbhK85w2bARmpFpVfPaDlZqWkB644W3BlH8TVyvAo1KE4Bhw== + dependencies: + binary-search-bounds "^2.0.4" + cdt2d "^1.0.0" + clean-pslg "^1.1.2" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + iota-array "^1.0.0" + ndarray "^1.0.18" + surface-nets "^1.0.2" + +gl-error3d@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/gl-error3d/-/gl-error3d-1.0.16.tgz#88a94952f5303d9cf5cb86806789a360777c5446" + integrity sha512-TGJewnKSp7ZnqGgG3XCF9ldrDbxZrO+OWlx6oIet4OdOM//n8xJ5isArnIV/sdPJnFbhfoLxWrW9f5fxHFRQ1A== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + +gl-fbo@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/gl-fbo/-/gl-fbo-2.0.5.tgz#0fa75a497cf787695530691c8f04abb6fb55fa22" + integrity sha1-D6daSXz3h2lVMGkcjwSrtvtV+iI= + dependencies: + gl-texture2d "^2.0.0" + +gl-format-compiler-error@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/gl-format-compiler-error/-/gl-format-compiler-error-1.0.3.tgz#0c79b1751899ce9732e86240f090aa41e98471a8" + integrity sha1-DHmxdRiZzpcy6GJA8JCqQemEcag= + dependencies: + add-line-numbers "^1.0.1" + gl-constants "^1.0.0" + glsl-shader-name "^1.0.0" + sprintf-js "^1.0.3" + +gl-heatmap2d@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/gl-heatmap2d/-/gl-heatmap2d-1.1.0.tgz#01e52a62ae2154e775ab362850235789af44cefe" + integrity sha512-0FLXyxv6UBCzzhi4Q2u+9fUs6BX1+r5ZztFe27VikE9FUVw7hZiuSHmgDng92EpydogcSYHXCIK8+58RagODug== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + iota-array "^1.0.0" + typedarray-pool "^1.2.0" + +gl-line3d@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gl-line3d/-/gl-line3d-1.2.1.tgz#632fc5b931a84a315995322b271aaf497e292609" + integrity sha512-eeb0+RI2ZBRqMYJK85SgsRiJK7c4aiOjcnirxv0830A3jmOc99snY3AbPcV8KvKmW0Yaf3KA4e+qNCbHiTOTnA== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + ndarray "^1.0.18" + +gl-mat3@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-mat3/-/gl-mat3-1.0.0.tgz#89633219ca429379a16b9185d95d41713453b912" + integrity sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI= + +gl-mat4@^1.0.1, gl-mat4@^1.0.2, gl-mat4@^1.0.3, gl-mat4@^1.1.2, gl-mat4@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26" + integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA== + +gl-matrix@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" + integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== + +gl-mesh3d@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/gl-mesh3d/-/gl-mesh3d-2.3.1.tgz#087a93c5431df923570ca51cfc691bab0d21a6b8" + integrity sha512-pXECamyGgu4/9HeAQSE5OEUuLBGS1aq9V4BCsTcxsND4fNLaajEkYKUz/WY2QSYElqKdsMBVsldGiKRKwlybqA== + dependencies: + barycentric "^1.0.1" + colormap "^2.3.1" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + ndarray "^1.0.18" + normals "^1.1.0" + polytope-closest-point "^1.0.0" + simplicial-complex-contour "^1.0.2" + typedarray-pool "^1.1.0" + +gl-plot2d@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/gl-plot2d/-/gl-plot2d-1.4.5.tgz#6412b8b3f8df3e7d89c5955daac7059e04d657d4" + integrity sha512-6GmCN10SWtV+qHFQ1gjdnVubeHFVsm6P4zmo0HrPIl9TcdePCUHDlBKWAuE6XtFhiMKMj7R8rApOX8O8uXUYog== + dependencies: + binary-search-bounds "^2.0.4" + gl-buffer "^2.1.2" + gl-select-static "^2.0.7" + gl-shader "^4.2.1" + glsl-inverse "^1.0.0" + glslify "^7.0.0" + text-cache "^4.2.2" + +gl-plot3d@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/gl-plot3d/-/gl-plot3d-2.4.6.tgz#69518759c473e3a8c1c76974472836f6500daf50" + integrity sha512-CkrNvDKu0p74Di2g2Oc9kU+s1Oe+wi4cIfHzXABp8DvfoRl0/bayqJ9q8EcRAqMeQQxQZYGvJkk4hlBwI758Jw== + dependencies: + "3d-view" "^2.0.0" + a-big-triangle "^1.0.3" + gl-axes3d "^1.5.3" + gl-fbo "^2.0.5" + gl-mat4 "^1.2.0" + gl-select-static "^2.0.7" + gl-shader "^4.2.1" + gl-spikes3d "^1.0.10" + glslify "^7.0.0" + has-passive-events "^1.0.0" + is-mobile "^2.2.1" + mouse-change "^1.4.0" + mouse-event-offset "^3.0.2" + mouse-wheel "^1.2.0" + ndarray "^1.0.19" + right-now "^1.0.0" + +gl-pointcloud2d@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/gl-pointcloud2d/-/gl-pointcloud2d-1.0.3.tgz#f37e215f21ccb2e17f0604664e99fc3d6a4e611d" + integrity sha512-OS2e1irvJXVRpg/GziXj10xrFJm9kkRfFoB6BLUvkjCQV7ZRNNcs2CD+YSK1r0gvMwTg2T3lfLM3UPwNtz+4Xw== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + typedarray-pool "^1.1.0" + +gl-quat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-quat/-/gl-quat-1.0.0.tgz#0945ec923386f45329be5dc357b1c8c2d47586c5" + integrity sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU= + dependencies: + gl-mat3 "^1.0.0" + gl-vec3 "^1.0.3" + gl-vec4 "^1.0.0" + +gl-scatter3d@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/gl-scatter3d/-/gl-scatter3d-1.2.3.tgz#83d63700ec2fe4e95b3d1cd613e86de9a6b5f603" + integrity sha512-nXqPlT1w5Qt51dTksj+DUqrZqwWAEWg0PocsKcoDnVNv0X8sGA+LBZ0Y+zrA+KNXUL0PPCX9WR9cF2uJAZl1Sw== + dependencies: + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glslify "^7.0.0" + is-string-blank "^1.0.1" + typedarray-pool "^1.1.0" + vectorize-text "^3.2.1" + +gl-select-box@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/gl-select-box/-/gl-select-box-1.0.4.tgz#47c11caa2b84f81e8bbfde08c6e39eeebb53d3d8" + integrity sha512-mKsCnglraSKyBbQiGq0Ila0WF+m6Tr+EWT2yfaMn/Sh9aMHq5Wt0F/l6Cf/Ed3CdERq5jHWAY5yxLviZteYu2w== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + glslify "^7.0.0" + +gl-select-static@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/gl-select-static/-/gl-select-static-2.0.7.tgz#ce7eb05ae0139009c15e2d2d0d731600b3dae5c0" + integrity sha512-OvpYprd+ngl3liEatBTdXhSyNBjwvjMSvV2rN0KHpTU+BTi4viEETXNZXFgGXY37qARs0L28ybk3UQEW6C5Nnw== + dependencies: + bit-twiddle "^1.0.2" + gl-fbo "^2.0.5" + ndarray "^1.0.18" + typedarray-pool "^1.1.0" + +gl-shader@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/gl-shader/-/gl-shader-4.2.1.tgz#bc9b808e9293c51b668e88de615b0c113708dc2f" + integrity sha1-vJuAjpKTxRtmjojeYVsMETcI3C8= + dependencies: + gl-format-compiler-error "^1.0.2" + weakmap-shim "^1.1.0" + +gl-spikes2d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/gl-spikes2d/-/gl-spikes2d-1.0.2.tgz#ef8dbcff6c7451dec2b751d7a3c593d09ad5457f" + integrity sha512-QVeOZsi9nQuJJl7NB3132CCv5KA10BWxAY2QgJNsKqbLsG53B/TrGJpjIAohnJftdZ4fT6b3ZojWgeaXk8bOOA== + +gl-spikes3d@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/gl-spikes3d/-/gl-spikes3d-1.0.10.tgz#e3b2b677a6f51750f23c064447af4f093da79305" + integrity sha512-lT3xroowOFxMvlhT5Mof76B2TE02l5zt/NIWljhczV2FFHgIVhA4jMrd5dIv1so1RXMBDJIKu0uJI3QKliDVLg== + dependencies: + gl-buffer "^2.1.2" + gl-shader "^4.2.1" + gl-vao "^1.3.0" + glslify "^7.0.0" + +gl-state@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gl-state/-/gl-state-1.0.0.tgz#262faa75835b0b9c532c12f38adc425d1d30cd17" + integrity sha1-Ji+qdYNbC5xTLBLzitxCXR0wzRc= + dependencies: + uniq "^1.0.0" + +gl-streamtube3d@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/gl-streamtube3d/-/gl-streamtube3d-1.4.1.tgz#bd2b725e00aa96989ce34b06ebf66a76f93e35ae" + integrity sha512-rH02v00kgwgdpkXVo7KsSoPp38bIAYR9TE1iONjcQ4cQAlDhrGRauqT/P5sUaOIzs17A2DxWGcXM+EpNQs9pUA== + dependencies: + gl-cone3d "^1.5.2" + gl-vec3 "^1.1.3" + gl-vec4 "^1.0.1" + glsl-inverse "^1.0.0" + glsl-out-of-range "^1.0.4" + glsl-specular-cook-torrance "^2.0.1" + glslify "^7.0.0" + +gl-surface3d@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/gl-surface3d/-/gl-surface3d-1.5.2.tgz#a283b98d3473fca4e8552f0f6ac40a6f0dc88b00" + integrity sha512-rWSQwEQDkB0T5CDEDFJwJc4VgwwJaAyFRSJ92NJlrTSwDlsEsWdzG9+APx6FWJMwkOpIoZGWqv+csswK2kMMLQ== + dependencies: + binary-search-bounds "^2.0.4" + bit-twiddle "^1.0.2" + colormap "^2.3.1" + dup "^1.0.0" + gl-buffer "^2.1.2" + gl-mat4 "^1.2.0" + gl-shader "^4.2.1" + gl-texture2d "^2.1.0" + gl-vao "^1.3.0" + glsl-out-of-range "^1.0.4" + glsl-specular-beckmann "^1.1.2" + glslify "^7.0.0" + ndarray "^1.0.18" + ndarray-gradient "^1.0.0" + ndarray-ops "^1.2.2" + ndarray-pack "^1.2.1" + ndarray-scratch "^1.2.0" + surface-nets "^1.0.2" + typedarray-pool "^1.1.0" + +gl-text@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.1.8.tgz#67a19bec72915acc422300aad8f727a09f98b550" + integrity sha512-whnq9DEFYbW92C4ONwk2eT0YkzmVPHoADnEtuzMOmit87XhgAhBrNs3lK9EgGjU/MoWYvlF6RkI8Kl7Yuo1hUw== + dependencies: + bit-twiddle "^1.0.2" + color-normalize "^1.5.0" + css-font "^1.2.0" + detect-kerning "^2.1.2" + es6-weak-map "^2.0.3" + flatten-vertex-data "^1.0.2" + font-atlas "^2.1.0" + font-measure "^1.2.2" + gl-util "^3.1.2" + is-plain-obj "^1.1.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + parse-unit "^1.0.1" + pick-by-alias "^1.2.0" + regl "^1.3.11" + to-px "^1.0.1" + typedarray-pool "^1.1.0" + +gl-texture2d@^2.0.0, gl-texture2d@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/gl-texture2d/-/gl-texture2d-2.1.0.tgz#ff6824e7e7c31a8ba6fdcdbe9e5c695d7e2187c7" + integrity sha1-/2gk5+fDGoum/c2+nlxpXX4hh8c= + dependencies: + ndarray "^1.0.15" + ndarray-ops "^1.2.2" + typedarray-pool "^1.1.0" + +gl-util@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/gl-util/-/gl-util-3.1.3.tgz#1e9a724f844b802597c6e30565d4c1e928546861" + integrity sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA== + dependencies: + is-browser "^2.0.1" + is-firefox "^1.0.3" + is-plain-obj "^1.1.0" + number-is-integer "^1.0.1" + object-assign "^4.1.0" + pick-by-alias "^1.2.0" + weak-map "^1.0.5" + +gl-vao@^1.2.0, gl-vao@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/gl-vao/-/gl-vao-1.3.0.tgz#e9e92aa95588cab9d5c2f04b693440c3df691923" + integrity sha1-6ekqqVWIyrnVwvBLaTRAw99pGSM= + +gl-vec3@^1.0.2, gl-vec3@^1.0.3, gl-vec3@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826" + integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw== + +gl-vec4@^1.0.0, gl-vec4@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gl-vec4/-/gl-vec4-1.0.1.tgz#97d96878281b14b532cbce101785dfd1cb340964" + integrity sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +glsl-inject-defines@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4" + integrity sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q= + dependencies: + glsl-token-inject-block "^1.0.0" + glsl-token-string "^1.0.1" + glsl-tokenizer "^2.0.2" + +glsl-inverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-inverse/-/glsl-inverse-1.0.0.tgz#12c0b1d065f558444d1e6feaf79b5ddf8a918ae6" + integrity sha1-EsCx0GX1WERNHm/q95td34qRiuY= + +glsl-out-of-range@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/glsl-out-of-range/-/glsl-out-of-range-1.0.4.tgz#3d73d083bc9ecc73efd45dfc7063c29e92c9c873" + integrity sha512-fCcDu2LCQ39VBvfe1FbhuazXEf0CqMZI9OYXrYlL6uUARG48CTAbL04+tZBtVM0zo1Ljx4OLu2AxNquq++lxWQ== + +glsl-resolve@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3" + integrity sha1-iUvvc5ENeSyBtRQxgANdCnivdtM= + dependencies: + resolve "^0.6.1" + xtend "^2.1.2" + +glsl-shader-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-shader-name/-/glsl-shader-name-1.0.0.tgz#a2c30b3ba73499befb0cc7184d7c7733dd4b487d" + integrity sha1-osMLO6c0mb77DMcYTXx3M91LSH0= + dependencies: + atob-lite "^1.0.0" + glsl-tokenizer "^2.0.2" + +glsl-specular-beckmann@^1.1.1, glsl-specular-beckmann@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-specular-beckmann/-/glsl-specular-beckmann-1.1.2.tgz#fce9056933ecdf2456278376a54d082893e775f1" + integrity sha1-/OkFaTPs3yRWJ4N2pU0IKJPndfE= + +glsl-specular-cook-torrance@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/glsl-specular-cook-torrance/-/glsl-specular-cook-torrance-2.0.1.tgz#a891cc06c8c7b4f4728702b4824fdacbb967d78f" + integrity sha1-qJHMBsjHtPRyhwK0gk/ay7ln148= + dependencies: + glsl-specular-beckmann "^1.1.1" + +glsl-token-assignments@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f" + integrity sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8= + +glsl-token-defines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d" + integrity sha1-y4kqqVmTYjFyhHDU90AySJaX+p0= + dependencies: + glsl-tokenizer "^2.0.0" + +glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84" + integrity sha1-I8XjDuK9JViEtKKLyFC495HpXYQ= + +glsl-token-descope@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076" + integrity sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY= + dependencies: + glsl-token-assignments "^2.0.0" + glsl-token-depth "^1.1.0" + glsl-token-properties "^1.0.0" + glsl-token-scope "^1.1.0" + +glsl-token-inject-block@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034" + integrity sha1-4QFfWYDBCRgkraomJfHf3ovQADQ= + +glsl-token-properties@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e" + integrity sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4= + +glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1" + integrity sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E= + +glsl-token-string@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec" + integrity sha1-WUQdL4V958NEnJRWZgIezjWOSOw= + +glsl-token-whitespace-trim@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10" + integrity sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA= + +glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" + integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== + dependencies: + through2 "^0.6.3" + +glslify-bundle@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glslify-bundle/-/glslify-bundle-5.1.1.tgz#30d2ddf2e6b935bf44d1299321e3b729782c409a" + integrity sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A== + dependencies: + glsl-inject-defines "^1.0.1" + glsl-token-defines "^1.0.0" + glsl-token-depth "^1.1.1" + glsl-token-descope "^1.0.2" + glsl-token-scope "^1.1.1" + glsl-token-string "^1.0.1" + glsl-token-whitespace-trim "^1.0.0" + glsl-tokenizer "^2.0.2" + murmurhash-js "^1.0.0" + shallow-copy "0.0.1" + +glslify-deps@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/glslify-deps/-/glslify-deps-1.3.1.tgz#dfa6962322454a91ecc4de25b5e710415b0c89ad" + integrity sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg== + dependencies: + "@choojs/findup" "^0.2.0" + events "^1.0.2" + glsl-resolve "0.0.1" + glsl-tokenizer "^2.0.0" + graceful-fs "^4.1.2" + inherits "^2.0.1" + map-limit "0.0.1" + resolve "^1.0.0" + +glslify@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/glslify/-/glslify-7.0.0.tgz#10d5db9541ee07c6548ea55c679edda20307653d" + integrity sha512-yw8jDQIe9FlSH5NiZEqSAsCPj9HI7nhXgXLAgSv2Nm9eBPsFJmyN9+rNwbiozJapcj9xtc/71rMYlN9cxp1B8Q== + dependencies: + bl "^1.0.0" + concat-stream "^1.5.2" + duplexify "^3.4.5" + falafel "^2.1.0" + from2 "^2.3.0" + glsl-resolve "0.0.1" + glsl-token-whitespace-trim "^1.0.0" + glslify-bundle "^5.0.0" + glslify-deps "^1.2.5" + minimist "^1.2.0" + resolve "^1.1.5" + stack-trace "0.0.9" + static-eval "^2.0.0" + through2 "^2.0.1" + xtend "^4.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gradient-parser@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/gradient-parser/-/gradient-parser-0.1.5.tgz#0c7e2179559e5ce7d8d71f4423af937100b2248c" + integrity sha1-DH4heVWeXOfY1x9EI6+TcQCyJIw= + +grid-index@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" + integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== + +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-hover@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-hover/-/has-hover-1.0.1.tgz#3d97437aeb199c62b8ac08acbdc53d3bc52c17f7" + integrity sha1-PZdDeusZnGK4rAisvcU9O8UsF/c= + dependencies: + is-browser "^2.0.1" + +has-passive-events@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-passive-events/-/has-passive-events-1.0.0.tgz#75fc3dc6dada182c58f24ebbdc018276d1ea3515" + integrity sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw== + dependencies: + is-browser "^2.0.1" + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3, has@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsluv@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-0.0.3.tgz#829107dafb4a9f8b52a1809ed02e091eade6754c" + integrity sha1-gpEH2vtKn4tSoYCe0C4JHq3mdUw= + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-minifier@^3.2.3: + version "3.5.21" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.2.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +humanize-url@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" + integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= + dependencies: + normalize-url "^1.0.0" + strip-url-auth "^1.0.0" + +iconv-lite@0.4, iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.2.tgz#af6d628dccfb463b7364d97f715e4b74b8c8c2b8" + integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.12, ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +image-palette@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/image-palette/-/image-palette-2.1.0.tgz#d976525a1df75964ca125d2dba2741e92905547f" + integrity sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ== + dependencies: + color-id "^1.1.0" + pxls "^2.0.0" + quantize "^1.0.2" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +incremental-convex-hull@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz#51428c14cb9d9a6144bfe69b2851fb377334be1e" + integrity sha1-UUKMFMudmmFEv+abKFH7N3M0vh4= + dependencies: + robust-orientation "^1.1.2" + simplicial-complex "^1.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +interval-tree-1d@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interval-tree-1d/-/interval-tree-1d-1.0.3.tgz#8fdbde02b6b2c7dbdead636bcbed8e08710d85c1" + integrity sha1-j9veArayx9verWNry+2OCHENhcE= + dependencies: + binary-search-bounds "^1.0.0" + +invert-permutation@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-permutation/-/invert-permutation-1.0.0.tgz#a0a78042eadb36bc17551e787efd1439add54933" + integrity sha1-oKeAQurbNrwXVR54fv0UOa3VSTM= + +iota-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" + integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-base64@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-0.1.0.tgz#a6f20610c6ef4863a51cba32bc0222544b932622" + integrity sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-blob@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385" + integrity sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw== + +is-browser@^2.0.1, is-browser@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9" + integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ== + +is-buffer@^1.0.2, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-firefox@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-firefox/-/is-firefox-1.0.3.tgz#2a2a1567783a417f6e158323108f3861b0918562" + integrity sha1-KioVZ3g6QX9uFYMjEI84YbCRhWI= + +is-float-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-float-array/-/is-float-array-1.0.0.tgz#96d67b1cbadf47ab1e05be208933acd386978a09" + integrity sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-iexplorer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-iexplorer/-/is-iexplorer-1.0.0.tgz#1d72bc66d3fe22eaf6170dda8cf10943248cfc76" + integrity sha1-HXK8ZtP+Iur2Fw3ajPEJQySM/HY= + +is-mobile@^2.2.1, is-mobile@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.2.tgz#f6c9c5d50ee01254ce05e739bdd835f1ed4e9954" + integrity sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regex@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +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= + +is-string-blank@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-string-blank/-/is-string-blank-1.0.1.tgz#866dca066d41d2894ebdfd2d8fe93e586e583a03" + integrity sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw== + +is-svg-path@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-svg-path/-/is-svg-path-1.0.2.tgz#77ab590c12b3d20348e5c7a13d0040c87784dda0" + integrity sha1-d6tZDBKz0gNI5cehPQBAyHeE3aA= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +just-extend@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" + integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA== + +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +lerp@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/lerp/-/lerp-1.0.3.tgz#a18c8968f917896de15ccfcc28d55a6b731e776e" + integrity sha1-oYyJaPkXiW3hXM/MKNVaa3Med24= + +less-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719" + integrity sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg== + dependencies: + clone "^2.1.2" + less "^3.11.3" + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +less@^3.11.3: + version "3.12.2" + resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4" + integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q== + dependencies: + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + +lit-html@^1.1.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.2.1.tgz#1fb933dc1e2ddc095f60b8086277d4fcd9d62cc8" + integrity sha512-GSJHHXMGLZDzTRq59IUfL9FCdAlGfqNp/dEa7k7aBaaWD+JKaCjsAk9KYm2V12ItonVaYx2dprN66Zdm1AuBTQ== + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +lolex@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" + integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== + +lolex@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lzma@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/lzma/-/lzma-2.3.2.tgz#3783b24858b9c0e747a0df3cbf1fb5fcaa92c441" + integrity sha1-N4OySFi5wOdHoN88vx+1/KqSxEE= + +magic-string@^0.25.3, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-limit@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" + integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + dependencies: + once "~1.3.0" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mapbox-gl@1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.10.1.tgz#7dbd53bdf2f78e45e125c1115e94dea286ef663c" + integrity sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg== + dependencies: + "@mapbox/geojson-rewind" "^0.5.0" + "@mapbox/geojson-types" "^1.0.2" + "@mapbox/jsonlint-lines-primitives" "^2.0.2" + "@mapbox/mapbox-gl-supported" "^1.5.0" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.1" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.3" + earcut "^2.2.2" + geojson-vt "^3.2.1" + gl-matrix "^3.2.1" + grid-index "^1.1.0" + minimist "^1.2.5" + murmurhash-js "^1.0.0" + pbf "^3.2.1" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^7.0.0" + tinyqueue "^2.0.3" + vt-pbf "^3.1.1" + +marching-simplex-table@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/marching-simplex-table/-/marching-simplex-table-1.0.0.tgz#bc16256e0f8f9b558aa9b2872f8832d9433f52ea" + integrity sha1-vBYlbg+Pm1WKqbKHL4gy2UM/Uuo= + dependencies: + convex-hull "^1.0.3" + +mat4-decompose@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-decompose/-/mat4-decompose-1.0.4.tgz#65eb4fe39d70878f7a444eb4624d52f7e7eb2faf" + integrity sha1-ZetP451wh496RE60Yk1S9+frL68= + dependencies: + gl-mat4 "^1.0.1" + gl-vec3 "^1.0.2" + +mat4-interpolate@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-interpolate/-/mat4-interpolate-1.0.4.tgz#55ffe9eb3c35295e2c0d5a9f7725d9068a89ff74" + integrity sha1-Vf/p6zw1KV4sDVqfdyXZBoqJ/3Q= + dependencies: + gl-mat4 "^1.0.1" + gl-vec3 "^1.0.2" + mat4-decompose "^1.0.3" + mat4-recompose "^1.0.3" + quat-slerp "^1.0.0" + +mat4-recompose@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mat4-recompose/-/mat4-recompose-1.0.4.tgz#3953c230ff2473dc772ee014a52c925cf81b0e4d" + integrity sha1-OVPCMP8kc9x3LuAUpSySXPgbDk0= + dependencies: + gl-mat4 "^1.0.1" + +math-log2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-log2/-/math-log2-1.0.1.tgz#fb8941be5f5ebe8979e718e6273b178e58694565" + integrity sha1-+4lBvl9evol55xjmJzsXjlhpRWU= + +matrix-camera-controller@^2.1.1, matrix-camera-controller@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/matrix-camera-controller/-/matrix-camera-controller-2.1.3.tgz#35e5260cc1cd550962ba799f2d8d4e94b1a39370" + integrity sha1-NeUmDMHNVQliunmfLY1OlLGjk3A= + dependencies: + binary-search-bounds "^1.0.0" + gl-mat4 "^1.1.2" + gl-vec3 "^1.0.3" + mat4-interpolate "^1.0.3" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +messagepack@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/messagepack/-/messagepack-1.1.10.tgz#32c2f4cb6d4083e36bf76f4a119d43e1437c6b91" + integrity sha512-5HhMQA1Elhz0tPWgArefRAekLn00vE+1dLLn4Zjza6gktmvYil5rqKBXQzMExaAGbNxLDxC0VtZMuVoJ2XjNzQ== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mobile-drag-drop@^2.3.0-rc.2: + version "2.3.0-rc.2" + resolved "https://registry.yarnpkg.com/mobile-drag-drop/-/mobile-drag-drop-2.3.0-rc.2.tgz#00d6e85e04512a620fd5357366e8786bd29aa7aa" + integrity sha512-4rHP0PUeWkSp0O3waNHPQZCHeZnLu8bE59MerWOnZJ249BCyICXL1WWp3xqkMKXEDFYuhfk3bS42bKB9IeN9uw== + +mobx-react-lite@>=2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-2.0.7.tgz#1bfb3b4272668e288047cf0c7940b14e91cba284" + integrity sha512-YKAh2gThC6WooPnVZCoC+rV1bODAKFwkhxikzgH18wpBjkgTkkR9Sb0IesQAH5QrAEH/JQVmy47jcpQkf2Au3Q== + +mobx-react@^6.1.8: + version "6.2.5" + resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-6.2.5.tgz#9020a17b79cc6dc3d124ad89ab36eb9ea540a45b" + integrity sha512-LxtXXW0GkOAO6VOIg2m/6WL6ZuKlzOWwESIFdrWelI0ZMIvtKCMZVUuulcO5GAWSDsH0ApaMkGLoaPqKjzyziQ== + dependencies: + mobx-react-lite ">=2.0.6" + +mobx@^5.10.0, mobx@^5.15.4: + version "5.15.4" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.4.tgz#9da1a84e97ba624622f4e55a0bf3300fb931c2ab" + integrity sha512-xRFJxSU2Im3nrGCdjSuOTFmxVDGeqOHL+TyADCGbT0k4HHqGmx5u2yaHNryvoORpI4DfbzjJ5jPmuv+d7sioFw== + +moment@^2.19.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" + integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + +monaco-editor-webpack-plugin@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.9.0.tgz#5b547281b9f404057dc5d8c5722390df9ac90be6" + integrity sha512-tOiiToc94E1sb50BgZ8q8WK/bxus77SRrwCqIpAB5er3cpX78SULbEBY4YPOB8kDolOzKRt30WIHG/D6gz69Ww== + dependencies: + loader-utils "^1.2.3" + +monaco-editor@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.20.0.tgz#5d5009343a550124426cb4d965a4d27a348b4dea" + integrity sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ== + +monotone-convex-hull-2d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz#47f5daeadf3c4afd37764baa1aa8787a40eee08c" + integrity sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw= + dependencies: + robust-orientation "^1.1.3" + +mouse-change@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mouse-change/-/mouse-change-1.4.0.tgz#c2b77e5bfa34a43ce1445c8157a4e4dc9895c14f" + integrity sha1-wrd+W/o0pDzhRFyBV6Tk3JiVwU8= + dependencies: + mouse-event "^1.0.0" + +mouse-event-offset@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz#dfd86a6e248c6ba8cad53b905d5037a2063e9984" + integrity sha1-39hqbiSMa6jK1TuQXVA3ogY+mYQ= + +mouse-event@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/mouse-event/-/mouse-event-1.0.5.tgz#b3789edb7109997d5a932d1d01daa1543a501732" + integrity sha1-s3ie23EJmX1aky0dAdqhVDpQFzI= + +mouse-wheel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mouse-wheel/-/mouse-wheel-1.2.0.tgz#6d2903b1ea8fb48e61f1b53b9036773f042cdb5c" + integrity sha1-bSkDseqPtI5h8bU7kDZ3PwQs21w= + dependencies: + right-now "^1.0.0" + signum "^1.0.0" + to-px "^1.0.1" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mumath@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf" + integrity sha1-SNSg8P2MrU57Mglu6JsWGmPTC78= + dependencies: + almost-equal "^1.1.0" + +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + +nan@^2.12.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-request@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.7.tgz#ff742dc555b4c8f2f1c14b548639ba174e573856" + integrity sha512-9nRjinI9bmz+S7dgNtf4A70+/vPhnd+2krGpy4SUlADuOuSa24IDkNaZ+R/QT1wQ6S8jBdi6wE7fLekFZNfUpQ== + +ndarray-extract-contour@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ndarray-extract-contour/-/ndarray-extract-contour-1.0.1.tgz#0aee113a3a33b226b90c4888cf877bf4751305e4" + integrity sha1-Cu4ROjozsia5DEiIz4d79HUTBeQ= + dependencies: + typedarray-pool "^1.0.0" + +ndarray-gradient@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ndarray-gradient/-/ndarray-gradient-1.0.0.tgz#b7491a515c6a649f19a62324fff6f27fc8c25393" + integrity sha1-t0kaUVxqZJ8ZpiMk//byf8jCU5M= + dependencies: + cwise-compiler "^1.0.0" + dup "^1.0.0" + +ndarray-linear-interpolate@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz#78bc92b85b9abc15b6e67ee65828f9e2137ae72b" + integrity sha1-eLySuFuavBW25n7mWCj54hN65ys= + +ndarray-ops@^1.1.0, ndarray-ops@^1.2.1, ndarray-ops@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" + integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4= + dependencies: + cwise-compiler "^1.0.0" + +ndarray-pack@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" + integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo= + dependencies: + cwise-compiler "^1.1.2" + ndarray "^1.0.13" + +ndarray-scratch@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ndarray-scratch/-/ndarray-scratch-1.2.0.tgz#6304636d62eba93db4727ac13c693341dba50e01" + integrity sha1-YwRjbWLrqT20cnrBPGkzQdulDgE= + dependencies: + ndarray "^1.0.14" + ndarray-ops "^1.2.1" + typedarray-pool "^1.0.2" + +ndarray-sort@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ndarray-sort/-/ndarray-sort-1.0.1.tgz#fea05b4cb834c7f4e0216a354f3ca751300dfd6a" + integrity sha1-/qBbTLg0x/TgIWo1TzynUTAN/Wo= + dependencies: + typedarray-pool "^1.0.0" + +ndarray@^1.0.11, ndarray@^1.0.13, ndarray@^1.0.14, ndarray@^1.0.15, ndarray@^1.0.18, ndarray@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e" + integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== + dependencies: + iota-array "^1.0.0" + is-buffer "^1.0.2" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nextafter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nextafter/-/nextafter-1.0.0.tgz#b7d77b535310e3e097e6025abb0a903477ec1a3a" + integrity sha1-t9d7U1MQ4+CX5gJauwqQNHfsGjo= + dependencies: + double-bits "^1.1.0" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nise@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" + integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^5.0.1" + path-to-regexp "^1.7.0" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-svg-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.0.1.tgz#6f729ad6b70bb4ca4eff2fe4b107489efe1d56fe" + integrity sha1-b3Ka1rcLtMpO/y/ksQdInv4dVv4= + dependencies: + svg-arc-to-cubic-bezier "^3.0.0" + +normalize-svg-path@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5" + integrity sha1-RWNg5g7Odfvve11+FgSA5//Rb+U= + +normalize-url@^1.0.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize.css@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" + integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== + +normals@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/normals/-/normals-1.1.0.tgz#325b595ed34afe467a6c55a14fd9085787ff59c0" + integrity sha1-MltZXtNK/kZ6bFWhT9kIV4f/WcA= + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +number-is-integer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-integer/-/number-is-integer-1.0.1.tgz#e59bca172ffed27318e79c7ceb6cb72c095b2152" + integrity sha1-5ZvKFy/+0nMY55x862y3LAlbIVI= + dependencies: + is-finite "^1.0.1" + +numeric@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/numeric/-/numeric-1.2.6.tgz#765b02bef97988fcf880d4eb3f36b80fa31335aa" + integrity sha1-dlsCvvl5iPz4gNTrPza4D6MTNao= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-inspect@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.0.9, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +orbit-camera-controller@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/orbit-camera-controller/-/orbit-camera-controller-4.0.0.tgz#6e2b36f0e7878663c330f50da9b7ce686c277005" + integrity sha1-bis28OeHhmPDMPUNqbfOaGwncAU= + dependencies: + filtered-vector "^1.2.1" + gl-mat4 "^1.0.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" + integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pad-left@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-1.0.2.tgz#19e5735ea98395a26cedc6ab926ead10f3100d4c" + integrity sha1-GeVzXqmDlaJs7carkm6tEPMQDUw= + dependencies: + repeat-string "^1.3.0" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +papaparse@5.2.0, papaparse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.2.0.tgz#97976a1b135c46612773029153dc64995caa3b7b" + integrity sha512-ylq1wgUSnagU+MKQtNeVqrPhZuMYBvOSL00DHycFTCxownF95gpLAk1HiHdUW77N8yxRq1qHXLdlIPyBSG9NSA== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parenthesis@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.7.tgz#01c89b603a2a6a262ec47554e74ed154a9be2aa6" + integrity sha512-iMtu+HCbLXVrpf6Ys/4YKhcFxbux3xK4ZVB9r+a2kMSqeeQWQoDNYlXIsOjwlT2ldYXZ3k5PVeBnYn7fbAo/Bg== + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse-rect@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-rect/-/parse-rect-1.2.0.tgz#e0a5b0dbaaaee637a0a1eb9779969e19399d8dec" + integrity sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA== + dependencies: + pick-by-alias "^1.2.0" + +parse-svg-path@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb" + integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes= + +parse-unit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-unit/-/parse-unit-1.0.1.tgz#7e1bb6d5bef3874c28e392526a2541170291eecf" + integrity sha1-fhu21b7zh0wo45JSaiVBFwKR7s8= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + +pbf@^3.0.5, pbf@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +permutation-parity@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/permutation-parity/-/permutation-parity-1.0.0.tgz#0174d51fca704b11b9a4b152b23d537fdc6b5ef4" + integrity sha1-AXTVH8pwSxG5pLFSsj1Tf9xrXvQ= + dependencies: + typedarray-pool "^1.0.0" + +permutation-rank@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/permutation-rank/-/permutation-rank-1.0.0.tgz#9fd98bbcecf08fbf5994b5eadc94a62e679483b5" + integrity sha1-n9mLvOzwj79ZlLXq3JSmLmeUg7U= + dependencies: + invert-permutation "^1.0.0" + typedarray-pool "^1.0.0" + +pick-by-alias@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b" + integrity sha1-X3yysfIabh6ISgyHhVqko3NhEHs= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +planar-dual@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/planar-dual/-/planar-dual-1.0.2.tgz#b6a4235523b1b0cb79e5f926f8ea335dd982d563" + integrity sha1-tqQjVSOxsMt55fkm+OozXdmC1WM= + dependencies: + compare-angle "^1.0.0" + dup "^1.0.0" + +planar-graph-to-polyline@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/planar-graph-to-polyline/-/planar-graph-to-polyline-1.0.5.tgz#882b8605199ba88bfd464c9553303556c52b988a" + integrity sha1-iCuGBRmbqIv9RkyVUzA1VsUrmIo= + dependencies: + edges-to-adjacency-list "^1.0.0" + planar-dual "^1.0.0" + point-in-big-polygon "^2.0.0" + robust-orientation "^1.0.1" + robust-sum "^1.0.0" + two-product "^1.0.0" + uniq "^1.0.0" + +plotly.js@^1.54.7: + version "1.54.7" + resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-1.54.7.tgz#a114fbab8dabf5cde272a3841aad9dbf2e4266d4" + integrity sha512-jNeQ5bcBioFiLkhb6N0B+Pt2szQKczYcuCw6W34ecZo0xAYsYsaNa64iNDDQUyjqTIM6GYvvUhe3KKNa36moig== + dependencies: + "@plotly/d3-sankey" "0.7.2" + "@plotly/d3-sankey-circular" "0.33.1" + "@turf/area" "^6.0.1" + "@turf/bbox" "^6.0.1" + "@turf/centroid" "^6.0.2" + alpha-shape "^1.0.0" + canvas-fit "^1.5.0" + color-normalize "^1.5.0" + color-rgba "^2.1.1" + convex-hull "^1.0.3" + country-regex "^1.1.0" + d3 "^3.5.17" + d3-force "^1.2.1" + d3-hierarchy "^1.1.9" + d3-interpolate "^1.4.0" + delaunay-triangulate "^1.1.6" + es6-promise "^4.2.8" + fast-isnumeric "^1.1.4" + gl-cone3d "^1.5.2" + gl-contour2d "^1.1.7" + gl-error3d "^1.0.16" + gl-heatmap2d "^1.0.6" + gl-line3d "1.2.1" + gl-mat4 "^1.2.0" + gl-mesh3d "^2.3.1" + gl-plot2d "^1.4.5" + gl-plot3d "^2.4.6" + gl-pointcloud2d "^1.0.3" + gl-scatter3d "^1.2.3" + gl-select-box "^1.0.4" + gl-spikes2d "^1.0.2" + gl-streamtube3d "^1.4.1" + gl-surface3d "^1.5.2" + gl-text "^1.1.8" + glslify "^7.0.0" + has-hover "^1.0.1" + has-passive-events "^1.0.0" + is-mobile "^2.2.2" + mapbox-gl "1.10.1" + matrix-camera-controller "^2.1.3" + mouse-change "^1.4.0" + mouse-event-offset "^3.0.2" + mouse-wheel "^1.2.0" + ndarray "^1.0.19" + ndarray-linear-interpolate "^1.0.0" + parse-svg-path "^0.1.2" + point-cluster "^3.1.8" + polybooljs "^1.2.0" + regl "^1.6.1" + regl-error2d "^2.0.8" + regl-line2d "^3.0.15" + regl-scatter2d "^3.1.8" + regl-splom "^1.0.8" + right-now "^1.0.0" + robust-orientation "^1.1.3" + sane-topojson "^4.0.0" + strongly-connected-components "^1.0.1" + superscript-text "^1.0.0" + svg-path-sdf "^1.1.3" + tinycolor2 "^1.4.1" + to-px "1.0.1" + topojson-client "^3.1.0" + webgl-context "^2.2.0" + world-calendars "^1.0.3" + +point-cluster@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/point-cluster/-/point-cluster-3.1.8.tgz#a63625fd8964f2a5b446025a1acf8bcac42500c0" + integrity sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ== + dependencies: + array-bounds "^1.0.1" + array-normalize "^1.1.4" + binary-search-bounds "^2.0.4" + bubleify "^1.1.0" + clamp "^1.0.1" + defined "^1.0.0" + dtype "^2.0.0" + flatten-vertex-data "^1.0.2" + is-obj "^1.0.1" + math-log2 "^1.0.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + +point-in-big-polygon@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/point-in-big-polygon/-/point-in-big-polygon-2.0.0.tgz#39b613ea6cf17d6b43e188f77f34c44c6b33ba55" + integrity sha1-ObYT6mzxfWtD4Yj3fzTETGszulU= + dependencies: + binary-search-bounds "^1.0.0" + interval-tree-1d "^1.0.1" + robust-orientation "^1.1.3" + slab-decomposition "^1.0.1" + +polybooljs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/polybooljs/-/polybooljs-1.2.0.tgz#b4390c2e079d4c262d3b2504c6288d95ba7a4758" + integrity sha1-tDkMLgedTCYtOyUExiiNlbp6R1g= + +polytope-closest-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/polytope-closest-point/-/polytope-closest-point-1.0.0.tgz#e6e57f4081ab5e8c778b811ef06e2c48ae338c3f" + integrity sha1-5uV/QIGrXox3i4Ee8G4sSK4zjD8= + dependencies: + numeric "^1.2.6" + +popper.js@^1.14.4, popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +potpack@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" + integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prop-types@^15.6.1, 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== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +protocol-buffers-schema@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae" + integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA== + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pxls@^2.0.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/pxls/-/pxls-2.3.2.tgz#79100d2cc95089fc6e00053a9d93c1ddddb2c7b4" + integrity sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw== + dependencies: + arr-flatten "^1.1.0" + compute-dims "^1.1.0" + flip-pixels "^1.0.2" + is-browser "^2.1.0" + is-buffer "^2.0.3" + to-uint8 "^1.4.1" + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +quantize@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/quantize/-/quantize-1.0.2.tgz#d25ac200a77b6d70f40127ca171a10e33c8546de" + integrity sha1-0lrCAKd7bXD0ASfKFxoQ4zyFRt4= + +quat-slerp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/quat-slerp/-/quat-slerp-1.0.1.tgz#2baa15ce3a6bbdc3241d972eb17283139ed69f29" + integrity sha1-K6oVzjprvcMkHZcusXKDE57Wnyk= + dependencies: + gl-quat "^1.0.0" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rat-vec@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rat-vec/-/rat-vec-1.1.1.tgz#0dde2b66b7b34bb1bcd2a23805eac806d87fd17f" + integrity sha1-Dd4rZrezS7G80qI4BerIBth/0X8= + dependencies: + big-rat "^1.0.3" + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933" + integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +react-dom@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-is@^16.8.1: + version "16.13.1" + 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.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.3.0: + 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-plotly.js@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-plotly.js/-/react-plotly.js-2.4.0.tgz#7a8fd89ffa126daa36a5855890282960e2e4eaf0" + integrity sha512-BCkxMe8yWqu3nP/hw9A1KCIuoL67WV5/k68SL9yhEkF6UG+pAuIev9Q3cMKtNkQJZhsYFpOmlqrpPjIdUFACOQ== + dependencies: + prop-types "^15.7.2" + +react-popper@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.7.tgz#f6a3471362ef1f0d10a4963673789de1baca2324" + integrity sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww== + dependencies: + "@babel/runtime" "^7.1.2" + create-react-context "^0.3.0" + deep-equal "^1.1.1" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-svg-pan-zoom@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/react-svg-pan-zoom/-/react-svg-pan-zoom-3.8.0.tgz#5724c71d257a07233c9cc511a5c6498d80bb397a" + integrity sha512-s92QDFJuRrp784aQZKX8qxukMY/85IpOXO5Bjbn1G/CoNapdHCRVAHynPP6Ea9cyMmycSmu6paPqUIAW3i5s9Q== + dependencies: + prop-types "^15.7.2" + transformation-matrix "^2.2.0" + +react-transition-group@^2.9.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.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +reduce-simplicial-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/reduce-simplicial-complex/-/reduce-simplicial-complex-1.0.0.tgz#74d696a2f835f7a6dcd92065fd8c5181f2edf8bc" + integrity sha1-dNaWovg196bc2SBl/YxRgfLt+Lw= + dependencies: + cell-orientation "^1.0.1" + compare-cell "^1.0.0" + compare-oriented-cell "^1.0.1" + +regenerate-unicode-properties@^8.0.2, 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" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regex-regex/-/regex-regex-1.0.0.tgz#9048a1eaeb870f4d480dabc76fc42cdcc0bc3a72" + integrity sha1-kEih6uuHD01IDavHb8Qs3MC8OnI= + +regexp-to-ast@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz#f3dbcb42726cd71902ba50193f63eab5325cd7cb" + integrity sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw== + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpu-core@4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regexpu-core@^4.5.4: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.0, regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.0, regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +regl-error2d@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.10.tgz#2570d4c0b3f297050996a6e72da904b24251c760" + integrity sha512-5s9QIOGOYLmfZXDivHskbztdmzMskvTiq6Xzq/ijSpAoWm/Utm2ppzv/cyy8FjpnEThqEFJC8XA8jW2+pSOVNw== + dependencies: + array-bounds "^1.0.1" + bubleify "^2.0.0" + color-normalize "^1.5.0" + flatten-vertex-data "^1.0.2" + object-assign "^4.1.1" + pick-by-alias "^1.2.0" + to-float32 "^1.0.1" + update-diff "^1.1.0" + +regl-line2d@^3.0.15: + version "3.0.17" + resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.0.17.tgz#012985419b7be9ec055c4e23007d784d7eed2f13" + integrity sha512-lBIwb6qxmQQzddwHIt5XZx8/OsRIukcFRPvaF2sQ33QSUtTKxoEp4P82Zyhbih8CEIMNtw4EyWD1e8znBEDM9Q== + dependencies: + array-bounds "^1.0.1" + array-normalize "^1.1.4" + bubleify "^2.0.0" + color-normalize "^1.5.0" + earcut "^2.1.5" + es6-weak-map "^2.0.3" + flatten-vertex-data "^1.0.2" + glslify "^7.0.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + to-float32 "^1.0.1" + +regl-scatter2d@^3.1.2, regl-scatter2d@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.1.8.tgz#5fdf77f9cee7e71497d038dc1b654dc4340b6bfb" + integrity sha512-Z9MYAUx9t8e3MsiHBbJAEstbIqauXxzcL9DmuKXQuRWfCMF2DBytYJtE0FpbQU6639wEMAJ54SEIlISWF8sQ2g== + dependencies: + array-range "^1.0.1" + array-rearrange "^2.2.2" + clamp "^1.0.1" + color-id "^1.1.0" + color-normalize "1.5.0" + color-rgba "^2.1.1" + flatten-vertex-data "^1.0.2" + glslify "^7.0.0" + image-palette "^2.1.0" + is-iexplorer "^1.0.0" + object-assign "^4.1.1" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + point-cluster "^3.1.8" + to-float32 "^1.0.1" + update-diff "^1.1.0" + +regl-splom@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.9.tgz#a3839511c7a2b37fa16918100f5911802874273e" + integrity sha512-/sAka6KtShAi933xCN+qlSreHw7uoqKRyH6eoTkio1U//N/c5Jxc7idj2bTFeJ1Z2npDNoTuxircbR8TSvt9Cg== + dependencies: + array-bounds "^1.0.1" + array-range "^1.0.1" + bubleify "^2.0.0" + color-alpha "^1.0.4" + defined "^1.0.0" + flatten-vertex-data "^1.0.2" + left-pad "^1.3.0" + parse-rect "^1.2.0" + pick-by-alias "^1.2.0" + point-cluster "^3.1.8" + raf "^3.4.1" + regl-scatter2d "^3.1.2" + +regl@^1.3.11, regl@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/regl/-/regl-1.6.1.tgz#6930172cda9b8fb65724abc0d4930d79333f5460" + integrity sha512-7Z9rmpEqmLNwC9kCYCyfyu47eWZaQWeNpwZfwz99QueXN8B/Ow40DB0N+OeUeM/yu9pZAB01+JgJ+XghGveVoA== + +regular-table@=0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/regular-table/-/regular-table-0.0.2.tgz#53f9c5b96c0a4f1f3f1288808e53d5ec4237636e" + integrity sha512-r1ZsrN/4wepK5tkNBiG/PVbpPaVEQAaYJZKpOSsPIY1PW5gZqgm6Sf4c0ZlTWH3SLVX6uGffCFIIgARUoifyEA== + dependencies: + core-js "^3.6.4" + papaparse "5.2.0" + superscript-number "^1.0.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.3.0, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "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, resize-observer-polyfill@^1.5.1: + 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" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" + integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY= + +resolve@^1.0.0, resolve@^1.1.5, resolve@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +right-now@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/right-now/-/right-now-1.0.0.tgz#6e89609deebd7dcdaf8daecc9aea39cf585a0918" + integrity sha1-bolgne69fc2vja7Mmuo5z1haCRg= + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +robust-compress@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-compress/-/robust-compress-1.0.0.tgz#4cf62c4b318d8308516012bb8c11752f39329b1b" + integrity sha1-TPYsSzGNgwhRYBK7jBF1Lzkymxs= + +robust-determinant@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/robust-determinant/-/robust-determinant-1.1.0.tgz#8ecae79b79caab3e74f6debe2237e5391a27e9c7" + integrity sha1-jsrnm3nKqz509t6+IjflORon6cc= + dependencies: + robust-compress "^1.0.0" + robust-scale "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-dot-product@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-dot-product/-/robust-dot-product-1.0.0.tgz#c9ba0178bd2c304bfd725f58e889f1d946004553" + integrity sha1-yboBeL0sMEv9cl9Y6Inx2UYARVM= + dependencies: + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-in-sphere@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/robust-in-sphere/-/robust-in-sphere-1.1.3.tgz#1c5883d16a4e923929476ef34819857bf2a9cf75" + integrity sha1-HFiD0WpOkjkpR27zSBmFe/Kpz3U= + dependencies: + robust-scale "^1.0.0" + robust-subtract "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.0" + +robust-linear-solve@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-linear-solve/-/robust-linear-solve-1.0.0.tgz#0cd6ac5040691a6f2aa3cd6311d728905ca3a1f1" + integrity sha1-DNasUEBpGm8qo81jEdcokFyjofE= + dependencies: + robust-determinant "^1.1.0" + +robust-orientation@^1.0.1, robust-orientation@^1.0.2, robust-orientation@^1.1.2, robust-orientation@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/robust-orientation/-/robust-orientation-1.1.3.tgz#daff5b00d3be4e60722f0e9c0156ef967f1c2049" + integrity sha1-2v9bANO+TmByLw6cAVbvln8cIEk= + dependencies: + robust-scale "^1.0.2" + robust-subtract "^1.0.0" + robust-sum "^1.0.0" + two-product "^1.0.2" + +robust-product@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-product/-/robust-product-1.0.0.tgz#685250007cdbba7cf1de75bff6d2927011098abe" + integrity sha1-aFJQAHzbunzx3nW/9tKScBEJir4= + dependencies: + robust-scale "^1.0.0" + robust-sum "^1.0.0" + +robust-scale@^1.0.0, robust-scale@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32" + integrity sha1-d1Ey7QlULQKOWLLMecBikLz3jDI= + dependencies: + two-product "^1.0.2" + two-sum "^1.0.0" + +robust-segment-intersect@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/robust-segment-intersect/-/robust-segment-intersect-1.0.1.tgz#3252b6a0fc1ba14ade6915ccbe09cbce9aab1c1c" + integrity sha1-MlK2oPwboUreaRXMvgnLzpqrHBw= + dependencies: + robust-orientation "^1.1.3" + +robust-subtract@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-subtract/-/robust-subtract-1.0.0.tgz#e0b164e1ed8ba4e3a5dda45a12038348dbed3e9a" + integrity sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo= + +robust-sum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9" + integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k= + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rw@1, rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane-topojson@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/sane-topojson/-/sane-topojson-4.0.0.tgz#624cdb26fc6d9392c806897bfd1a393f29bb5308" + integrity sha512-bJILrpBboQfabG3BNnHI2hZl52pbt80BE09u4WhnrmzuF2JbMKZdl62G5glXskJ46p+gxE2IzOwGj/awR4g8AA== + +sass-loader@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +sass@^1.25.0: + version "1.26.10" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" + integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + dependencies: + node-forge "0.9.0" + +semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallow-copy@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" + integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +signum@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/signum/-/signum-0.0.0.tgz#ab551b1003351070a704783f1a09c5e7691f9cf6" + integrity sha1-q1UbEAM1EHCnBHg/GgnF52kfnPY= + +signum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/signum/-/signum-1.0.0.tgz#74a7d2bf2a20b40eba16a92b152124f1d559fa77" + integrity sha1-dKfSvyogtA66FqkrFSEk8dVZ+nc= + +simplicial-complex-boundary@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simplicial-complex-boundary/-/simplicial-complex-boundary-1.0.1.tgz#72c9ff1e24deaa374c9bb2fa0cbf0c081ebef815" + integrity sha1-csn/HiTeqjdMm7L6DL8MCB6++BU= + dependencies: + boundary-cells "^2.0.0" + reduce-simplicial-complex "^1.0.0" + +simplicial-complex-contour@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/simplicial-complex-contour/-/simplicial-complex-contour-1.0.2.tgz#890aacac284365340110545cf2629a26e04bf9d1" + integrity sha1-iQqsrChDZTQBEFRc8mKaJuBL+dE= + dependencies: + marching-simplex-table "^1.0.0" + ndarray "^1.0.15" + ndarray-sort "^1.0.0" + typedarray-pool "^1.1.0" + +simplicial-complex@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-0.3.3.tgz#4c30cad57f9e45729dd8f306c8753579f46be99e" + integrity sha1-TDDK1X+eRXKd2PMGyHU1efRr6Z4= + dependencies: + bit-twiddle "~0.0.1" + union-find "~0.0.3" + +simplicial-complex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-1.0.0.tgz#6c33a4ed69fcd4d91b7bcadd3b30b63683eae241" + integrity sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE= + dependencies: + bit-twiddle "^1.0.0" + union-find "^1.0.0" + +simplify-planar-graph@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/simplify-planar-graph/-/simplify-planar-graph-2.0.1.tgz#bc85893725f32e8fa8ae25681398446d2cbcf766" + integrity sha1-vIWJNyXzLo+oriVoE5hEbSy892Y= + dependencies: + robust-orientation "^1.0.1" + simplicial-complex "^0.3.3" + +sinon@^7.2.7: + version "7.5.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" + integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== + dependencies: + "@sinonjs/commons" "^1.4.0" + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/samsam" "^3.3.3" + diff "^3.5.0" + lolex "^4.2.0" + nise "^1.5.2" + supports-color "^5.5.0" + +slab-decomposition@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/slab-decomposition/-/slab-decomposition-1.0.2.tgz#1ded56754d408b10739f145103dfc61807f65134" + integrity sha1-He1WdU1AixBznxRRA9/GGAf2UTQ= + dependencies: + binary-search-bounds "^1.0.0" + functional-red-black-tree "^1.0.0" + robust-orientation "^1.1.3" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.1.tgz#703df5345b0816734f0336c1ccee8af66e082061" + integrity sha512-DE4CJyfCVoxFLsHyuVE9Sjcib8cs5qdmOq3wcev1Un/r6F2AfQJDhag4rzpPPA48A2QZyV3CTbc+NGoFMfKIOQ== + dependencies: + data-urls "^2.0.0" + iconv-lite "^0.5.1" + loader-utils "^2.0.0" + schema-utils "^2.6.6" + source-map "^0.6.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.17, source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-polygon@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/split-polygon/-/split-polygon-1.0.0.tgz#0eacc8a136a76b12a3d95256ea7da45db0c2d247" + integrity sha1-DqzIoTanaxKj2VJW6n2kXbDC0kc= + dependencies: + robust-dot-product "^1.0.0" + robust-sum "^1.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stack-trace@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + integrity sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU= + +static-eval@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.1.0.tgz#a16dbe54522d7fa5ef1389129d813fd47b148014" + integrity sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw== + dependencies: + escodegen "^1.11.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-split-by@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812" + integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A== + dependencies: + parenthesis "^3.1.5" + +string-to-arraybuffer@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz#161147fbadea02e28b0935002cec4c40f1ca7f0a" + integrity sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q== + dependencies: + atob-lite "^2.0.0" + is-base64 "^0.1.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trim@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" + integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +strip-url-auth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" + integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= + +strongly-connected-components@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99" + integrity sha1-CSDitN9nyOrulsa2I0/inoc9upk= + +style-loader@^1.1.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.6" + +supercluster@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.0.tgz#f0a457426ec0ab95d69c5f03b51e049774b94479" + integrity sha512-LDasImUAFMhTqhK+cUXfy9C2KTUqJ3gucLjmNLNFmKWOnDUBxLFLH9oKuXOTCLveecmxh8fbk8kgh6Q0gsfe2w== + dependencies: + kdbush "^3.0.0" + +superscript-number@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/superscript-number/-/superscript-number-1.0.0.tgz#763613e214891dadc188995d0c7485c8c0beb6ef" + integrity sha1-djYT4hSJHa3BiJldDHSFyMC+tu8= + +superscript-text@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/superscript-text/-/superscript-text-1.0.0.tgz#e7cb2752567360df50beb0610ce8df3d71d8dfd8" + integrity sha1-58snUlZzYN9QvrBhDOjfPXHY39g= + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +surface-nets@^1.0.0, surface-nets@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/surface-nets/-/surface-nets-1.0.2.tgz#e433c8cbba94a7274c6f4c99552b461bf1fc7a4b" + integrity sha1-5DPIy7qUpydMb0yZVStGG/H8eks= + dependencies: + ndarray-extract-contour "^1.0.0" + triangulate-hypercube "^1.0.0" + zero-crossings "^1.0.0" + +svg-arc-to-cubic-bezier@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6" + integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g== + +svg-path-bounds@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/svg-path-bounds/-/svg-path-bounds-1.0.1.tgz#bf458b783726bf53431b4633f2792f60748d9f74" + integrity sha1-v0WLeDcmv1NDG0Yz8nkvYHSNn3Q= + dependencies: + abs-svg-path "^0.1.1" + is-svg-path "^1.0.1" + normalize-svg-path "^1.0.0" + parse-svg-path "^0.1.2" + +svg-path-sdf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz#92957a31784c0eaf68945472c8dc6bf9e6d126fc" + integrity sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg== + dependencies: + bitmap-sdf "^1.0.0" + draw-svg-path "^1.0.0" + is-svg-path "^1.0.1" + parse-svg-path "^0.1.2" + svg-path-bounds "^1.0.1" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tape@^4.0.0: + version "4.13.3" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" + integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.5" + object-inspect "~1.7.0" + resolve "~1.17.0" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + +terser-webpack-plugin@^1.4.3: + version "1.4.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" + integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^3.1.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-cache@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/text-cache/-/text-cache-4.2.2.tgz#d0d30ba89b7312ea1c1a31cd9a4db56c1cef7fe7" + integrity sha512-zky+UDYiX0a/aPw/YTBD+EzKMlCTu1chFuCMZeAkgoRiceySdROu1V2kJXhCbtEdBhiOviYnAdGiSYl58HW0ZQ== + dependencies: + vectorize-text "^3.2.1" + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + +through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0, through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + +tinyqueue@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + +to-array-buffer@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/to-array-buffer/-/to-array-buffer-3.2.0.tgz#cb684dd691a7368c3b249c2348d75227f7d4dbb4" + integrity sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ== + dependencies: + flatten-vertex-data "^1.0.2" + is-blob "^2.0.1" + string-to-arraybuffer "^1.0.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-float32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.0.1.tgz#22d5921f38183164b9e7e9876158c0c16cb9753a" + integrity sha512-nOy2WSwae3xhZbc+05xiCuU3ZPPmH0L4Rg4Q1qiOGFSuNSCTB9nVJaGgGl3ZScxAclX/L8hJuDHJGDAzbfuKCQ== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-px@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.0.1.tgz#5bbaed5e5d4f76445bcc903c293a2307dd324646" + integrity sha1-W7rtXl1PdkRbzJA8KTojB90yRkY= + dependencies: + parse-unit "^1.0.1" + +to-px@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-px/-/to-px-1.1.0.tgz#b6b269ed5db0cc9aefc15272a4c8bcb2ca1e99ca" + integrity sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw== + dependencies: + parse-unit "^1.0.1" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-uint8@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/to-uint8/-/to-uint8-1.4.1.tgz#9f45694905b827f247d37bc8ec83b2818d81fac9" + integrity sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg== + dependencies: + arr-flatten "^1.1.0" + clamp "^1.0.1" + is-base64 "^0.1.0" + is-float-array "^1.0.0" + to-array-buffer "^3.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +topojson-client@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +transformation-matrix@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/transformation-matrix/-/transformation-matrix-2.4.0.tgz#9a63865c6f939c4abc4924d260242611101a5ee2" + integrity sha512-cZyijcvmC+ms5M5dw5IzU7A27lKLR7SrRKtopdMK4KZ+cfTzOOKS2iT3vqFPOiKMM9cb81MyAQMxF/cihTbThA== + +triangulate-hypercube@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/triangulate-hypercube/-/triangulate-hypercube-1.0.1.tgz#d8071db2ebfcfd51f308d0bcf2a5c48a5b36d137" + integrity sha1-2Acdsuv8/VHzCNC88qXEils20Tc= + dependencies: + gamma "^0.1.0" + permutation-parity "^1.0.0" + permutation-rank "^1.0.0" + +triangulate-polyline@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/triangulate-polyline/-/triangulate-polyline-1.0.3.tgz#bf8ba877a85054103feb9fa5a61b4e8d7017814d" + integrity sha1-v4uod6hQVBA/65+lphtOjXAXgU0= + dependencies: + cdt2d "^1.0.0" + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + +ts-loader@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" + integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^4.0.0" + semver "^6.0.0" + +ts-node@^8.6.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tslib@~1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +turntable-camera-controller@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/turntable-camera-controller/-/turntable-camera-controller-3.0.1.tgz#8dbd3fe00550191c65164cb888971049578afd99" + integrity sha1-jb0/4AVQGRxlFky4iJcQSVeK/Zk= + dependencies: + filtered-vector "^1.2.1" + gl-mat4 "^1.0.2" + gl-vec3 "^1.0.2" + +two-product@^1.0.0, two-product@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/two-product/-/two-product-1.0.2.tgz#67d95d4b257a921e2cb4bd7af9511f9088522eaa" + integrity sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo= + +two-sum@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/two-sum/-/two-sum-1.0.0.tgz#31d3f32239e4f731eca9df9155e2b297f008ab64" + integrity sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type-name@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" + integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + +typedarray-pool@^1.0.0, typedarray-pool@^1.0.2, typedarray-pool@^1.1.0, typedarray-pool@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typedarray-pool/-/typedarray-pool-1.2.0.tgz#e7e90720144ba02b9ed660438af6f3aacfe33ac3" + integrity sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ== + dependencies: + bit-twiddle "^1.0.0" + dup "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.8.2, typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +uglify-js@3.4.x: + version "3.4.10" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" + integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +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" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0, unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-find@^1.0.0, union-find@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/union-find/-/union-find-1.0.2.tgz#292bac415e6ad3a89535d237010db4a536284e58" + integrity sha1-KSusQV5q06iVNdI3AQ20pTYoTlg= + +union-find@~0.0.3: + version "0.0.4" + resolved "https://registry.yarnpkg.com/union-find/-/union-find-0.0.4.tgz#b854b3301619bdad144b0014c78f96eac0d2f0f6" + integrity sha1-uFSzMBYZva0USwAUx4+W6sDS8PY= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.0, uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-diff/-/update-diff-1.1.0.tgz#f510182d81ee819fb82c3a6b22b62bbdeda7808f" + integrity sha1-9RAYLYHugZ+4LDprIrYrve2ngI8= + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-copy-error@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-copy-error/-/utils-copy-error-1.0.1.tgz#791de393c0f09890afd59f3cbea635f079a94fa5" + integrity sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U= + dependencies: + object-keys "^1.0.9" + utils-copy "^1.1.0" + +utils-copy@^1.0.0, utils-copy@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/utils-copy/-/utils-copy-1.1.1.tgz#6e2b97982aa8cd73e1182a3e6f8bec3c0f4058a7" + integrity sha1-biuXmCqozXPhGCo+b4vsPA9AWKc= + dependencies: + const-pinf-float64 "^1.0.0" + object-keys "^1.0.9" + type-name "^2.0.0" + utils-copy-error "^1.0.0" + utils-indexof "^1.0.0" + utils-regex-from-string "^1.0.0" + validate.io-array "^1.0.3" + validate.io-buffer "^1.0.1" + validate.io-nonnegative-integer "^1.0.0" + +utils-indexof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-indexof/-/utils-indexof-1.0.0.tgz#20feabf09ef1018b523643e8380e7bc83ec61b5c" + integrity sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w= + dependencies: + validate.io-array-like "^1.0.1" + validate.io-integer-primitive "^1.0.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +utils-regex-from-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz#fe1a2909f8de0ff0d5182c80fbc654d6a687d189" + integrity sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk= + dependencies: + regex-regex "^1.0.0" + validate.io-string-primitive "^1.0.0" + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +validate.io-array-like@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz#7af9f7eb7b51715beb2215668ec5cce54faddb5a" + integrity sha1-evn363tRcVvrIhVmjsXM5U+t21o= + dependencies: + const-max-uint32 "^1.0.2" + validate.io-integer-primitive "^1.0.0" + +validate.io-array@^1.0.3, validate.io-array@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00= + +validate.io-buffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz#852d6734021914d5d13afc32531761e3720ed44e" + integrity sha1-hS1nNAIZFNXROvwyUxdh43IO1E4= + +validate.io-integer-primitive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz#a9aa010355fe8681c0fea6c1a74ad2419cadddc6" + integrity sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY= + dependencies: + validate.io-number-primitive "^1.0.0" + +validate.io-integer@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg= + dependencies: + validate.io-number "^1.0.3" + +validate.io-matrix-like@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz#5ec32a75d0889dac736dea68bdd6145b155edfc3" + integrity sha1-XsMqddCInaxzbepovdYUWxVe38M= + +validate.io-ndarray-like@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz#d8a3b0ed165bbf1d2fc0d0073270cfa552295919" + integrity sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk= + +validate.io-nonnegative-integer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz#8069243a08c5f98e95413c929dfd7b18f3f6f29f" + integrity sha1-gGkkOgjF+Y6VQTySnf17GPP28p8= + dependencies: + validate.io-integer "^1.0.5" + +validate.io-number-primitive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz#d2e01f202989369dcf1155449564203afe584e55" + integrity sha1-0uAfICmJNp3PEVVElWQgOv5YTlU= + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg= + +validate.io-positive-integer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz#7ed2d03b4c27558cc66a00aab0f0e921814a6582" + integrity sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI= + dependencies: + validate.io-integer "^1.0.5" + +validate.io-string-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz#b8135b9fb1372bde02fdd53ad1d0ccd6de798fee" + integrity sha1-uBNbn7E3K94C/dU60dDM1t55j+4= + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vectorize-text@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/vectorize-text/-/vectorize-text-3.2.1.tgz#85921abd9685af775fd20a01041a2837fe51bdb5" + integrity sha512-rGojF+D9BB96iPZPUitfq5kaiS6eCJmfEel0NXOK/MzZSuXGiwhoop80PtaDas9/Hg/oaox1tI9g3h93qpuspg== + dependencies: + cdt2d "^1.0.0" + clean-pslg "^1.1.0" + ndarray "^1.0.11" + planar-graph-to-polyline "^1.0.0" + simplify-planar-graph "^2.0.1" + surface-nets "^1.0.0" + triangulate-polyline "^1.0.0" + +vis-data@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vis-data/-/vis-data-7.0.0.tgz#71ff8ec06e4d0b99f1c8cdecfdf97309eb4562cf" + integrity sha512-qKpyAQ9UMT0QygLbCulgabKkgfo8aVkuWSqhvEiaah/iy/Dvj17iMFChUU+UIioorWlweXcp5ziXoMLIl7hTAg== + +vis-network@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/vis-network/-/vis-network-8.0.0.tgz#24e8d832315f2b577c8e29a80a019bb9bd7b2b8a" + integrity sha512-BCeldcMs9sDoq1MzHf6nKxv6Fa6ahX8QvMoiOwjAWAJo12TSdXH9+JDC4ZGBC0U0UDb/lksOudJocvvMiLlauQ== + +viz.js@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-2.1.2.tgz#6f09cd4e10af28754a6d50b055bd2e4a7693983a" + integrity sha512-UO6CPAuEMJ8oNR0gLLNl+wUiIzQUsyUOp8SyyDKTqVRBtq7kk1VnFmIZW8QufjxGrGEuI+LVR7p/C7uEKy0LQw== + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vt-pbf@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" + integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.0.5" + +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +weak-map@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" + integrity sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes= + +weakmap-shim@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/weakmap-shim/-/weakmap-shim-1.1.1.tgz#d65afd784109b2166e00ff571c33150ec2a40b49" + integrity sha1-1lr9eEEJshZuAP9XHDMVDsKkC0k= + +webgl-context@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webgl-context/-/webgl-context-2.2.0.tgz#8f37d7257cf6df1cd0a49e6a7b1b721b94cc86a0" + integrity sha1-jzfXJXz23xzQpJ5qextyG5TMhqA= + dependencies: + get-canvas-context "^1.0.1" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webpack-cli@^3.3.11: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + dependencies: + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.10.3: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.41.6: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" + integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^5.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +world-calendars@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/world-calendars/-/world-calendars-1.0.3.tgz#b25c5032ba24128ffc41d09faf4a5ec1b9c14335" + integrity sha1-slxQMrokEo/8QdCfr0pewbnBQzU= + dependencies: + object-assign "^4.1.0" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.1.2, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.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 "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +zero-crossings@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/zero-crossings/-/zero-crossings-1.0.1.tgz#c562bd3113643f3443a245d12406b88b69b9a9ff" + integrity sha1-xWK9MRNkPzRDokXRJAa4i2m5qf8= + dependencies: + cwise-compiler "^1.0.0"